UK TeX FAQ -- question 170

### How to reduce list spacing

Lamport's book lists various parameters for the layout of list (things like `\topsep`, `\itemsep` and `\parsep`), but fails to mention that they're set automatically within the list itself. It works by each list executes a command `\@list``<depth>` (the depth appearing as a lower-case roman numeral); what's more, `\@listi` is usually reset when the font size is changed. As a result, it's rather tricky for the user to control list spacing; of course, the real answer is to use a document class designed with more modest list spacing, but we all know such things are hard to come by.

There are packages that provide some control of list spacing, but they seldom address the separation from surrounding text (defined by `\topsep`). The expdlist package, among its many controls of the appearance of `description` lists, offers a compaction parameter (see the documentation); the mdwlist package offers a `\makecompactlist` command for users' own list definitions, and uses it to define compact lists `itemize*`, `enumerate*` and `description*`. In fact, you can write lists such as these commands define pretty straightforwardly - for example:

    \newenvironment{itemize*}%
      {\begin{itemize}%
        \setlength{\itemsep}{0pt}%
        \setlength{\parsep}{0pt}}%
      {\end{itemize}}

However, both packages offer other facilities for list configuration: you should certainly not try the "do-it-yourself" approach if you need a package for some other list configuration purpose.

If you want to adjust `\topsep`, the most sensible approach (at present) is to define your list 'from first principles' using the `\list` command; its invocation is `\list{<item stuff>}{<list stuff>}`; the `<list stuff>` is executed after the `\@list``<depth>`, and can therefore be used to adjust all the parameters, including `\topsep`.

An alternative is to redefine `\@list``<depth>` (and the size-changing commands that alter `\@listi`), but this is not recommended unless you're building your own class or package, in which case one hopes you're capable of analysing the way in which the standard classes do things (as recommended in writing your own package).

`expdlist.sty`
  macros/latex/contrib/supported/expdlist.tar.gz
`mdwlist.sty`
  Distributed as part of macros/latex/contrib/supported/mdwtools.tar.gz