索引・文献コマンド

索引や参考文献は、コンパイル 1 回ではできあがりません。まず LaTeX が素材を書き出し(\index.idx に、\cite.aux に)、次に 別のプログラム がそれを並べ替えて整形し、もう一度 LaTeX を流して本文に取り込みます。このページは、その裏方——索引を組む makeindex / mendex / upmendex と、文献を組む bibtex / pbibtex / upbibtex / biber を扱います。

索引・文献は別プログラムが処理する

本文に \index{...}\cite{...} を書いても、LaTeX 自身はそれを並べ替えません。1 回目のコンパイルで 生データ.idx.aux)を吐き、そこへ索引/文献プログラムを走らせて整形済みファイル(.ind.bbl)を作り、もう一度 コンパイルして取り込む——という多段処理になります。順番と回数を手で管理するのは面倒なので、実務では latexmk などのビルドツールに任せるのがふつうです。

makeindex / mendex / upmendex — 索引を組む

makeindex が基本です。\index が書き出した .idx を読み、並べ替えて .ind を生成します。出力の体裁は -s スタイル.ist で指定できます。ただし内部処理は 1 バイト単位で、日本語の正しい読み順には対応しません。

mendex は日本語対応版で、漢字を 読み(ヨミ)順 に並べます。読み@語 の構文で読みを与えると、その仮名で五十音順に整列します。upmendex はその Unicode/多言語版で、内部処理を Unicode 化し、ICU(Unicode 照合アルゴリズム) で日本語・ラテン・ギリシャ・キリル文字などを並べ替えます。makeindex/mendex のスタイルと上位互換で、現代の upLaTeX や LuaLaTeX-ja での索引はこれが定番です。

terminal
makeindex document.idx              # → document.ind
upmendex -s mystyle.ist document.idx # 多言語・スタイル指定 / multilingual, with a style

最小構成では、プリアンブルで makeidx を読み \makeindex を宣言し、本文で \index{...} を置き、索引を出したい場所で \printindex を呼びます。ここで重要なのは、\index は紙面に文字を出す命令ではなく 索引用の材料を書き出す命令 だという点です。語の表示と並べ替えを分けたいときは 読み@表示 と書き、たとえば らてふ@LaTeX のように索引用の読みを明示します。

latex
\documentclass{jsarticle}
\usepackage{makeidx}
\makeindex
\begin{document}
LaTeX\index{らてふ@LaTeX} で索引を作ります。
\printindex
\end{document}

bibtex / pbibtex / upbibtex / biber — 文献を組む

bibtex(Oren Patashnik、1985 年)は古典的な文献ツールです。.aux\cite キーと .bib データベースを突き合わせ、.bst スタイル に従って .bbl を生成します。日本語フィールドや和文の並べ替えには pbibtex(pTeX 系)、Unicode 対応の upbibtex(upTeX 系)を使います。

biber は、近年の biblatex 用バックエンドです。Perl 製で 完全な Unicode 対応、Unicode 照合アルゴリズムを使う並べ替え、強力な相互参照、データモデル検証など、従来の BibTeX より広い機能を備えます。文書が biblatex を使うなら、まず biber を前提に考えます。bibtexbiber 共通の -min-crossrefs=N(既定 2) は、crossref で参照される項目を独立した文献として立てるか、引用側に取り込むかの閾値です——N 件以上から参照されていれば独立項目になります。

terminal
bibtex document     # 拡張子なし。document.aux を読む / no extension; reads document.aux
biber  document     # biblatex を使う場合 / when the document uses biblatex

使い分けの目安:旧来の \bibliography.bst なら bibtex(日本語は up/pbibtex)。多言語・高機能がほしく biblatex を使うなら biber。研究室や投稿先のテンプレートが .bst を指定しているときは無理に移行せず、そのテンプレートの流儀に合わせます。新規プロジェクトで引用スタイルを自分で選べるなら、biblatex+biber のほうが Unicode と細かな制御に強い選択です。

BibTeX 系では .bst が出力様式を決めるので、投稿規定で jplainplainnat などが指定されているならそれに従います。biblatex では LaTeX 側のオプションで様式を選び、裏側のデータ処理を biber に任せます。どちらでも、本文の引用キーと .bib のキーが一致しないと .bbl は作れても引用は解決しません。まず 1 件だけで通る最小例を作り、それから全参考文献を移すと失敗箇所を狭くできます。

失敗したときは、まず「LaTeX が材料を書き出したか」を見ます。索引なら .idx、文献なら .aux.bcf(biblatex)ができているかを確認し、次に makeindex / upmendex / bibtex / biber のログを読みます。最後に LaTeX をもう一度流して .ind.bbl が本文に取り込まれているかを見る、という順に切り分けると原因が見つけやすくなります。

実行する順番

典型的には「コンパイル → 文献/索引 → コンパイル → コンパイル」と流します。たとえば upLaTeX なら次のとおり。とはいえ手で打つより、必要な順番と回数を自動で判断する latexmk 等に任せるのが確実です。

terminal
uplatex  document      # .aux / .idx を生成
upbibtex document      # 文献を整形 (.bbl)
upmendex document      # 索引を整形 (.ind)
uplatex  document      # 取り込み(番号確定のためもう一度流すことも)
uplatex  document