嵌套列表

列表可以嵌套。您只需在 itemizeenumerate\item 主体内编写另一个列表环境即可。 LaTeX 为您计算嵌套深度(级别),并根据该深度自动切换每行开头的标签。您还可以混合类型 - 例如,项目符号列表内的编号列表。但有一个限制:itemizeenumerate 嵌套最多四层深度。本页介绍如何嵌套、每个级别的默认标签、如何混合类型以及需要四个以上级别时该怎么做。

如何嵌套

只需将列表环境放置在另一个列表的\item 的主体内即可创建嵌套列表。在外部 \item 之一之后写入新的 \begin{itemize}\end{itemize}(或 enumerate)。然后,内部列表“属于”该外部条目,LaTeX 会根据深度自动调整标签和缩进。不需要特殊的命令或选项。

document.tex
\begin{itemize}
  \item 果物
  \begin{itemize}
    \item りんご
    \item みかん
  \end{itemize}
  \item 野菜
\end{itemize}

这里“Fruit”和“Vegetables”位于第 1 层,“Apple”和“Orange”位于其下方,位于第 2 层。内部列表必须在外部 \end 之前关闭(环境必须干净地嵌套)。缩进只是为了您自己的可读性,不会影响输出 - 决定级别的只是 \begin/\end 嵌套结构。

按级别划分的默认标签

标签(每行开头的标记或数字)随级别自动变化。对于itemize,默认值是:级别1 为实心项目符号•,级别2 为粗体破折号-,级别3 为星号*,级别4 为居中点·。每个命令都存在于一个命令中 — \labelitemi\labelitemii\labelitemiii\labelitemiv(i / ii / iii / iv 是命名级别的罗马数字)。

对于enumerate,默认值为:级别 1“1.”、级别 2“(a)”、级别 3“i.”和级别 4“A.”。这些格式存在于\labelenumi\labelenumiv中,而数字本身由四个计数器保存,enumienumiv。下表收集了两组默认值。

级别逐项列出(标记)逐项命令枚举(数字)枚举命令
Level 1第一• 项目符号\labelitemi1。\labelenumi
Level 2第二– 破折号(粗体)\labelitemii(一)\labelenumii
Level 3第三名* 星号\labelitemiii我。\labelenumiii
Level 4四号· 居中点\labelitemivA.\labelenumiv

某些文档类设置了不同的默认值,但标准类(article 等)使用上面的值。每个 enumerate 计数器如何*打印*由 \theenumi\theenumiv 决定;默认情况下,它们分别是 \arabic{enumi}\alph{enumii}\roman{enumiii}\Alph{enumiv}(周围的“.”和括号由 \labelenum… 命令添加)。当项目通过 \label/\ref 被交叉引用时显示的 组合数字 是从父计数器构建的:例如,要让第 2 层引用显示为“2.1”,就以前一层的 \theenumi 为前缀重新定义它——\renewcommand{\theenumii}{\theenumi.\arabic{enumii}}

混合列表类型

嵌套列表不必是同一类型。您可以自由地将enumerate 放入itemize 中,将itemize 放入enumerate 中,依此类推。无论类型如何,都会计算级别(深度):标签是根据您距离外部的列表深度来选择的。因此,如果您将 enumerate 放置在 itemize(级别 1)的项目内,则 enumerate 位于 级别 2,因此会得到“(a) (b) …”。

关键点是itemizeenumerate 的“四级”限制是根据环境类型单独计算的。 itemize 只存在四组标签,enumerate 则只有四组标签,因此当嵌套链中出现第五个相同类型的列表时,标签就会用完。即使在混合堆栈中,达到任一单一类型的第五级也会触发下述错误。最重要的是,*任何*类型的列表共享六个嵌套级别的总体上限:LaTeX仅保留六组列表格式参数(缩进、项目分隔等),因此第七个嵌套列表(甚至混合类型)仍然会因相同的Too deeply nested错误而停止。

三级混合示例

这是一个混合类型的三级示例。最外面的列表是 enumerate(级别 1),给出编号的步骤;其中itemize(2级)将成分列为项目符号;其中,另一个enumerate(第3级)给出了准备过程的编号子步骤。

document.tex
\begin{enumerate}
  \item 生地を作る
  \begin{itemize}
    \item 小麦粉
    \item\begin{enumerate}
      \item 半分を加えて混ぜる
      \item 残りを少しずつ加える
    \end{enumerate}
  \end{itemize}
  \item 寝かせる
\end{enumerate}

在输出中,“制作面团”和“让它休息”位于 1 级enumerate,因此它们的编号为“1”。和“2”。在它们下面,“面粉”和“水”位于 2 级itemize,因此它们带有粗体破折号 –。最里面的 enumerate 嵌套在“Water”内,位于第 3 层,因此其条目默认为罗马数字“i”。和“ii”。即使类型混合,同样的规则始终适用:标签始终由列表距外部的深度决定。

超越四个级别,改变标签

itemizeenumerate 嵌套到五层或更多 会引发错误Too deeply nested。这是因为标准 LaTeX 每种类型仅提供四组标签,并且普通标准环境是上限。当您需要更深层次的嵌套,或者您想要一次性彻底更改每级标签时,标准补救措施是 enumitem 包。

加载enumitem,您可以使用\setlistdepth{<integer>} 提高最大嵌套深度,然后通过命名类型和级别来设置给定级别的标签和格式 - 例如\setlist[itemize,5]{...}。相反,如果您只想更改通常的四个级别中的一个级别的标签,则使用 \renewcommand 重新定义匹配命令本身就足够了。

latex
% 階層ごとに記号・番号を再定義(標準環境のまま)
\renewcommand{\labelitemii}{$\diamond$}      % itemize 第 2 階層 → 菱形
\renewcommand{\labelenumii}{\theenumii)}     % enumerate 第 2 階層 → a) b) ...

此示例将itemize 的二级标记更改为菱形(⋄),并将enumerate 的二级标签更改为“a)”、“b)”形式。当您希望在多个列表中保持一致的样式时,通过enumitem的选项(例如label=)命名它比这种手动重新定义更容易管理。请参阅下面的链接了解详细信息。