整理一下 LaTeX 关于列表样式的自定义配置。

基本使用

无序列表 itemize,默认使用黑点

1
2
3
4
\begin{itemize}
\item First item
\item Second item
\end{itemize}

有序列表 enumerate,默认使用 1. 编号

1
2
3
4
\begin{enumerate}
\item First item
\item Second item
\end{enumerate}

\item 命令可以提供一个可选参数,用于将有序列表的编号或者无序列表的符号替换成自定义内容。

1
2
3
4
\begin{enumerate}
\item A nested item.\label{itref}
\item[*] A starred item.
\end{enumerate}

两种列表支持嵌套,也可以互相嵌套

1
2
3
4
5
6
7
8
\begin{enumerate}
\item First
\begin{itemize}
\item Subitem 1
\item Subitem 2
\end{itemize}
\item Second
\end{enumerate}

在各级列表中,对应的符号和编号样式也有所不同:

  • 无序列表:依次为黑色圆点,-*.
  • 有序列表:依次为 1.(a)i.A

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
\begin{multicols}{2}
\begin{itemize}
\item X1
\item X2
\begin{itemize}
\item X11
\item X12 \begin{itemize}
\item X121
\item X122 \begin{itemize}
\item X1221
\item X1222
\end{itemize}
\end{itemize}
\end{itemize}
\end{itemize}
\begin{enumerate}
\item X1
\item X2
\begin{enumerate}
\item X11
\item X12 \begin{enumerate}
\item X121
\item X122 \begin{enumerate}
\item X1221
\item X1222
\end{enumerate}
\end{enumerate}
\end{enumerate}
\end{enumerate}
\end{multicols}

补充:

  • 各级无序列表的符号由命令 \labelitemi\labelitemiv 定义,可以简单地重新定义它们;
  • 各级有序列表的符号由命令 \labelenumi\labelenumiv 定义,重新定义这些命令需要用到计数器。

除此之外,还有一个类似的关键字列表,此时 \item[] 的可选参数一般是必选的,并且会被加粗。

1
2
3
4
\begin{description}
\item[Enumerate] Numbered list.
\item[Itemize] Non-numbered list.
\end{description}

itemizeenumeratedescription 环境都是基于广义列表环境 list 实现的。

修改样式

LaTeX 本身并未提供方便的列表样式定制功能,通常使用 enumitem 宏包定制。

1
\usepackage{enumitem}

修改列表编号和符号

通过 label=... 可以修改列表编号和符号。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
\begin{enumerate}[label=\arabic*.] % 1.
\item Item 1
\item Item 2
\end{enumerate}

\begin{enumerate}[label=\alph*.] % a.
\item Item 1
\item Item 2
\end{enumerate}

\begin{enumerate}[label=\roman*.] % i.
\item Item 1
\item Item 2
\end{enumerate}

\begin{itemize}[label=\textbullet] % •
\item Item 1
\item Item 2
\end{itemize}

\begin{itemize}[label=--] % –
\item Item 1
\item Item 2
\end{itemize}

\begin{itemize}[label=\textasteriskcentered] % *
\item Item 1
\item Item 2
\end{itemize}

如果给 enumitem 宏包加上 shortlabels 选项,就可以更简单地实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
\begin{enumerate}[1.]
\item Item 1
\item Item 2
\end{enumerate}

\begin{enumerate}[(a)]
\item Item 1
\item Item 2
\end{enumerate}

\begin{enumerate}[i.]
\item Item 1
\item Item 2
\end{enumerate}

\begin{itemize}[-]
\item Item 1
\item Item 2
\end{itemize}

\begin{itemize}[*]
\item Item 1
\item Item 2
\end{itemize}

调整缩进与间距

主要考虑如下参数:

  • leftmargin 列表整体的左缩进
    • leftmargin=* 自动计算缩进,使列表与父环境左对齐,而不是固定缩进
  • topsep 列表与上下文段落的垂直间距
  • itemsep 每项之间的垂直间距

例如移除左缩进

1
2
3
4
5
\begin{enumerate}[leftmargin=*]
\item Item 1
\item Item 2
\item Item 3
\end{enumerate}

移除各项之间的垂直间距

1
2
3
4
5
\begin{enumerate}[itemsep=0pt]
\item Item 1
\item Item 2
\item Item 3
\end{enumerate}

对于嵌套列表,可以为每层嵌套单独调整 leftmargin,避免缩进过深或过浅。

1
2
3
4
5
6
7
8
\begin{enumerate}
\item First
\begin{itemize}[leftmargin=1.5em]
\item Subitem 1
\item Subitem 2
\end{itemize}
\item Second
\end{enumerate}

全局配置

可以使用 \setlist 命令对列表进行全局配置。

1
2
3
4
\usepackage{enumitem}

\setlist[itemize]{label=--, leftmargin=2em, itemsep=0.5em}
\setlist[enumerate]{label=\arabic*., leftmargin=2em, itemsep=0.3em}