ラベルのカスタム

箇条書きの 行頭につく印(マーカー/ラベル) は、自由に取り替えられます。itemize の黒丸を菱形に、enumerate の「1.」をローマ数字「I.」や「(a)」に — その鍵は、階層ごとに用意された数個のマクロです。このページでは、古典的な \renewcommand による方法(itemize\labelitemienumerate\theenumi\labelenumi)と、現代的で簡単な enumitemlabel= キーの両方を扱い、両者の違いと使い分けを示します。

itemize の記号を変える

itemize の行頭記号は、階層(ネストの深さ)ごとに \labelitemi\labelitemii\labelitemiii\labelitemiv というマクロに保持されています(語尾の i・ii・iii・iv がローマ数字で第 1〜第 4 階層を表します)。標準クラスでの既定は、第 1 階層が黒丸 \textbullet(•)、第 2 階層が太字の en ダッシュ(–)、第 3 階層がアスタリスク \textasteriskcentered(*)、第 4 階層が中点 \textperiodcentered(·)です。

階層全体 の記号を変えるには、対応するマクロを \renewcommand で再定義します。プリアンブル、または効かせたい範囲の手前に置きます。たとえば第 1 階層を菱形にするなら次のとおりです。

latex
\renewcommand{\labelitemi}{$\diamond$}
\begin{itemize}
  \item この階層の記号は菱形になる
  \item 二つめの項目
\end{itemize}

一方、1 項目だけ 記号を変えたいときは、\item の直後に角括弧でラベルを与えます。\item[$\star$] ならその項目の行頭が星に、\item[--] ならダッシュになります。角括弧で与えたラベルは既定で太字・右寄せ(フラッシュライト)に置かれます。

enumerate の番号 — counter と \theenumi

enumerate はもう一段ぶんだけ複雑です。番号付けには、階層ごとの カウンタ enumienumiienumiiienumiv が使われます。このカウンタの値(1、2、3 …)を どう表現するか を決めるのが \theenumi\theenumii … で、標準クラスでの既定は次のとおりです。

階層カウンタ`\the…` の既定表示
\theenumi第 1enumi\arabic{enumi}1, 2, 3 …
\theenumii第 2enumii\alph{enumii}a, b, c …
\theenumiii第 3enumiii\roman{enumiii}i, ii, iii …
\theenumiv第 4enumiv\Alph{enumiv}A, B, C …

たとえば第 1 階層をローマ数字にしたいなら、\theenumi\Roman で書き換えます。\theenumi は **その項目を \ref で参照したときに出る文字列** でもあるので、ここを変えると本文の番号と相互参照の両方がそろって変わります(参照のしくみは後述)。

latex
\renewcommand{\theenumi}{\Roman{enumi}}
\begin{enumerate}
  \item 第一段階(既定では I. と表示)
  \item 第二段階
\end{enumerate}

\labelenumi と \theenumi の違い

ここが要点です。\theenumi数の表現(1 か I か a か) を決めるのに対し、\labelenumi\labelenumii … は ラベルが行頭にどう印字されるか を決めます。\labelenumi は内部で \theenumi を呼び、その前後に約物(ピリオドや括弧)を添えます。標準クラスでの既定は次のとおりで、第 2 階層だけ丸括弧で囲み、他はピリオドを付けます。

ラベルマクロ既定の定義表示
\labelenumi\theenumi.1. 2. 3. …
\labelenumii(\theenumii)(a) (b) (c) …
\labelenumiii\theenumiii.i. ii. iii. …
\labelenumiv\theenumiv.A. B. C. …

したがって、行頭の体裁だけ を変えたい(数の表現はそのまま)なら \labelenumi を再定義します。たとえば「1.」を「(1)」にするには次のとおり。\theenumi は触らないので、\ref で参照したときは括弧の付かない 1 が返ります。

latex
\renewcommand{\labelenumi}{(\theenumi)}
\begin{enumerate}
  \item 行頭は (1) と表示される
  \item (2)、(3) と続く
\end{enumerate}

まとめると、**数の見た目(I・a・1)は \theenumi、ラベル全体の体裁(前後の括弧やピリオド)は \labelenumi** で制御します。相互参照の値は \theenumi に約物を加えない素の表現が使われ、より正確には LaTeX が \theenumi の前に \p@enumi(既定では空)を付けて参照用ラベルを組み立てます。\p@enumii などを定義すれば「1(a)」のように親の番号を含む参照も作れます。

