LaTeX
LaTeX 列表格式
方便且可预测的列表格式化是使用 LaTeX 的众多优势之一。使用 WYSIWYG 文本处理器的用户,有时会对软件尝试判断何时开始和结束列表感到沮丧。作为一种标记语言,LaTeX 赋予用户更多对列表结构和内容的控制。
列表结构
列表在文档中经常出现,尤其是在学术文档中,因为它们通常用于以清晰简洁的方式呈现信息。LaTeX 中的列表结构实际上是三种类型的环境:
-
itemize
用于无序列表(符号列表) -
enumerate
用于有序列表(编号列表) -
description
用于描述列表
所有列表遵循基本的格式:
\begin{list_type}
\item {第一个条目}
\item 第二个条目
\item 第三个条目,依此类推
\end{list_type}
这三种类型的列表可以每个条目包含多个段落:只需按照常规方式输入额外的段落,每个段落之间留一个空行。只要它们仍然包含在包围的环境内,它们将自动缩进并排列在条目下方。长条目的内容可以放在大括号中以便于阅读。
示例
以下代码演示了三种常见的列表:
\documentclass{article}
\usepackage{blindtext}
\begin{document}
\begin{itemize}
\item \blindtext
\item \blindtext
\end{itemize}
\begin{enumerate}
\item \blindtext
\item \blindtext
\end{enumerate}
\begin{description}
\item [Ant] \blindtext
\item [Elephant] \blindtext
\end{description}
\end{document}
此代码示例显示了 itemize
、enumerate
和 description
类型的列表。
嵌套列表
LaTeX 会很高兴地允许你在现有列表中插入列表环境(最多到深度四级,更深的级别可以通过包来实现)。只需在当前列表中适当的位置开始相应的环境,LaTeX 会为你自动整理布局和编号。
\begin{enumerate}
\item 第一个条目
\begin{enumerate}
\item 嵌套条目 1
\item 嵌套条目 2
\end{enumerate}
\item 第二个条目
\item 第三个条目,依此类推
\end{enumerate}
特殊列表
有时你可能需要更好地对齐不同的列表项。如果你使用的是 KOMA-script 类(或 scrextend
包),labeling
环境非常方便。它需要一个强制性的参数,包含你标签中最长的部分。
\documentclass[twocolumn]{article}
\usepackage{blindtext}
\usepackage{scrextend}
\addtokomafont{labelinglabel}{\sffamily}
\begin{document}
\blindtext
\begin{labeling}{alligator}
\item [ant] 总是很忙
\item [chimp] 喜欢香蕉
\item [alligator] 非常危险的动物,尖锐的牙齿,长而有力的尾巴,文字比一行还长,显示了文本的对齐
\end{labeling}
\end{document}
内联列表
如果你受到空间限制且只有简短的条目描述,你可能希望将列表设置为内联格式。请注意,下面的示例还展示了如何更改字体。
\documentclass[twocolumn]{article}
\usepackage{blindtext}
\usepackage[inline]{enumitem}
\usepackage{xcolor}
\begin{document}
\blindtext Coco likes fruit. Her favorites are:
\begin{enumerate*}[label={\alph*)},font={\color{red!50!black}\bfseries}]
\item bananas
\item apples
\item oranges and
\item lemons.
\end{enumerate*}
\blindtext
\end{document}
水平列表
如果你需要一个水平列表,tasks
包可能会很有帮助。与像 exsheets
这样的包结合使用时,你可以为学生准备考试试卷。
\documentclass[12pt]{article}
\usepackage{tasks}
\usepackage{exsheets}
\SetupExSheets[question]{type=exam}
\begin{document}
\begin{question}
Which one of the entries does not fit with the others?
\begin{tasks}(4)
\task mercury
\task iron
\task lead
\task zinc
\end{tasks}
\end{question}
\settasks{
label=(\roman*),
label-width=4ex
}
\begin{question}
What is a funkyton?
\begin{tasks}(2)
\task A dancing electron
\task A dancing proton
\task A dancing neutron
\task A Dixie Dancing Duck
\end{tasks}
\end{question}
\end{document}
这些命令使得列表的格式化和组织更加灵活,适合不同的需求和场景。
自定义列表
当处理每个条目只有少数几个单词的列表时,标准的列表可能会占用太多空间。enumitem
包为你提供了一个简单的接口来定制列表的外观。
你可以在前导部分全局更改列表的外观,或者只为单个列表使用环境的可选参数。下面的示例展示了右侧的列表使用了 noitemsep
,使其更加紧凑。
\documentclass[twocolumn]{article}
\usepackage{blindtext}
\usepackage{enumitem}
\begin{document}
\blindtext
\begin{itemize}
\item more work
\item more responsibility
\item more satisfaction
\end{itemize}
\blindtext
\newpage
\blindtext
\begin{itemize}[noitemsep]
\item more work
\item more responsibility
\item more satisfaction
\end{itemize}
\blindtext
\end{document}
对齐和标签宽度的示例
\documentclass[twocolumn]{article}
\usepackage{blindtext}
\usepackage{enumitem}
\begin{document}
\blindtext Coco likes fruit. Her favourites are:
\begin{description}[align=left]
\item [Kate] some detail
\item [Christina]some detail
\item [Laura]some detail
\end{description}
\begin{description}[align=right]
\item [Kate] some detail
\item [Christina]some detail
\item [Laura]some detail
\end{description}
\begin{description}[align=right,labelwidth=3cm]
\item [Kate] some detail
\item [Christina]some detail
\item [Laura]some detail
\end{description}
\blindtext
\end{document}
enumitem
包的文档详细介绍了可以更改的内容和方法。你甚至可以定义自己的列表。像 labeling
和 tasks
这样的环境可以进行不同的修改,详情可以在相应的包文档中找到。
Easylist 包
easylist
包允许你使用更便捷的语法创建列表,并支持无限级嵌套。它也非常可定制。
加载包时可以将控制字符作为可选参数:
\usepackage[ampersand]{easylist}
easylist
环境默认使用枚举列表。
\begin{easylist}
& Main item~:
&& Sub item.
&& Another sub item.
\end{easylist}
它提供了预定义的样式,你可以将其作为可选参数设置。
\begin{easylist}[itemize]
% ...
\end{easylist}
可用的样式包括:
-
tractatus
-
checklist - 所有条目旁边都有空的复选框
-
booktoc - 大致用于书类目录的格式
-
articletoc - 大致用于文章类目录的格式
-
enumerate - 默认样式
-
itemize
你可以通过 \ListProperties(...)
命令定制列表,并通过 \NewList
命令恢复默认设置。参数中的圆括号表示 \ListProperties
的参数。
样式参数用于设置计数器和文本的样式,Style*
用于设置计数器的样式,Style**
用于设置文本的样式。Numbers
参数决定数字的显示方式,可能的值有:r
或 R
(小写或大写罗马数字),l
或 L
(小写或大写字母),a
(阿拉伯数字,默认),z
(Zapf Dingbats)。
FinalMark
参数设置最后一个计数器的标点符号(例如:FinalMark3={)}
),而 FinalSpace
设置条目与文本之间的空格量。Margin
参数设置左边距的距离(例如:FinalSpace2=1cm
)。Progressive
参数按级别设置所有条目的左边距。
Hide = n
参数阻止所有级别中前 n 个计数器的显示。如果参数后面有一个数字(例如:Style3*
),那么这个数字表示它将影响的级别(例如:Style3=\color{red}
)。
自定义枚举样式示例:
\begin{easylist}[enumerate]
\ListProperties(Style2*=,Numbers=a,Numbers1=R,FinalMark={)})
& Main item~:
&& Sub item.
&& Another sub item.
\end{easylist}
自定义项目符号样式:
\usepackage{amssymb}
\ListProperties(Hide=100, Hang=true, Progressive=3ex, Style*=-- ,
Style2*=$\bullet$ ,Style3*=$\circ$ ,Style4*=\tiny$\blacksquare$ )
% ...
\begin{easylist}
& Blah
& Blah
&& Blah
&&& Blah
&&&& Blah
&&&&& Blah
\end{easylist}
注意事项:
-
easylist
具有一些缺点。首先,如果你需要在使用与easylist
相同控制字符的环境中使用easylist
,可能会出现错误。为避免此问题,可以使用\Activate
和\Deactivate
命令。 -
将
easylist
与图形一起使用可能会导致布局和缩进问题,LaTeX 列表没有这个问题。 -
在 Beamer 中使用
easylist
时,每个使用easylist
的帧必须标记为fragile
:
\begin{frame}[fragile]
...
\begin{easylist}[itemize]
...
\end{easylist}
...
\end{frame}