リストは 入れ子(ネスト) にできます。itemize や enumerate の \item の本文の中に、もう一つリスト環境を書くだけ。LaTeX はネストの深さ(階層)を自分で数え、階層に応じて行頭のラベルを自動で切り替えます。種類を混ぜることもでき、たとえば箇条書きの中に番号付きリストを入れられます。ただし itemize・enumerate とも 入れ子は 4 階層まで。このページでは、入れ子の作り方、階層ごとの既定ラベル、種類を混ぜる方法、そして 4 階層を超えたいときの考え方を扱います。
入れ子の作り方
入れ子は、リスト環境を別のリストの \item の 本文の中 に置くだけで作れます。新しい \begin{itemize} … \end{itemize}(や enumerate)を、外側のある \item の後ろに書きます。内側のリストは外側の項目に「属する」形になり、LaTeX は深さに応じてラベルとインデントを自動で調整します。特別な命令やオプションは要りません。
\begin{itemize}
\item 果物
\begin{itemize}
\item りんご
\item みかん
\end{itemize}
\item 野菜
\end{itemize}ここでは「果物」「野菜」が第 1 階層、その下の「りんご」「みかん」が第 2 階層になります。内側のリストは外側の \end より前で必ず閉じます(環境はきちんと入れ子にする)。インデントは読みやすさのためで、出力には影響しません — 階層を決めるのは \begin/\end の入れ子構造だけです。
階層ごとの既定ラベル
ラベル(行頭記号や番号)は階層ごとに自動で変わります。itemize の既定は、第 1 階層が黒丸 •、第 2 階層が太字の en ダッシュ –、第 3 階層がアスタリスク *、第 4 階層が中点 ·。これらはそれぞれ \labelitemi・\labelitemii・\labelitemiii・\labelitemiv という命令に定義されています(語尾の i・ii・iii・iv がローマ数字で階層を表します)。
enumerate の既定は、第 1 階層が「1.」、第 2 階層が「(a)」、第 3 階層が「i.」、第 4 階層が「A.」。こちらの体裁は \labelenumi〜\labelenumiv に定義され、番号そのものは enumi〜enumiv という 4 つのカウンタが保持します。次の表に両者の既定をまとめます。
| 階層 | itemize(記号) | itemize の命令 | enumerate(番号) | enumerate の命令 | |
|---|---|---|---|---|---|
Level 1 | 第 1 | • 黒丸 | \labelitemi | 1. | \labelenumi |
Level 2 | 第 2 | – en ダッシュ(太字) | \labelitemii | (a) | \labelenumii |
Level 3 | 第 3 | * アスタリスク | \labelitemiii | i. | \labelenumiii |
Level 4 | 第 4 | · 中点 | \labelitemiv | A. | \labelenumiv |
ドキュメントクラスによって既定が異なることもありますが、標準クラス(article など)では上の通りです。enumerate のカウンタの「印字のされ方」は \theenumi〜\theenumiv が決めており、既定では順に \arabic{enumi}・\alph{enumii}・\roman{enumiii}・\Alph{enumiv} です(番号の前後の「.」や括弧は \labelenum… 側が付けます)。なお、項目を \label/\ref で相互参照したときに表示される「組み合わせ番号」は親のカウンタから組み立てられます。たとえば第 2 階層の参照を「2.1」のように出したいなら、\renewcommand{\theenumii}{\theenumi.\arabic{enumii}} のように親の \theenumi を前置して定義し直します。
種類を混ぜる
入れ子にするリストは、同じ種類どうしである必要はありません。itemize の中に enumerate を、enumerate の中に itemize を、自由に組み合わせられます。階層(深さ)の数え方は種類に関係なく、外側から数えて何番目かでラベルが決まります。たとえば itemize(第 1 階層)の項目の中に enumerate を置けば、その enumerate は 第 2 階層 なので「(a)(b)…」が付きます。
重要なのは、itemize と enumerate の「4 階層まで」という制限は 環境の種類ごとに別々に 数えられることです。ラベルは itemize 用・enumerate 用ともに 4 段階分しか用意されていないため、入れ子の連なりの中で同じ種類が 5 つ目に登場するとラベルが尽きてしまいます。混在させていても、片方の種類だけが 5 階層に達すれば後述のエラーになります。
3 階層の例(混在)
種類を混ぜた 3 階層の例を見ます。いちばん外側を enumerate(第 1 階層)にして手順を番号で示し、その中に itemize(第 2 階層)で材料を箇条書きにし、さらにその中に enumerate(第 3 階層)で下準備の手順を番号付きで並べます。
\begin{enumerate}
\item 生地を作る
\begin{itemize}
\item 小麦粉
\item 水
\begin{enumerate}
\item 半分を加えて混ぜる
\item 残りを少しずつ加える
\end{enumerate}
\end{itemize}
\item 寝かせる
\end{enumerate}出力では、「生地を作る」「寝かせる」が第 1 階層の enumerate なので「1.」「2.」と番号が付きます。その下の「小麦粉」「水」は第 2 階層の itemize なので太字の en ダッシュ – で並びます。さらに「水」の中に置いた最も内側の enumerate は第 3 階層なので、既定では「i.」「ii.」というローマ数字が付きます。種類を混ぜても、ラベルは常に そのリストが外側から数えて何階層目か で決まる、という規則がそのまま働いています。
4 階層を超えたいとき・ラベルを変えたいとき
itemize・enumerate を 5 階層以上 に入れ子にすると、Too deeply nested というエラーになります。標準の LaTeX には各種類につき 4 段階分のラベルしか用意されていないためで、素の標準環境ではこれが上限です。深い階層が必要なときや、階層ごとのラベルをまとめてきれいに変えたいときは、enumitem パッケージを使うのが定石です。
enumitem を読み込むと、\setlistdepth{<整数>} で最大の入れ子深さを引き上げられ、\setlist[itemize,5]{...} のように 種類と階層を指定して その階層のラベルや体裁を設定できます。一方、4 階層の範囲内で個々の階層のラベルだけを変えたいなら、対応する命令を \renewcommand で再定義するだけでも済みます。
% 階層ごとに記号・番号を再定義(標準環境のまま)
\renewcommand{\labelitemii}{$\diamond$} % itemize 第 2 階層 → 菱形
\renewcommand{\labelenumii}{\theenumii)} % enumerate 第 2 階層 → a) b) ...この例では、itemize の第 2 階層の記号を菱形(⋄)に、enumerate の第 2 階層のラベルを「a)」「b)」という形に変えています。多くのリストで体裁を一貫させたい場合は、こうした手作業よりも enumitem のオプション(label= など)で指定する方が見通しよく管理できます。詳しくは下のリンクを参照してください。