easylist

easylist 是一个包(由 Paul Isambert 开发,在 LPPL 下的 CTAN 上分发),您可以在其中通过每行开头的*标记字符数*来表达深度嵌套的列表。嵌套标准itemizeenumerate 在四层停止,但easylist 没有深度限制。它的优势在于可以简洁地编写 5 层、6 层深度的列表,非常适合法律文档和结构精细的大纲。

标记数就是级别

普通的嵌套列表在每个级别更深地堆叠 \begin{itemize}\item\end{itemize}。 easylist采取了完全不同的策略。在 \begin{easylist}\end{easylist} 内,行开头的标记字符数 *是* 该项目的级别。一个标记表示第 1 级,两个表示第 2 级,三个表示第 3 级,依此类推 — 没有 \item,没有嵌套环境。

标记是单个 活动字符 — 它仅在 easylist 环境内具有特殊含义,并在外部恢复为普通自身。默认标记是节号 §,但由于键入起来很麻烦,\usepackage 选项可让您切换到更简单的字符(见下文)。在此页面上,我们使用 # 作为标记,如全文所假设的那样。要获取#,请将包加载为\usepackage[sharp]{easylist}

这是使用# 作为标记的最小示例。带有一个 # 的行是级别 1,## 是级别 2,### 是级别 3。 始终在标记运行之后放置一个空格 — 如果没有它,则不会打印任何数字。每个标记还会自动开始一个新行,因此在一行上一起运行项目会得到相同的结果。

document.tex
\documentclass{article}
\usepackage[sharp]{easylist}
\begin{document}
\begin{easylist}
# First proposition.
## Interesting comment.
### A note on the comment.
### Another note.
#### By the way...
# Let's start something new.
\end{easylist}
\end{document}

处理此项目时会自动按深度对项目进行编号,并使用句点分隔符:1 / 1.1 / 1.1.1 / 1.1.2 / 1.1.2.1 / 2。如果您跳过某个级别,则跳过的级别将计为 0(例如,紧随第 1 级项目之后的第 3 级项目将变为 1.0.1)。

选择标记 — 为什么 [at] 存在

您可以使用封装选项来选择标记。如果没有,则为§[pilcrow] 给出[sharp] 给出#[at] 给出@[ampersand] 给出&。无论您选择什么,用法都是相同的:所选字符仅在 \begin{easylist}\end{easylist} 之间有效。

选项标记
(none)§(部分符号,默认)默认
pilcrow (pilcrow)\usepackage[pilcrow]{easylist}
sharp#(数字符号)\usepackage[sharp]{easylist}
at@(符号处)\usepackage[at]{easylist}
ampersand&(与号)\usepackage[ampersand]{easylist}

值得一问的是为什么要提供[at] (@)。 # 是LaTeX 在宏定义(#1#2、...)中的参数字符,在tabular 和其他地方具有特殊含义。因此,选择 # 作为标记会导致 宏定义和表内部发生冲突。活跃角色一开始就很棘手,而且在盒子里行为不端。在这些情况下,最安全的做法是切换到不易发生冲突的标记,例如[at] (@) 或[ampersand] (&)。

如果必须将简单标记与环境内部使用的命令结合起来,请在 easylist 环境外部定义这些命令,或者在列表中使用 \Activate\Deactivate(将标记变为活动/非活动状态)。默认创建十级计数器;要深入了解,请使用 \usepackage[50]{easylist} 等数字选项来增加计数。

使用\ListProperties 进行样式设置

编号、标记、缩进和布局的其余部分由\ListProperties(...) 一起控制。您在括号内编写以逗号分隔的 key=value 对,\ListProperties 会影响所有后续项目和列表。许多键都有按级别编号的形式:Numbers 适用于每个级别,Numbers3 仅适用于级别 3(一般来说,key + 级别编号)。使用\NewList重置为默认值。

密钥它的作用
Numbers / Numbersn数字样式。 a=阿拉伯语(默认)、r/R=小写/大写罗马字符、l/L=小写/大写字母、z=Zapf Dingbats允许每级样式
Mark / FinalMark计数器之间的标点符号(默认句点)。 FinalMark 是最后一个计数器之后的标记例如\ListProperties(Mark=.,FinalMark=)
Style / Stylen数字和文本的字体。 * 仅针对数字,** 仅针对文本通过\bfseries\color{blue} 等。
Hide / Hiden隐藏前n个计数器;让您可以制作未编号的列表Hide=10000 隐藏每个级别
Start / Startn*计数器起始值; * 形式将其与外部计数器联系起来(例如\thesection\ListProperties(Start1*=\thesection)
Progressive / Progressive*左边距随深度增加; * 表单将级别 1 保持在当前边距\ListProperties(Progressive*=.5cm)
Space / Space*项目之间的垂直空间; *形式位于同一级别的项目之间负值会压缩列表

例如,\ListProperties(Numbers3=l, FinalMark=) 使级别 3 使用字母编号 a, b, c… 并删除尾随句点。要在值中使用原义逗号或右括号,请将其括在大括号中,如 \ListProperties(FinalMark={)}) 中。其他键允许微调:Hang(让文本悬挂在数字上),Align(在同一级别排列项目),Margin/Indent(左边距和段落缩进),FinalSpace(数字和文本之间的间隙,默认.3em)和CtrCom(将整个数字包装在\fbox等命令中)。

一个深度嵌套的例子

无深度限制,可以直接编写合同条款等五级更深的结构。下面的示例将 1 级设为粗体,将 2 级设为罗马数字,将 3 级设为小写字母,并按深度逐渐缩进。请注意,添加单个标记字符会使您更深一层。

document.tex
\documentclass{article}
\usepackage[sharp]{easylist}
\begin{document}
\ListProperties(Style1*=\bfseries, Numbers2=R, Numbers3=l,
  Progressive=1.5em, Space*=2pt)
\begin{easylist}
# Agreement.
## Definitions.
### Party means a signatory hereto.
### Effective Date means the date of last signature.
## Term and termination.
### This Agreement begins on the Effective Date.
#### Either party may terminate on 30 days notice.
##### Notice must be given in writing.
# Miscellaneous.
\end{easylist}
\end{document}

在此示例中,第 1 级数字为 12(粗体、阿拉伯语),第 2 级为大写罗马字母,第 3 级为小写字母,组成为 1.I.a1.II.a。 4 级和 5 级进一步缩进,只需写#### ##### 即可出现。使用嵌套的 enumerate 编写相同的结构会在四个级别上堵塞,并且需要额外的设置(例如使用 enumitem)才能更深入 - 使用 easylist 您只需添加一个标记。

什么时候去拿它

easylist 是小众的,但当您达到标准列表的四级限制时,这是一个受欢迎的替代方案。当您想要列出既编号又深入的项目(法律文件、术语、规范和多层次的大纲)时,它就会发挥作用。对于普通的浅列表、样式丰富的级别或内联列表,itemize/enumerateenumitem 更为自然。因为 # 标记可能与宏和表冲突,所以它在独立的散文级列表中是最安全的。