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}

此代码示例显示了 itemizeenumeratedescription 类型的列表。

嵌套列表

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 包的文档详细介绍了可以更改的内容和方法。你甚至可以定义自己的列表。像 labelingtasks 这样的环境可以进行不同的修改,详情可以在相应的包文档中找到。

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 参数决定数字的显示方式,可能的值有:rR(小写或大写罗马数字),lL(小写或大写字母),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}

Last modified: Sunday, 20 April 2025, 10:44 AM