Is there a picture showing all the lengths used in lists?

You need layouts package.

\documentclass{article}
\usepackage{layouts}

\begin{document}
\drawlist

\begin{enumerate}
\item foo
\currentlist
\begin{figure}
\listdesign
\end{figure}
\end{enumerate}
\end{document}

enter image description here

enter image description here


I made one with TikZ for my LaTeX cheat sheet (in french), but only for {itemize} (so it does not show \labelwidth). It uses real text instead of boxes to show things:

diagram showing the lengths of an itemize

Here's the (not elegant at all) source code of the diagram:

\documentclass[a4paper]{article}

\usepackage[garamond]{mathdesign}

\usepackage{calc}
\usepackage{colortbl}

\usepackage{tikz}
\usetikzlibrary{positioning,calc}

\begin{document}

\begin{center}\tabcolsep=0.5em
\begin{tabular}{ll}\cellcolor{orange!7}
\begin{minipage}[b]{8.1cm}
\newcommand{\chosenlistbullet}{\textbullet}
\newcommand{\showlistlength}[1]{\texttt{\scriptsize#1}}
\newcommand{\showlistlengthprecision}[1]{\textnormal{\scriptsize(#1)}}
\begin{tikzpicture}[inner sep=0pt]

\node (text before) {\begin{minipage}[t]{\linewidth}
Bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla bla bla bla bla.
\end{minipage}};

\node (first item par1) [below=10mm of text before] {\hspace*{1.5cm}\begin{minipage}[t]{\linewidth-3cm}\leavevmode
\llap{\chosenlistbullet\hspace{0.33cm}}%
\hspace*{0.33cm}\llap{\smash{\tikz[baseline] \draw[<->,color=violet] (0,0) -- (0.66cm,0) node[pos=0.5,below left,inner sep=3pt] {\showlistlength{labelsep}};}}\llap{\smash{\tikz[baseline=-1ex] \draw[<->,color=green!40!black] (0,0) -- (0.33cm,0) node[above left,inner sep=3pt] {\showlistlength{itemindent}};}}Bla bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla bla.
\end{minipage}\hspace*{1.5cm}};

\node (first item par2) [below=5mm of first item par1] {\hspace*{1.5cm}\begin{minipage}[t]{\linewidth-3cm}\leavevmode
\hspace{0.5cm}\llap{\smash{\tikz[baseline] \draw[<->,color=green!40!black] (0,0) -- (0.5cm,0) node[above left,inner sep=3pt] {\showlistlength{listparindent}};}}Bla bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla. 
\end{minipage}\hspace*{1.5cm}};

\node (second item) [below=5mm of first item par2] {\hspace*{1.5cm}\begin{minipage}[t]{\linewidth-3cm}\leavevmode
\llap{\chosenlistbullet\hspace{0.33cm}}%
\hspace*{0.33cm}\llap{\smash{\tikz[baseline] \draw[<->,color=violet] (0,0) -- (0.66cm,0) node[pos=0.5,below left,inner sep=3pt] {\showlistlength{labelsep}};}}\llap{\smash{\tikz[baseline=-1ex] \draw[<->,color=green!40!black] (0,0) -- (0.33cm,0) node[above left,inner sep=3pt] {\showlistlength{itemindent}};}}Bla bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla bla.
\end{minipage}\hspace*{1.5cm}};

\node (text after) [below=10mm of second item] {\begin{minipage}[t]{\linewidth}
Bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla bla bla bla bla bla bla bla.
\end{minipage}};

\draw[<->,color=blue] (text before.south) -- ($ (text before.south)!.5!(first item par1.north) $) node[pos=0.5,right,inner sep=3pt] {\showlistlength{partopsep} \showlistlengthprecision{if blank line before the list}};

\draw[<->,color=blue] ($ (text before.south)!.5!(first item par1.north) $) -- (first item par1.north) node[pos=0.5,right,inner sep=3pt] {\showlistlength{topsep\,+\,parskip}};

\draw[<->,color=blue] (first item par1.south) -- (first item par2.north) node[pos=0.5,right,inner sep=3pt] {\showlistlength{parsep}};

\draw[<->,color=blue] (first item par2.south) -- (second item.north) node[pos=0.5,right,inner sep=3pt] {\showlistlength{itemsep\,+\,parsep}};

\draw[<->,color=blue] (second item.south) -- ($ (second item.south)!.5!(text after.north) $) node[pos=0.5,right,inner sep=3pt] {\showlistlength{topsep\,+\,parskip}};

\draw[<->,color=blue] ($ (second item.south)!.5!(text after.north) $) -- (text after.north) node[pos=0.5,right,inner sep=3pt] {\showlistlength{partopsep} \showlistlengthprecision{if blank line before the list}};

\draw[<->,color=violet] (first item par2.west) -- ($ (first item par2.west) + (1.5cm,0cm) $) node[pos=0.5,below,inner sep=3pt] {\showlistlength{leftmargin}};

\draw[<->,color=violet] (first item par2.east) -- ($ (first item par2.east) + (-1.5cm,0cm) $) node[pos=0.5,below,inner sep=3pt] {\showlistlength{rightmargin}};

\end{tikzpicture}
\end{minipage}
&
\newcommand{\showlistlength}[2][blue]{\textcolor{#1}{\texttt{#2}}:}
\begin{tikzpicture}
\node {\begin{minipage}{6cm}\parskip=2pt
\showlistlength{topsep} space before and after \par
\showlistlength{partopsep} additional space before and after if the list is preceded by a blank line \par
\showlistlength{itemsep} space between items \par
\showlistlength{parsep} space between paragraphs of an item \par
\showlistlength[violet]{leftmargin} left margin \par
\showlistlength[violet]{rightmargin} right margin \par
\showlistlength[violet]{labelsep} space between label and text \par
\showlistlength[green!40!black]{itemindent} indentation of the first paragraphs of an item \par
\showlistlength[green!40!black]{listparindent} indentation of the other paragraphs of an item\par
\end{minipage}};
\end{tikzpicture}
\\
\end{tabular}\end{center}

\end{document}

The picture in Guide to TeX section 4.4.2, using TikZ:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{chains}
\usepackage{makecell}

\begin{document}
  \begin{tikzpicture}[start chain=going below,node distance=8mm,
  main/.style={minimum width=10cm},
  para/.style={minimum width=5cm,minimum height=1.5cm}]
  \scope[very thick]
  \node[on chain,main,anchor=south west] (prec) {Text};
  \draw (prec.north west) -- (prec.south west) -| (prec.north east);

  \node[on chain,para] (item1-1) {\hspace{4em}\makecell[l]{Item 1\\Para 1}};
  \coordinate (p1-1) at (item1-1.150 |- item1-1.175);
  \draw (p1-1) |- (item1-1.north east) |- (item1-1.south west)
               -- (p1-1 -| item1-1.south west) -- cycle;

  \node[on chain,para] (item1-2) {\hspace{4em}\makecell[l]{Item 1\\Para 2}};
  \coordinate (p1-2) at (item1-2.130 |- item1-2.175);
  \draw (p1-2) |- (item1-2.north east) |- (item1-2.south west)
               -- (p1-2 -| item1-2.south west) -- cycle;

  \node[on chain,para] (item2) {\hspace{4em}Item 2};
  \coordinate (p2) at (item2.150 |- item2.175);
  \draw (p2) |- (item2.north east) |- (item2.south west)
             -- (p2 -| item2.south west) -- cycle;

  \node[on chain,main] (follow) {Text};
  \draw (follow.south west) -- (follow.north west) -| (follow.south east);

  \node[left=0.5cm of item1-1.north west,anchor=north east,draw]
    (label1) {Label};
  \node[left=0.5cm of item2.north west,anchor=north east,draw]
    {Label};
  \endscope

  \scope[>=latex,<->,shorten <=1pt,shorten >=1pt,font={\ttfamily\small},auto,
    every node/.style={midway}]
  \draw (prec) -- (item1-1)
    node{\string\topsep\ + \string\parskip\ [+ \string\partopsep]};
  \draw (item1-1) -- (item1-2)
    node{\string\parsep};
  \draw (item1-2) -- (item2)
    node{\string\itemsep\ + \string\parsep};
  \draw (item2) -- (follow)
    node{\string\topsep\ + \string\parskip\ [+ \string\partopsep]};
  \draw[<->|] (item1-1) -- (item1-1 -| prec.south west)
    node {\string\leftmargin};
  \draw[<->|,swap] (item1-1) -- (item1-1 -| prec.south east)
    node {\string\rightmargin};
  \draw (label1) -- (label1 -| p1-1)
    node{\string\labelsep};
  \draw[|<->|,transform canvas={yshift=2mm}]
    (label1.north west) -- (label1.north east)
    node{\string\labelwidth};
  \draw[|<->,transform canvas={yshift=-2mm}]
    (p1-1) -- (p1-1 -| item1-1.north west)
    node[near end,anchor=north west]{\string\itemindent};
  \draw[<->|,transform canvas={yshift=5mm},swap]
    (p1-2) -- (p1-2 -| item1-2.north west)
    node{\string\listparindent};
  \endscope
  \end{tikzpicture}

\end{document}

It looks better than the one produced by layouts. I used this in a book (in Chinese) of mine.

enter image description here

Tags:

Lists

Lengths