在LaTeX
中有三种基本的列表环境,即enumerate
、itemize
和description
环境,这其中最常用的自然是enumerate
环境,本文则针对enumerate
环境的使用来实现一些常见的需求。
实现中文的编号
编号是需要计数器的,在标准的计数器中,只有\roman
、\Roman
、\arabic
、\alph
、\Alph
以及\fnsymbol
,其输出格式分别为i,ii
、I,II
、1,2
、a,b
、A,B
、花体符号
,现在如果需要输出一、二
这种类型的编号,可以使用enumitem
包提供的\AddEnumerateCounter
命令,同时利用ctex
包提供的\chinese
命令即可,一个minimal working example
如下:1
2
3
4
5
6
7
8
9
10
11
12
13\documentclass{ctexart}
\usepackage[showframe]{geometry}
\usepackage{enumitem}
\AddEnumerateCounter{\chinese}{\chinese}{}
\begin{document}
\begin{enumerate}[label = \chinese*、]
\item 第一行
\item 第二行
\end{enumerate}
\end{document}
段落格式的列表
在默认的情况下,列表的每一个条目是悬挂缩进的,但有时候希望条目从第二行开始无缩进,也就是整体格式类似于一个段落,此时enumitem
包添加inline
选项以后,会有三个带星号的环境enumerate*
、itemize*
和description*
,譬如1
2
3
4
5
6
7
8
9
10
11\documentclass{ctexart}
\usepackage[inline]{enumitem}
\usepackage{xcolor}
\begin{document}
\begin{enumerate*}[label =\color{red} (\arabic*)]
\item 这是很长这是很长这是很长这是很长这是很长这是很长这是很长这是很长这是很长
\item 这是很长这是很长这是很长这是很长这是很长这是很长这是很长这是很长这是很长
\end{enumerate*}
\end{document}
编译出来的结果如下:
可以发现第二个label
也跑到段落中去了,为此可以使用itemjion
参数,看这个参数的单词就能猜出是连接两个item
的代码,代码改为1
2
3
4
5
6
7
8
9
10
11\documentclass{ctexart}
\usepackage[inline]{enumitem}
\usepackage{xcolor}
\begin{document}
\begin{enumerate*}[label =\color{red} (\arabic*),itemjoin=\\]
\item 这是很长这是很长这是很长这是很长这是很长这是很长这是很长这是很长这是很长
\item 这是很长这是很长这是很长这是很长这是很长这是很长这是很长这是很长这是很长
\end{enumerate*}
\end{document}
编译出来为
如果希望第二个label
跟第一个label
一样的缩进,可以设置itemjoin=\\\hspace*{\parindent}
.
不过enumerate*
由于是inline
环境,所以不能这个环境里面加入行间公式,下面的代码就会报错1
2
3
4
5
6
7
8
9
10
11\documentclass{ctexart}
\usepackage[inline]{enumitem}
\begin{document}
\begin{enumerate*}[label = (\arabic*)]
\item 不支持行间公式
\[ a + b + c \]
\item 怎么办
\end{enumerate*}
\end{document}
可以用下面这种很笨的方法,需要使用行间公式的时候离开列表环境,然后再次使用列表环境,同时为了编号保持一致,还需要使用resume
参数或者重新设置计数器的值.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15\documentclass{ctexart}
\usepackage[inline]{enumitem}
\begin{document}
\begin{enumerate*}[label = (\arabic*)]
\item 不支持行间公式
\end{enumerate*}
\[ a + b + c \]
\begin{enumerate*}[label = (\arabic*),resume]
\item 怎么办
\end{enumerate*}
\end{document}
不过比起这种方法,更好的不如使用paralist
包相应的inline
环境,asparaenum
和inparaenum
环境,这两个环境的输出格式稍有不同,它们是直接支持行间公式的,并且还有一个可选的设置label
的参数,下面的示例代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20\documentclass{ctexart}
\usepackage{paralist}
\usepackage{hyperref}
\begin{document}
\begin{asparaenum}[{item} a]\renewcommand\theenumi{(\alph{enumi})}
\item\label{item1} 行间公式
\[ a + b = c \]
\item 行间公式
\end{asparaenum}
\ref{item1} 引用label
\begin{inparaenum}[\quad(a)]
\item 行间公式
\[ a = b \]
\item 行间公式
\end{inparaenum}
\end{document}
而且paralist
包与enumitem
包是不冲突的,可以同时使用.