ネストしたリスト

リストは 入れ子(ネスト) にできます。itemizeenumerate\item の本文の中に、もう一つリスト環境を書くだけ。LaTeX はネストの深さ(階層)を自分で数え、階層に応じて行頭のラベルを自動で切り替えます。種類を混ぜることもでき、たとえば箇条書きの中に番号付きリストを入れられます。ただし itemizeenumerate とも 入れ子は 4 階層まで。このページでは、入れ子の作り方、階層ごとの既定ラベル、種類を混ぜる方法、そして 4 階層を超えたいときの考え方を扱います。

入れ子の作り方

入れ子は、リスト環境を別のリストの \item本文の中 に置くだけで作れます。新しい \begin{itemize}\end{itemize}(や enumerate)を、外側のある \item の後ろに書きます。内側のリストは外側の項目に「属する」形になり、LaTeX は深さに応じてラベルとインデントを自動で調整します。特別な命令やオプションは要りません。

document.tex
\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 に定義され、番号そのものは enumienumiv という 4 つのカウンタが保持します。次の表に両者の既定をまとめます。

階層itemize(記号)itemize の命令enumerate(番号)enumerate の命令
Level 1第 1• 黒丸\labelitemi1.\labelenumi
Level 2第 2– en ダッシュ(太字)\labelitemii(a)\labelenumii
Level 3第 3* アスタリスク\labelitemiiii.\labelenumiii
Level 4第 4· 中点\labelitemivA.\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)…」が付きます。

重要なのは、itemizeenumerate の「4 階層まで」という制限は 環境の種類ごとに別々に 数えられることです。ラベルは itemize 用・enumerate 用ともに 4 段階分しか用意されていないため、入れ子の連なりの中で同じ種類が 5 つ目に登場するとラベルが尽きてしまいます。混在させていても、片方の種類だけが 5 階層に達すれば後述のエラーになります。

3 階層の例(混在)

種類を混ぜた 3 階層の例を見ます。いちばん外側を 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 なので太字の en ダッシュ – で並びます。さらに「水」の中に置いた最も内側の enumerate は第 3 階層なので、既定では「i.」「ii.」というローマ数字が付きます。種類を混ぜても、ラベルは常に そのリストが外側から数えて何階層目か で決まる、という規則がそのまま働いています。

4 階層を超えたいとき・ラベルを変えたいとき

itemizeenumerate5 階層以上 に入れ子にすると、Too deeply nested というエラーになります。標準の LaTeX には各種類につき 4 段階分のラベルしか用意されていないためで、素の標準環境ではこれが上限です。深い階層が必要なときや、階層ごとのラベルをまとめてきれいに変えたいときは、enumitem パッケージを使うのが定石です。

enumitem を読み込むと、\setlistdepth{<整数>} で最大の入れ子深さを引き上げられ、\setlist[itemize,5]{...} のように 種類と階層を指定して その階層のラベルや体裁を設定できます。一方、4 階層の範囲内で個々の階層のラベルだけを変えたいなら、対応する命令を \renewcommand で再定義するだけでも済みます。

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

この例では、itemize の第 2 階層の記号を菱形(⋄)に、enumerate の第 2 階層のラベルを「a)」「b)」という形に変えています。多くのリストで体裁を一貫させたい場合は、こうした手作業よりも enumitem のオプション(label= など)で指定する方が見通しよく管理できます。詳しくは下のリンクを参照してください。