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)。フィールドは フィールド名 = {値} の形で、, で区切ります。
@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 は雑誌論文(author・title・journal・year)、@book は書籍(author または editor・title・publisher・year)、@inproceedings は会議録の論文(author・title・booktitle・year)。ほかに学位論文の @phdthesis/@mastersthesis、書籍の一章を表す @incollection、Web ページなど雑多なものを入れる @misc があります。種類ごとに、どのフィールドが必須かはスタイルが決めます。
値の波括弧には実用上の意味があります。title = {The {TeX}book} のように 内側にもう一段 括弧を重ねると、その部分はスタイルによる大文字小文字の変換から保護されます(TeX を Tex に小文字化されない)。著者が複数なら author = {A. Smith and B. Jones} のように **and で区切り**、姓名の順序や略記は BibTeX とスタイルが処理します。
本文側の二つの命令
文書側では、参考文献を出したい位置(ふつう本文の末尾)に二つの命令を置きます。\bibliographystyle{plain} が **体裁(どの .bst を使うか)** を選び、\bibliography{references} が どのデータベースを読むか を BibTeX に伝えると同時に、その場所に文献リストを出力 します。後者では拡張子 .bib を付けない点に注意してください(ファイル名は references であっても references.bib と書きません)。
\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の表示が確定し、本文の引用と文献リストが完全に一致します。
$ 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 referencesbibtex に渡すのは .tex ではなく 補助ファイル名(拡張子なしのジョブ名) である点に注意してください。pdflatex を使う場合も手順は同じで、latex を pdflatex に置き換えるだけです。毎回 4 回打つのは面倒なので、実務では **latexmk** に任せます。latexmk は .aux の中身を見て BibTeX の実行要否と必要な反復回数を自動判断するため、ふつうは一度の起動で済みます。
$ 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(松井正一氏が開発)の流れを汲み、日本語フィールドを途中で切らずに扱えるよう関数が拡張されています。
使い方は欧文と同じで、ビルド手順の **latex を platex(または uplatex)に、bibtex を pbibtex(または upbibtex)に** 置き換えるだけです。スタイルも日本語版が用意されており、plain に対応する **jplain**、unsrt に対応する **junsrt**、alpha に対応する jalpha、そして「[Kin80] 木下: ……」のように姓を見出しに出す jname などがあります(学会用の jipsj などもあります)。
$ 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 -> PDFupLaTeX は DVI を経由するため、最後に dvipdfmx で PDF へ変換します(この流れは日本語ページや DVI 変換のページで詳しく扱います)。なお latexmk は設定で pbibtex/upbibtex を呼ぶように指定でき、日本語でも 4 回の手作業を自動化できます。
BibTeX の限界と biber/biblatex
BibTeX は枯れていて広く使われていますが、設計が古く、いくつかの制約があります。文字コードが 8 bit 前提 で Unicode を素直に扱えない(多言語の著者名やアクセント記号で苦労する)、並べ替えの自由度が低く、複雑な体裁を作るには .bst という独特の(スタック指向の)言語を書く必要がある、といった点です。
こうした制約を解消するために生まれたのが biblatex(LaTeX パッケージ)と、その既定のバックエンド biber です。Unicode をネイティブに扱い、並べ替えや体裁を LaTeX 側のオプションで細かく制御でき、.bst を書かずに済みます。新規プロジェクトでは biblatex/biber が有力な選択肢です。詳しくは別ページで扱います。