24

I'm using itemize and tables like the following

\begin{tabularx}{\textwidth}{>{\ttfamily}llX}
 \toprule
 \textbf{\rmfamily Operator} & \textbf{Typen} & \textbf{Regel} \\
 \midrule
 = & Alle Typen &
  \begin{itemize}
   \item This is how we roll
   \item Maybe we can talk?
  \end{itemize} \\
 \bottomrule
\end{tabularx}

But it keeps inserting a vertical space before the itemized list. How can I prevent it from doing so?

2 Answers2

32

Lists like itemize act differently if they are used within a minipage environment. Specifically, they don't insert that vertical space before. So, you could use a minipage environment inside the table cell for the itemize list. There's a trick which is more handy - define this command:

\makeatletter
\newcommand*{\compress}{\@minipagetrue}
\makeatother

Now just use \compress before \begin{itemize}. You could even use it within the column definition, if you also load the array package:

\usepackage{array}
...
\begin{tabularx}{\textwidth}{>{\ttfamily}ll>{\compress}X}

Output of your example using this command:

alt text

The vertical space before itemize is gone. If you would like to compress the lists even more, have a look at

  • the paralist package, which offers a compactitem environment for that purpose, or

  • the enumitem package which allows easy customization of list environments, for example \begin{itemize}[itemsep=0pt], it even provides global configuration commands for lists.

But even with \begin{itemize}[itemsep=0pt,topsep=0pt] I would additionally use \compress.

Stefan Kottwitz
  • 231,401
  • Ohh i see. Any idea why it adds that space by default? Is that so one doesn't have to issue a \\ in the normal usecase before the lists? Where can one find information such as \@minipagetrue? Is that listed in some manual somewhere? What other stuff is affected by that special "magic" command? I'm trying to avoid a minipage, because I generally don't know the width of the X column of the table, but I would need to know it for the minipage. – Johannes Schaub - litb Dec 04 '10 at 03:13
  • 1
    \begin{itemize}[itemsep=0pt,topsep=0pt] was the first thing I tried. It had a smaller amount of space, but it was still there. I didn't look into why. Do you have any idea why? – TH. Dec 04 '10 at 06:59
  • 2
    @TH.: Lists use \addvspace. This command doesn't add vertical space if @minipage is true. This way the minipage environment avoids extra vertical space at the top. We do the same here for lists - so \topsep and perhaps other values used at the beginning of the list don't matter any more. – Stefan Kottwitz Dec 04 '10 at 13:54
  • 2
    @Johannes: In source2e.pdf, 16.5 Vertical spacing, you can find the information regarding \addvspace and @minipage. List items then set \@minipage to false using \everypar. – Stefan Kottwitz Dec 04 '10 at 13:58
  • 1
    Ah, thanks. I'm not sure I understand the rationale behind that design. As this question shows, there are situations other than minipages one might wish to not have such space. – TH. Dec 04 '10 at 22:14
  • Can you use this with a p column? – Mario S. E. Dec 12 '13 at 18:38
  • What exactly is \@minipagetrue? – aleb Aug 31 '17 at 15:22
2

Also consider something like this:

\usepackage{enumitem}
....
\begin{itemize}[nosep, leftmargin=5mm]
    \item Satisfy individual's needs for affiliation
    \item Develop individual's sense of identity
    \item Reduce individual's axiety and feelings of insecurity and powerlessness
\end{itemize}

The nosep kills all vertical spacing, leftmargin halves the horizontal space between the table left border and the bullets

robertspierre
  • 638
  • 3
  • 16