BibTeX

BibTeX は、文献情報を .bib というデータベースに一度だけ書いておき、そこから参考文献リストを自動生成する古典的な仕組みです。本文では \cite で鍵を呼ぶだけ。スタイルファイル(.bst)を差し替えれば、同じデータから学会ごとの体裁に組み替えられます。このページでは .bib の書き方、\bibliographystyle\bibliography の役割、そして「latex → bibtex → latex → latex」という独特のビルド手順を見ていきます。

BibTeX とは

参考文献を本文の末尾に手で並べる方法(thebibliography 環境)もありますが、文献が増え、複数の論文で同じ文献を使い回すようになると破綻します。BibTeX は、オーレン・パタシュニックが 1985 年ごろに作った別プログラムで、TeX/LaTeX 本体とは分かれて動きます。役割は、文献データベースから「いま実際に引用された文献だけ」を取り出し、指定された体裁に整え、本文へ差し込める形に書き出すことです。

仕組みは三つの部品に分かれます。**.bib ファイル(文献の生データ)、本文中の \cite** と二つの命令(\bibliographystyle\bibliography)、そして体裁を定める **.bst ファイル**(スタイル)。データと体裁が分離しているので、投稿先が変わってもデータには一切手を触れず、スタイル名を一語変えるだけで済みます。これは LaTeX 全体に流れる「構造と見た目を分ける」思想そのものです。

.bib データベースを書く

.bib ファイルには、文献を エントリ という単位で並べます。各エントリは @article のように 種類 を宣言し、波括弧の中に 引用鍵(key)フィールド を書きます。引用鍵は本文の \cite{...} と一字一句一致させる識別子で、自分で決めます(例:knuth1984)。フィールドは フィールド名 = {値} の形で、, で区切ります。

references.bib
@book{knuth1984,
  author    = {Donald E. Knuth},
  title     = {The {TeX}book},
  publisher = {Addison-Wesley},
  year      = {1984}
}

@article{shannon1948,
  author  = {Claude E. Shannon},
  title   = {A Mathematical Theory of Communication},
  journal = {Bell System Technical Journal},
  volume  = {27},
  number  = {3},
  pages   = {379--423},
  year    = {1948}
}

@inproceedings{lamport1987,
  author    = {Leslie Lamport},
  title     = {Document Production: Visual or Logical?},
  booktitle = {Proceedings of TUG},
  year      = {1987},
  pages     = {19--24}
}

よく使う種類と必須フィールドを覚えておくと便利です。@article は雑誌論文(authortitlejournalyear)、@book は書籍(author または editortitlepublisheryear)、@inproceedings は会議録の論文(authortitlebooktitleyear)。ほかに学位論文の @phdthesis/@mastersthesis、書籍の一章を表す @incollection、Web ページなど雑多なものを入れる @misc があります。種類ごとに、どのフィールドが必須かはスタイルが決めます。

値の波括弧には実用上の意味があります。title = {The {TeX}book} のように 内側にもう一段 括弧を重ねると、その部分はスタイルによる大文字小文字の変換から保護されます(TeXTex に小文字化されない)。著者が複数なら author = {A. Smith and B. Jones} のように **and で区切り**、姓名の順序や略記は BibTeX とスタイルが処理します。

本文側の二つの命令

文書側では、参考文献を出したい位置(ふつう本文の末尾)に二つの命令を置きます。\bibliographystyle{plain} が **体裁(どの .bst を使うか)** を選び、\bibliography{references}どのデータベースを読むか を BibTeX に伝えると同時に、その場所に文献リストを出力 します。後者では拡張子 .bib を付けない点に注意してください(ファイル名は references であっても references.bib と書きません)。

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

TeX was created by Knuth~\cite{knuth1984}, building on
Shannon's information theory~\cite{shannon1948}.

\bibliographystyle{plain}
\bibliography{references}

\end{document}

本文中の \cite{knuth1984} は、.bib の引用鍵 knuth1984 を指しています。鍵が一致しないと文献は出ません(未定義の参照として警告が出ます)。引用された文献だけがリストに現れ、.bib に入っていても引用しなかったものは無視されます(全件出したいときは \nocite{*} を使います)。\cite 自体の使い分け(複数引用、ページ指定、cite パッケージなど)は「引用の基本」のページで扱います。

ビルド手順(4 回の実行)

