description(定義)

description 環境は、「用語」とその「説明」を組にして並べる 定義リスト のための環境です。各 \item に省略可能引数 [...] を渡すと、その中身が 見出し語(ラベル) になり、既定では太字で左端に置かれ、説明文がそれに続きます。用語集・オプション一覧・パラメータの説明にうってつけです。

基本の使い方

itemizeenumerate がラベル(1.)を自動で付けるのに対し、descriptionあなたが言葉でラベルを与える 点が違います。ラベルは \item省略可能引数 [...] に書きます。itemizeenumerate では [...] はその項目だけラベルを差し替える「おまけ」でしたが、description では事実上ここが主役です。

latex
\begin{description}
  \item[TeX] クヌースが作った組版システム。
  \item[LaTeX] TeX 上に築かれた文書作成のための言語。
  \item[CTAN] パッケージを配布する世界規模のアーカイブ網。
\end{description}

組版すると、TeXLaTeXCTAN の各語が 太字 で左端に立ち、それぞれの説明がその右(説明が長ければ次行へ折り返して)続きます。ラベルが長いと、説明文の 1 行目はラベルに食い込む形で始まります。itemizeenumerate と同じく、項目は最低 1 つ必要で、0 個だと「Something's wrong--perhaps a missing \item」というエラーになります。

ラベルの落とし穴

[...]省略すると、その項目にはラベルが付きません(マーカーも字下げの目印もない、ぶら下げ段落のような項目になります)。description ではラベルこそが要なので、これは意図したとき以外は避けます。LaTeX の公式リファレンスも「気の利いた既定値が存在しないので、必ずラベルを付けよ」と助言しています。

もうひとつの罠が 角括弧 です。[ ] は省略可能引数の区切りに使われるため、ラベルや本文の中で角括弧を 文字として 出したいときは中括弧で囲んで隠します。本文の先頭が [ で始まる場合は \item {[} のように書き、ラベルの中で閉じ括弧を出したい場合は \item[閉じ括弧 {]}] のように {]} と書きます。

latex
\begin{description}
  \item[\texttt{[a-z]}] 文字クラス。ラベル内の角括弧は中括弧で保護する。
  \item {[}本文が角括弧で始まる場合はこう書く。
\end{description}

なお、ラベルの中でフォントを変える命令を 宣言形 で書くと、既定の太字に上書きされます。たとえばラベルを等幅にしたいなら \item[{\ttfamily label}] のように、命令ごと中括弧で包むと安全です。

enumitem で書式を変える

見出し語の書体や配置を細かく変えたいときは **enumitem** パッケージを使います。description 環境に直接オプションを渡せるようになり、font= でラベルの書体、leftmargin= で左の余白、style= でラベルと本文の並べ方を指定できます。itemsep= など他のリストと共通のキーも、もちろん使えます。

latex
\usepackage{enumitem}

\begin{description}[font=\bfseries\sffamily, style=nextline, leftmargin=1cm]
  \item[オプション] 長いラベルは次の行から本文が始まる。
  \item[既定値] サンセリフ体の太字でラベルを組む。
\end{description}

style= には主に次の値があります。description のラベルはどの値でも左端から始まりますが、ラベルが長いときの本文の流れ方が変わります。

style挙動
standard標準クラスの description と同じ。ラベルは箱に入れて組まれる。
unboxedstandard に近いが、ラベルを箱に入れない。長いラベルでも詰まりにくく、折り返しも効く。
nextlineラベルが余白に収まらなければ、本文は次の行から始まる。本文が左余白に食い込まない。
samelinenextline と似るが、ラベルが収まらなくても本文は同じ行に続ける。

すべての description に同じ設定を効かせたいなら、プリアンブルで \setlist[description]{...} を一度書いておきます。たとえば \setlist[description]{font=\sffamily\bfseries, style=nextline} とすれば、文書中のすべての定義リストに一括で適用されます。leftmargin=labelsep= も覚えておくと便利で、前者はラベルに応じて本文の開始位置が変わり、後者はラベルと本文の間隔を固定します。

太字を変える(\descriptionlabel)

enumitem を使わずに既定の太字だけを変えたいなら、ラベルの組み方を司る命令 \descriptionlabel\renewcommand で再定義します。引数 #1 がラベルのテキストです。次は、すべてのラベルを スモールキャピタル にする例です(\hspace{\labelsep} でラベルと本文の間に既定の空きを入れています)。

latex
\renewcommand{\descriptionlabel}[1]{%
  {\hspace{\labelsep}\textsc{#1}}}

この再定義をプリアンブルに置けば、以後のすべての description のラベルがスモールキャピタルになります。\textsc\texttt(等幅)や \textit(イタリック)に変えれば、好みの書体にできます。

用語集の例

実用的な使い方として、enumitem で体裁を整えた小さな用語集を作ってみます。style=nextline で長い見出し語を独立した行に置き、font=\bfseries で太字を明示、leftmargin= で説明文をきれいに字下げしています。各 \item[...] に用語を、その後ろに説明を書くだけです。

document.tex
\documentclass{article}
\usepackage{enumitem}
\begin{document}

\begin{description}[font=\bfseries, style=nextline, leftmargin=1.5cm]
  \item[コンパイル]
    ソースファイルを TeX エンジンで処理し、PDF などの出力を得ること。
  \item[プリアンブル]
    \verb|\documentclass| から \verb|\begin{document}| までの設定部分。
  \item[相互参照]
    \verb|\label| と \verb|\ref| により、番号やページを自動で挿入するしくみ。
\end{description}

\end{document}

これを組版すると、「コンパイル」「プリアンブル」「相互参照」の三語が太字で各行に立ち、その下に 1.5cm 字下げされた説明が続く、読みやすい用語集になります。見出し語が短い文書なら style=nextline を外し、説明を同じ行から始めるのも自然です。