【LaTeX】description環境(見出し付き箇条書き)で見出しと文の境界を揃える


*beamerの場合はもっと楽な方法があります(beamerの場合).

要点

$\mathrm\LaTeX$文書で見出し付き箇条書きを使うとき,

\usepackage{enumitem}
...
\begin{description}[labelwidth=(一番長い見出しの文字数)em]
 \item[長い見出し] 文
 \item[短] 文
 ...
 \item[一番長い見出し] 文
\end{description}

のように,enumitemパッケージを読み込んだ上でdescription環境のオプション引数labelwidthに長さを渡す.こうすると見出し部分の幅がその長さに固定されて,下図のように見出しの右端(文の左端)が揃って見やすくなる.

環境

筆者はoverleaf上で,compilerに"LaTeX"を使っている(この記事とほぼ同じように設定している).

困りごと

$\mathrm\LaTeX$の箇条書き環境としてはitemize(記号付き),enumerate(番号付き),description(見出し付き)がある.ただ,実際にdescription環境を使って見出し付き箇条書きを作ると,見出しと文の境が揃わないので少しモヤモヤする.

とにかく左端を合わせてくれるっぽい.beamerとは少し挙動が違う.
というわけで,見出しの右端を揃えたい!というのが困りごと.

失敗した方法

調べてみると,description環境では見出しの左端が揃い,itemize環境では見出しの右端が揃うとのこと(参照先).なるほど,itemize環境も記号を自分で設定できるので,実質見出し付き箇条書き的に使えそうである.例えば次のような感じになる.

解決!と思ってやってみたが,うまくいかない.

上下の本文と見比べると,右端は揃っているが,左側が本文領域からはみ出ている.画像ではわかりやすいように余白を調整しているが,実際には紙面から出て見切れたり,2段組みの場合は左の段の文と重なったりしてしまう.
これも想像だが,記号(いまは見出し)部分の幅が固定されているのかもしれない.この幅を\setlengthなどで変更すればどうにかなるかもしれないが,調べるのも面倒だし,(さほど$\mathrm\LaTeX$に慣れていないから)むやみに設定をいじるのはなんとなく怖く,やりたくない.itemize環境を使う作戦は失敗.

解決策

このページに答えが載っていた("Customizing lists"の部分).enuitemパッケージを読み込むと,description環境にオプション引数として"labelwidth"を渡せるようになる.これを渡せば,見出し部分の幅が渡した長さに固定されるらしい.

\usepackage{enumitem}
...
\begin{description}[labelwidth=8rem]
 \item[見出し] 説明の文
 \item[とても長い見出し] 説明の文
 \item[短] 説明の文
\end{description}

とすると,

このように,本文領域からはみ出すことなく,見出しの右端を揃えてくれる!
beamerの場合は一番長い見出しをそのままオプションに入れられたが,この方法では長さを渡さないといけない.cm単位とかだと調整がややこしそうである.根拠はないが,

\begin{description}[labelwidth=(一番長い見出しの文字数)em]

のように長さを決めるのが楽そうだと思う.ちなみに,"em"はいま有効な書体における文字"M"の幅を表すらしい(参考).筆者は見たことがないが,"zw"でもいいのかもしれない.

注意

初めに書いた通り,beamerのときはもっと楽で,単純にオプションとして[一番長い見出し]を渡すだけで見出しの右端が揃う(詳細は別の記事).

参考

下のページの"Customizing lists"の部分を参照した.
https://en.wikibooks.org/wiki/LaTeX/List_Structures