BibTeX の最初のつまずきは、ここです。文献リストを正しく出すには、古典的には latex → bibtex → latex → latex の順に処理を 4 回まわします。なぜ複数回かというと、BibTeX が LaTeX 本体とは別プログラムで、互いに **補助ファイル(.aux.bbl)** を介して情報をやり取りするからです。

  • 1 回目の latex — 本文を処理し、引用された鍵と \bibliographystyle/\bibliography の指定を .aux ファイルに書き出します。この時点では文献リストはまだ空白です。
  • bibtex.aux を読んで「どの鍵が引用されたか・どのスタイルか・どの .bib か」を知り、.bib から該当エントリを取り出し、.bst の規則で整形して **.bbl ファイル** に書き出します。
  • 2 回目の latex.bbl を取り込んで文献リストを組みますが、各文献に振られる番号などの相互参照はまだ未解決です。
  • 3 回目の latex — 番号や \cite の表示が確定し、本文の引用と文献リストが完全に一致します。
terminal
$ latex document.tex     # writes document.aux (cite keys)
$ bibtex document        # reads .aux + .bib + .bst, writes .bbl
$ latex document.tex     # pulls in .bbl
$ latex document.tex     # resolves all references

bibtex に渡すのは .tex ではなく 補助ファイル名(拡張子なしのジョブ名) である点に注意してください。pdflatex を使う場合も手順は同じで、latexpdflatex に置き換えるだけです。毎回 4 回打つのは面倒なので、実務では **latexmk** に任せます。latexmk.aux の中身を見て BibTeX の実行要否と必要な反復回数を自動判断するため、ふつうは一度の起動で済みます。

terminal
$ latexmk -pdf document.tex   # runs latex/bibtex/latex as many times as needed

標準のスタイル(.bst)

スタイルは、文献の 並び順ラベル(番号 or 略号)著者名や誌名の略し方 を決めます。BibTeX には標準で 4 つのスタイルが付属し、これを覚えておけば多くの用途に足ります。\bibliographystyle{...} に名前を渡すだけで切り替わります。

スタイル並び順ラベル / 特徴
plain著者名のアルファベット順番号 [1]。最も標準的
unsrt本文で引用した順番号 [1](plain と同じ書式)
alphaラベル順(おおむね著者・年)英数字ラベル [Knu84] のような略号
abbrv著者名のアルファベット順名(ファーストネーム)と誌名を略記

このほか、分野ごとの定番スタイルも標準で含まれます。工学系で広く使われる **ieeetr(IEEE Transactions 風、引用順の番号)、計算機科学の acm(ACM 風)、応用数学の siam**(SIAM 風)などです。さらに学会や出版社は独自の .bst を配布しており、投稿先の指定に従って差し替えます。スタイルを変えても .bib と本文の \cite は一切変えなくてよいのが BibTeX の利点です。

日本語:pbibtex / upbibtex

素の bibtex は欧文向けで、日本語の著者名や書名を含むフィールドの並べ替え(五十音順など)や処理がうまくいきません。そこで pLaTeX/upLaTeX には、日本語に対応したコマンドが用意されています。**pbibtex は pLaTeX 用で、EUC-JP のコードポイントを基準に並べ替えます。upbibtex** は upLaTeX 用で、Unicode のコードポイントを基準に並べ替えます。いずれも JBibTeX(松井正一氏が開発)の流れを汲み、日本語フィールドを途中で切らずに扱えるよう関数が拡張されています。

使い方は欧文と同じで、ビルド手順の **latexplatex(または uplatex)に、bibtexpbibtex(または upbibtex)に** 置き換えるだけです。スタイルも日本語版が用意されており、plain に対応する **jplain**、unsrt に対応する **junsrt**、alpha に対応する jalpha、そして「[Kin80] 木下: ……」のように姓を見出しに出す jname などがあります(学会用の jipsj などもあります)。

terminal
$ uplatex  document.tex   # 1st pass: writes .aux
$ upbibtex document       # Japanese-aware: writes .bbl
$ uplatex  document.tex   # pulls in .bbl
$ uplatex  document.tex   # resolves references
$ dvipdfmx document.dvi   # DVI -> PDF

upLaTeX は DVI を経由するため、最後に dvipdfmx で PDF へ変換します(この流れは日本語ページや DVI 変換のページで詳しく扱います)。なお latexmk は設定で pbibtex/upbibtex を呼ぶように指定でき、日本語でも 4 回の手作業を自動化できます。

BibTeX の限界と biber/biblatex

BibTeX は枯れていて広く使われていますが、設計が古く、いくつかの制約があります。文字コードが 8 bit 前提 で Unicode を素直に扱えない(多言語の著者名やアクセント記号で苦労する)、並べ替えの自由度が低く、複雑な体裁を作るには .bst という独特の(スタック指向の)言語を書く必要がある、といった点です。

こうした制約を解消するために生まれたのが biblatex(LaTeX パッケージ)と、その既定のバックエンド biber です。Unicode をネイティブに扱い、並べ替えや体裁を LaTeX 側のオプションで細かく制御でき、.bst を書かずに済みます。新規プロジェクトでは biblatex/biber が有力な選択肢です。詳しくは別ページで扱います。