カウンタの表現コマンド

\theenumi\labelenumi の中で番号の見た目を選ぶには、LaTeX 標準の カウンタ表現コマンド を使います。いずれもカウンタ名を引数に取り(例 \Roman{enumi})、その値を指定の体裁で印字します。

コマンド表示範囲・備考
\arabic1, 2, 3 …(アラビア数字)負の数も可
\alpha, b, c …(小文字)1〜26
\AlphA, B, C …(大文字)1〜26
\romani, ii, iii …(小文字ローマ数字)
\RomanI, II, III …(大文字ローマ数字)
\fnsymbol脚注記号 * † ‡ § ¶ ‖ ** †† ‡‡1〜9 のみ

\alph\Alph は 26 を超える値で、\fnsymbol は 1〜9 の範囲を外れた値でエラーになります。たとえば \renewcommand{\theenumi}{\Alph{enumi}} とすれば第 1 階層が A, B, C … に、\renewcommand{\labelenumi}{\arabic{enumi})} とすれば「1)」のような体裁になります。

今どきの楽な方法 — enumitem の label=

マクロの再定義は強力ですが、リストごとに体裁を変えたいときは煩雑です。多くの場合は **enumitem パッケージ** のほうが見通しよく書けるので、まずこちらをおすすめします。enumitem を読み込むと、リスト環境のオプション引数に label= を書くだけで、その場のラベルを指定できます。

label= の中では、\alph*\Alph*\arabic*\roman*\Roman* という アスタリスク付き の表現コマンドが使えます。これらは引数を取らず「いまの階層のカウンタ」を指します。約物も一緒に書けるので、label=(\alph*) で「(a)」、label=\Roman*. で「I.」のようになります。

document.tex
\usepackage{enumitem}
% ...
\begin{enumerate}[label=(\alph*)]
  \item ラベルは (a) になる
  \item (b)、(c) と続く
\end{enumerate}

itemize でも同様で、\begin{itemize}[label=$\star$] のように記号そのものを与えられます。既定では label= はラベルだけでなく **相互参照(\ref)の体裁** も同時に決めますが、参照だけ別の形にしたいときは ref= キーを使います。たとえば [label=(\alph*), ref=\alph*] なら、行頭は「(a)」、\ref の戻り値は括弧なしの「a」になります。さらに label*= は、親のラベルに連結した番号(1.、1.1.、1.1.1. …)を作るときに使います。

同じ体裁を文書全体のリストに効かせたいなら、\setlist でまとめて設定できます。itemizeenumerate という種類と階層を角括弧で指定します。

latex
\usepackage{enumitem}
\setlist[enumerate,1]{label=\Roman*.}   % 第1階層を I. II. III.
\setlist[enumerate,2]{label=(\alph*)}    % 第2階層を (a) (b)
\setlist[itemize,1]{label=$\diamond$}    % itemize 第1階層を菱形に

なお enumitemshortlabels オプションを使うと、enumerate パッケージ風に \begin{enumerate}[(1)] のような短い書き方もできます。階層ごとの細かなカウンタ操作やインラインのリストなどは enumitem のページでさらに扱います。

まとめの例

最後に、ここまでの考え方を 1 つの文書にまとめます。前半は古典的な方法で第 1 階層をローマ数字の「I.」体裁にし、後半は同じ結果を enumitemlabel= で簡潔に書いています。どちらも出力は同じです。

document.tex
% --- 古典的な方法 / the classic way ---
\renewcommand{\theenumi}{\Roman{enumi}}
\renewcommand{\labelenumi}{\theenumi.}
\begin{enumerate}
  \item 下ごしらえ        % I. と表示
  \item 加熱する          % II.
\end{enumerate}

% --- enumitem を使う / with enumitem ---
\usepackage{enumitem}
\begin{enumerate}[label=\Roman*.]
  \item 下ごしらえ        % I.
  \item 加熱する          % II.
\end{enumerate}

前半では、まず \theenumi\Roman にして数の表現を I, II, … に変え、続けて \labelenumi\theenumi. と定義してラベルにピリオドを添えています(既定の \labelenumi\theenumi. なので、この行は表現の変更を明示するための念押しです)。後半では label=\Roman*. の一行が両方の役目をまとめて果たします。日常的にはこの enumitem の書き方で十分で、ラベルと参照を別々に制御したい高度な場面でだけ、\theenumi\labelenumiref= の使い分けを思い出せば十分です。