What is the best way to change the amount of vertical space between items in list environments (globally or locally)?
4 Answers
The easiest way to do this is to use the enumitem
package.
\documentclass{article}
\usepackage{lipsum} % for dummy text
\usepackage{enumitem}
\setlist{nosep} % or \setlist{noitemsep} to leave space around whole list
\begin{document}
\lipsum[1]
\begin{enumerate}
\item foo
\item bar
\end{enumerate}
\lipsum[2]
\end{document}
The enumitem
package also allows you to set the list spacing for a particular type or level of list, or for any particular individual list:
\setlist[2]{noitemsep} % sets the itemsep and parsep for all level two lists to 0
\setenumerate{noitemsep} % sets no itemsep for enumerate lists only
\begin{enumerate}[noitemsep] % sets no itemsep for just this list
...
\end{enumerate}
The nosep
parameter removes all vertical spacing within and around the list; the noitemsep
parameter removes spacing from items but leaves space around the whole list.
You can also set any of the spacing parameters to exact values, either globally (using \setlist
) or locally, using the optional argument [...]
after the beginning of the environment:
\begin{itemize}[topsep=8pt,itemsep=4pt,partopsep=4pt, parsep=4pt]
\item Some text
\item Some text
\end{itemize}
To see how all of these parameters work, see the following question:
- \topsep, \itemsep, \partopsep and \parsep - what does each of them mean (and what about the bottom)?
The package also allows complete control over all other aspects of the list formatting too.
-
46This is probably the best package for the job. It accepts key value arguments so you could say
\begin{enumerate}[itemsep=1pt, topsep=12pt, partopsep=0pt]
etc, maybe you should expand a bit in your answer.– yannislCommented Feb 9, 2011 at 16:01 -
1@Yiannis The question did ask for a global change. But I've added some other examples along the lines of what you suggest. Thanks. Commented Feb 9, 2011 at 16:11
-
2Without using this package I can specify the type of item numbering as an optional parameter, e.g.
\begin{itemize}[(i)]
. How do I do this while usingenumitem
? Right now I get an error:missing endcsname
.– WillCommented May 23, 2012 at 4:00 -
3@Will The syntax you suggest is that of the
enumerate
package. You can emulate that package withenumitem
by loading it with the[shortlabels]
option (i.e.\usepackage[shortlabels]{enumitem}
) But the recommended way is to use thelabel
key:\begin{enumerate}[label={(\roman*)}]
. See theenumitem
documentation for more information. Commented May 23, 2012 at 4:06 -
1@CGFoX You can use
\setlist
in the preamble to set any parameters globally for all lists of a particular type or particular levels of all lists. Commented Sep 21, 2021 at 20:18
the least demanding way to do it (no further packages or whatsoever needed) is to define your own environment like this ...
\newenvironment{myitemize}
{ \begin{itemize}
\setlength{\itemsep}{0pt}
\setlength{\parskip}{0pt}
\setlength{\parsep}{0pt} }
{ \end{itemize} }
... and use it like this ...
\begin{myitemize}
\item one
\item two
\item three
\end{myitemize}
-
5This works nicely with the
moderncv
package. (unlike theenumitem
solution, where distances are changed even by just loading the package)– srsCommented May 18, 2016 at 15:30 -
-
3@leonheess you may have to add
\setlength{\baselineskip}{0pt}
to the list of modified lengths from @petermeissner. That worked for me. To my understanding, keeping it inside theitemize
environment makes sure this lenght is modified only locally, and not in the whole document. Commented Aug 16, 2022 at 4:48
You can use paralist
package and use any of its 'compact' lists (compactitem, compactenum, compactdesc).
\documentclass{article}
\usepackage{paralist}
\begin{document}
Regular itemize
\begin{itemize}
\item First
\item Second
\item Third
\end{itemize}
Compactitem
\begin{compactitem}
\item First
\item Second
\item Third
\end{compactitem}
\end{document}
-
1How do I do the same with
enumerate
? Is this also included inparalist
? EDIT: belive it might becompactenum
as mentioned by Herbert Commented Mar 18, 2018 at 11:54
Load package paralist
and set
\usepackage{paralist}
\let\itemize\compactitem
\let\enditemize\endcompactitem
\let\enumerate\compactenum
\let\endenumerate\endcompactenum
\let\description\compactdesc
\let\enddescription\endcompactdesc
\pltopsep=\medskipamount
\plitemsep=1pt
\plparsep=1pt
or load package enumitem
and \setlist{nosep}
-
For me enumitem didn't work. This little textblock saved my day!– DonMelesCommented Dec 12, 2023 at 22:10