LaTeX/列表结构
方便且可预测的列表格式是使用 LaTeX 的众多优势之一。WYSIWYG 文字处理器的用户有时会因为软件试图确定他们何时打算开始和结束列表而感到沮丧。作为一种标记语言,LaTeX 允许用户更好地控制列表的结构和内容。
列表通常出现在文档中,尤其是学术文档,因为它们的目的是以清晰简洁的方式呈现信息。LaTeX 中的列表结构只是环境,本质上分为三种类型
- itemize 用于项目符号列表
- enumerate 用于编号列表,以及
- description 用于描述性列表。
所有列表都遵循基本格式
\begin{list_type}
\item {The first item}
\item The second item
\item The third etc \ldots
\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}
|
LaTeX 允许您将列表环境插入现有列表中(最多四层,使用包可以获得更多层)。只需在当前列表中的所需位置开始相应的环境。Latex 会为您处理布局和任何编号。
\begin{enumerate}
\item The first item
\begin{enumerate}
\item Nested item 1
\item Nested item 2
\end{enumerate}
\item The second item
\item The third etc \ldots
\end{enumerate}
|
有时您会感觉需要更好地对齐不同的列表项目。如果您使用的是 KOMA-script 类(或包 scrextend
),labeling
环境非常方便。它接受一个强制参数,其中包含最长的标签。
\documentclass[twocolumn]{article}
\usepackage{blindtext}
\usepackage{scrextend}
\addtokomafont{labelinglabel}{\sffamily}
\begin{document}
\blindtext
\begin{labeling}{alligator}
\item [ant] really busy all the time
\item [chimp] likes bananas
\item [alligator] very dangerous animal, sharp teeth, long
muscular tail and a bit of text that is longer than one
line and shows the alignment of text quite nicely
\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 包允许您使用更方便的语法和无限嵌套层级来创建列表。它也非常可定制。
使用控制字符作为可选参数加载包
\usepackage[ampersand]{easylist}
|
easylist 环境默认使用编号。
\begin{easylist}
& Main item~:
&& Sub item.
&& Another sub item.
\end{easylist}
|
它具有预定义的样式,您可以将其设置为可选参数。
\begin{easylist}[itemize]
% ...
\end{easylist}
|
可用样式
- tractatus
- checklist - 所有项目旁边都有空的复选框
- booktoc - 大致是 book 类目录使用的格式
- articletoc - 大致是 article 类目录使用的格式
- enumerate - 默认值
- itemize
您可以使用 \ListProperties(...)
命令自定义列表,并使用 \NewList
恢复自定义。是的,\ListProperties
参数使用的是括号。
Style 参数设置计数器和文本的样式,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}
)。
自定义 enumerate 的示例
\begin{easylist}[enumerate]
\ListProperties(Style2*=,Numbers=a,Numbers1=R,FinalMark={)})
& Main item~:
&& Sub item.
&& Another sub item.
\end{easylist}
|
请注意,我们将 FinalMark 参数放在 {}
之间,以避免 LaTeX 将其理解为属性列表的结尾。现在我们更改默认属性以打印自定义项目符号列表
\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}
|
– Blah |
在 Style 参数中的空格很重要。 Style* 参数充当默认值,easylist 将为第 1 级、第 5 级及以后的级别使用中划线。
您还可以使用 LaTeX 宏定义自定义样式
\newcommand\myitemize{\ListProperties(Hide=100, Hang=true, Progressive=3ex, Style*=$\star$ )}
\newcommand\myenumerate{\ListProperties(Space=2\baselineskip)}
% ...
\begin{easylist} \myitemize
& Blah
\end{easylist}
|
重要说明:easylist 有一些缺点。 首先,如果您需要将 easylist 放置在使用与为 easylist 指定的相同控制字符的环境中,您可能会遇到错误。 为了避免这种情况,请使用 easylist 提供的以下命令
\Activate
\begin{easylist}
& ...
\end{easylist}
\Deactivate
|
除了使用 easylist 以及图形可能会给布局和缩进带来一些麻烦。 LaTeX 列表没有此问题。
要将 easylist 与 Beamer 一起使用,使用 easylist 的每个帧都必须标记为易碎的
\begin{frame}[fragile]
...
\begin{easylist}[itemize]
...
\end{easylist}
...
\end{frame}
|