.bib ファイルは、自分が最後にどう印刷されるかを一切知りません。そして、その「知らない」ことこそが設計の核心です。中身は @article{shannon1948, author = {Shannon, Claude E.}, …} という素のテキストのデータベースで、文献が 何であるか だけを記録し、どんな体裁で組まれるかは書きません。だから一つの .bib は、あなたが書く何本もの LaTeX 論文と、その投稿先すべてより長生きします。厄介なのは、データベースには文法があり、この文法に意外な規則がいくつも混じっていることです——.bib では % はコメントの開始ではなく、名前の中のカンマには特別な意味があり、スタイルに表題を書き換えられたときの防具は波括弧一組しかありません。このページはファイルそのものを扱います。エントリの種類、フィールド、引用キーの選び方、著者名の文法、アクセント、@string、crossref までです。
この分業は 1980 年代半ばの設計判断そのものです。データ(.bib)と体裁(.bst スタイル)を切り離しておけば、投稿先が変わったときに触るのはスタイル一行だけで済み、データには指一本触れずにすみます。逆に言えば、.bib に体裁を書き込みたくなったら、それはたいてい負けです。処理系の動かしかた——latex → bibtex → latex → latex の順番や .bst の選びかた——は BibTeX のページ、本文側の \cite の書きかたは引用のページが扱います。ここでは徹底してファイルの中身だけを見ます。
エントリの構造——@種類{キー, フィールド = {値}}
エントリは三つの部品でできています。@ に続く 種類、波括弧を開けてすぐの 引用キー、そしてカンマ区切りで並ぶ フィールド です。この三つ以外に構文はありません。次の一件は、シャノンが 1948 年に発表した情報理論の論文です。
@article{shannon1948,
author = {Shannon, Claude E.},
title = {A Mathematical Theory of Communication},
journal = {Bell System Technical Journal},
volume = {27},
number = {3},
pages = {379--423},
year = {1948}
}細部は寛容です。値は波括弧 { } でも二重引用符 " " でも囲めますし、year = 1948 のように数字だけなら囲みを省けます。最後のフィールドの後ろのカンマは付けても付けなくても構いません。種類名とフィールド名は 大文字小文字を区別しない ので、@Article と @article、Title と title は同じものです。実務では波括弧に統一するのが無難です——引用符は値の中に " を含む文献で破綻しますし、@string マクロとの相性も波括弧のほうが素直だからです。なお pages = {379--423} の 二重ハイフン は組版後に「–」(en ダッシュ)になります。ハイフン一つで書くと、そのまま短いハイフンとして出ます。
引用キーの決めかた——使えない文字と Repeated entry エラー
引用キーは完全にあなたのもので、.bib の中で一意でありさえすれば何でも構いません。ただし本文の \cite{shannon1948} と 一字一句 一致させる必要があり、大文字小文字も区別されます。よく使われるのは 著者姓 + 年(shannon1948)に、衝突したら shannon1948a・shannon1948b と添え字を足す流儀で、機械が生成したキーより人間が思い出せることのほうが結局は効きます。使えない文字は決まっていて、波括弧・カンマ・空白・バックスラッシュ・#・%・~ はどの処理系でも禁止、biber はさらに丸括弧・引用符・= を拒みます。同じキーを二度定義すると BibTeX は Repeated entry---line 15 of file refs.bib と言って 後のほうを丸ごと捨てます。文献管理ソフトから二重に取り込んだときの定番事故なので、このメッセージは覚えておく価値があります。
どの種類を使うか——@article・@book・@inproceedings・@misc
種類は「その文献が 何であるか」を宣言するもので、それを決めた瞬間に、どのフィールドがどの順で出るかもスタイル側で決まります。古典的な BibTeX の標準の種類は次の 14 個です。種類ごとに 必須フィールド(欠けると警告)と 任意フィールド が定められていて、その割り当てを持っているのはあなたではなくスタイル(.bst)です。
| 種類 | 何を表すか | 主な必須フィールド |
|---|---|---|
@article | 雑誌・紀要などの論文 | author, title, journal, year |
@book | 出版社の明確な書籍 | author か editor, title, publisher, year |
@booklet | 出版社を持たない小冊子・私家版 | title(最低限) |
@inproceedings | 会議録(proceedings)所収の発表論文 | author, title, booktitle, year |
@conference | @inproceedings の別名(Scribe 互換) | (@inproceedings に同じ) |
@proceedings | 会議録そのもの。crossref の親に使う | title, year |
@incollection | 編著書の中の、独立した題を持つ一章 | author, title, booktitle, publisher, year |
@inbook | 書籍の一部(章・節やページ範囲) | author/editor, title, chapter か pages, publisher, year |
@phdthesis | 博士論文 | author, title, school, year |
@mastersthesis | 修士論文 | author, title, school, year |
@techreport | 研究機関などのテクニカルレポート | author, title, institution, year |
@manual | ソフト・機器などのマニュアル | title(最低限) |
@unpublished | 未公刊の原稿・草稿 | author, title, note |
@misc | 上記に当てはまらない雑多なもの | 必須なし(howpublished・note で補う) |
迷いやすい組み合わせは二つです。@inbook と @incollection は、前者が「一冊の本の一部分」(自著の第 3 章など)、後者が「編者が編んだ論文集の中の、別著者による独立した一編」を指します。@inproceedings と @conference は機能的に完全に同一で、@conference は BibTeX の先祖である組版システム Scribe との互換のために残っている別名にすぎません——新しく書くなら @inproceedings を選んでください。学位論文は学位で @phdthesis と @mastersthesis を選び分け、どれにも当てはまらないものは @misc に落として howpublished や note で補います。
モダンな biblatex はこの一覧をほぼ包含したうえで、Web 資料のための @online(別名 @electronic)、type フィールドで種別を書き分ける汎用の @report、学位を問わない @thesis、そして引用もされず文献リストにも出ない純粋なデータ置き場 @xdata を加えます。@online は arXiv やプレプリントの記述に向き、後述の eprint 系フィールドと組み合わせます。これら新しい種類は biber/biblatex を前提としており、古典的な bibtex + .bst の組み合わせでは解釈されないことがあります。
必須フィールドと任意フィールド——どこに DOI と URL を書くか
フィールドは 名前 = {値} の組で、必須か任意かは種類ごとに違い、その線引きを決めるのはスタイルです。必須が欠ければ BibTeX が警告を出し、知らないフィールドは(多くのスタイルで)黙って無視されます——だから外部から取り込んだメタデータに余分なフィールドがぶら下がっていても害にはなりません。種類を問わず頻出するのは次のものです。
author/editor— 著者・編者。複数人の書きかたは次節で詳述します。title— 表題。論文名・書名・章題など。journal/booktitle— 掲載誌名(@article)/所収の書名・会議録名(@inproceedings・@incollection)。year/month/date— 古典 BibTeX はyearとmonth、biblatex はdate = {2026-05-01}のような ISO 形式を推奨(年だけのdate = {2026}も可)。volume/number/pages— 巻/号/ページ。範囲はpages = {379--423}のように二重ハイフンで書きます。publisher/institution/school— 出版社/(レポートの)発行機関/(学位論文の)大学。doi/url/urldate— DOI(10.…の本体だけ。https://doi.org/は付けない)、URL、biblatex の参照日。eprint/eprinttype/eprintclass— biblatex のプレプリント用。arXiv ならeprint = {2405.00001}、eprinttype = {arxiv}(旧称archivePrefix)、eprintclass(旧称primaryClass)に分野を書きます。note/howpublished— 補足の自由記述/「どう公開されたか」。@miscの URL がよく置かれる場所です。
ここに、多くの人が一度は踏む落とし穴があります。古典的な標準スタイルは doi も url も知りません。 plain.bst の中にはそもそも url という文字列が一度も現れず、書いたフィールドは警告すら出さずに消えます。逃げ道は三つ。\usepackage{url} を読み込んで howpublished = {\url{https://…}} に押し込むか、doi と url を理解する plainnat(natbib)や IEEEtran などのスタイルに乗り換えるか、biblatex に移るかです。biblatex なら doi・url・urldate はすべて第一級のフィールドで、\usepackage[doi=false]{biblatex} のようにオプションで出力を止めることもできます。データ側は常に両方書いておき、出すか出さないかはスタイルに決めさせるのが正着です。
% classic BibTeX: standard .bst styles drop doi/url, so use howpublished
@misc{tug2024,
author = {{TeX Users Group}},
title = {TeX Live 2024},
howpublished = {\url{https://tug.org/texlive/}},
note = {Accessed 7 August 2026},
year = {2024}
}
% biblatex: doi, url and urldate are proper fields
@online{arxiv2405,
author = {Doe, Jane},
title = {A Preprint with a {DOI}},
date = {2024-05-01},
eprint = {2405.00001},
eprinttype = {arxiv},
doi = {10.1000/example},
url = {https://arxiv.org/abs/2405.00001},
urldate = {2026-08-07}
}著者名の書きかた——and、von、Jr の四部構造
複数の著者は and で区切ります——カンマではありません。カンマには別の仕事が割り当てられているからです。BibTeX は一つの名前を First・von・Last・Jr の四つの部分 に分解して読み、書きかたは三通りだけ認めます。First von Last、von Last, First、von Last, Jr, First の三つで、カンマはこの部分の境目を示す記号です。だから author = {Shannon, Claude E.} は「姓 Shannon、名 Claude E.」の意味になります。ふだんは一つ目の自然な語順で構いませんが、Jr がある場合と、姓が複数語なのに von が無い場合は使えません——Per Brinch Hansen と書くと、BibTeX は「Brinch」を名の一部だと読み違えます。Brinch Hansen, Per と書けば誤解の余地はありません。
@book{names2026,
author = {de la Vall{\'e}e Poussin, Charles Louis Xavier Joseph
and Brinch Hansen, Per
and Ford, Jr., Henry
and {The TeX Users Group}
and others},
title = {Four Ways to Write One Name},
publisher = {William Reid {and} Company},
year = {2026}
}では BibTeX は de la が von 部だとどうやって知るのでしょうか。規則はきわめて素朴です——波括弧の外側で最初の文字が小文字なら、そのトークンは von とみなされます。de la Vall{\'e}e Poussin の de と la は小文字で始まるので von 部、続く二語が Last 部です。この規則を逆手に取れば、たとえば小文字始まりの姓を Last 部に押し込みたいときに、大文字で始まるダミーの制御綴を前置して判定を騙すこともできます。三つの実務的な帰結があります。著者が多すぎるときは末尾を and others にすればスタイルが「et al.」に置き換えます。団体名は {The TeX Users Group} のように 全体を波括弧で包み、中の and が区切りと誤読されるのを防ぎます。biblatex ではこの規則が publisher・institution・organization・location のような「リテラルリスト」にも及び、社名の一部である and は publisher = {William Reid {and} Company} のように守る必要があります。
アクセントと非 ASCII の名前——G{\"o}del と Gödel は同じではない
古典的な bibtex にとって、アクセント付きの文字は 「特殊文字」——「最上位の左波括弧の直後にバックスラッシュが来て、対応する右波括弧までが一つのかたまり」——です。{\"o} や {\'e} がそれで、BibTeX はこのかたまり全体を たった一文字として数えます。効果はラベルにはっきり出ます。alpha スタイルで G{\"o}del は G{\"o}d31 というラベルになりますが、同じ名前を素の UTF-8 で Gödel と書くと Gö31 になってしまいます。ö が 2 バイトあり、バイト単位で数える bibtex 0.99d はそこで三文字ぶんを使い切るからです。並べ替えでも同じことが起き、日本語・中国語・韓国語の名前ならなおさら崩れます。実務上の結論はひとつ、非 ASCII の名前を扱うなら biber を使う ことです。biber は UTF-8 前提で設計され、ロケールに沿った照合順序で並べ替えます。どうしても古典 BibTeX に留まるなら、名前を {\"o} 形式で書くか、8 ビット対応の bibtex8/bibtexu に切り替えてください。
% classic bibtex + alpha.bst -> label [G{\"o}d31]
@article{godel1931a,
author = {G{\"o}del, Kurt},
title = {On Formally Undecidable Propositions},
journal = {Monatshefte},
year = {1931}
}
% same name in raw UTF-8 -> label [Gö31] under bibtex 0.99d; fine under biber
@article{godel1931b,
author = {Gödel, Kurt},
title = {Same Name, Raw UTF-8},
journal = {Monatshefte},
year = {1931}
}なぜ {DNA} に波括弧が要るのか——そして要らない場合
plain・abbrv・unsrt・alpha といった古典的なスタイルは、論文の表題を 文頭だけ大文字にして残りを小文字化 します。そのため title = {A Theory of DNA and Galois Theory} は「A theory of dna and galois theory」として出力されます。固有名詞も頭字語も容赦がありません。防ぐ道具は一つだけ——守りたい範囲をもう一段の波括弧で囲む ことです。{DNA} と書けばその範囲は変換の外に置かれます。この一手を知らないことが、崩れた文献リストの最大の原因です。なぜこう動くのかという処理系側の理屈は BibTeX のページに譲ります。
ところが biblatex + biber では話が変わります。numeric・authoryear などの標準スタイルは、そもそも表題の大文字小文字に一切触れません——書いたとおりに出ます。文頭大文字化が起きるのは \DeclareFieldFormat{titlecase}{\MakeSentenceCase*{#1}} のように明示的に要求したときだけで、そのときも既定のオプション bibtexcaseprotection=true が BibTeX と同じ波括弧の規則を再現するので、{DNA} はやはり守られます。逆に bibtexcaseprotection=false を指定すると波括弧は保護をやめ、代わりに \NoCaseChange{DNA} で明示することになります。つまり「波括弧で守る」という作法は biblatex でも通用しますが、必要になる場面は昔よりずっと少ない のです。
ここに、知っておくと得をする細部があります。古い .bib では大文字一文字だけを囲む title = {An Introduction to {L}a{T}e{X}} という書きかたをよく見かけますが、biblatex のマニュアルはこれを勧めていません。波括弧は囲んだ文字の両側でカーニングを殺す ため、字間が微妙に間延びするからです。同じ効果は {LaTeX} と語ごと囲めば得られ、しかも見た目が壊れません。もう一つ、保護の対象は「波括弧の内側」であって「制御綴の内側」ではありません。{\TeX book} のようにマクロごと包む必要があり、\TeX を裸で置くと保護は効きません。
% unprotected: plain.bst prints "A theory of dna and galois theory"
% protected: prints "A theory of DNA and Galois theory"
@article{protect2026,
author = {Doe, Jane},
title = {A Theory of {DNA} and {Galois} Theory},
journal = {J. Test},
year = {2026}
}
% brace the whole word, not single letters: {LaTeX}, not {L}a{T}e{X}
% wrap a macro together with its text: {\TeX book}@string の略記、@preamble、そして .bib のコメント
同じ値を何度も書くなら、@string で マクロ を定義できます。定義した名前は値の位置に波括弧なしで置き、# で他の文字列と連結します。誌名の略記と正式名を切り替えたいときの定番で、@string だけを集めた .bib を別ファイルにして \bibliography{strings,refs} のように先に読ませる運用がよく使われます。実はこの仕組みは、すでにあなたも使っています——標準スタイルは jan から dec までの月名をあらかじめ @string として持っており、だから month = jan は波括弧なしで書くのが正しく、month = {jan} と書くとマクロではなくただの文字列「jan」になってしまいます。
@string{bstj = {Bell System Technical Journal}}
@preamble{ "\newcommand{\noopsort}[1]{} " }
@article{shannon1948,
author = {Shannon, Claude E.},
title = {A Mathematical Theory of Communication},
journal = bstj # { (Supplement)},
month = jan,
year = {1948}
}
@comment{ everything in here is skipped, portably }@preamble は少し毛色が違い、その中身(たいていは LaTeX のマクロ定義)を .bbl の先頭にそのまま送り込みます。並べ替え用の \noopsort のような小道具をデータ側に持たせたいときに使います。コメントについては、有名な誤解を解いておきましょう——.bib では % はコメント記号ではありません。古典的な bibtex はエントリ(@…{})の外にある文字をすべて無視するので、% で始まる行は「無視される text」として通ってしまい、コメントとして機能しているように見えるだけです。危険なのは中身のほうで、フィールドの値に生の % を書くとそれが .bbl に流れ込み、今度は LaTeX の本物のコメント記号として行の残りを食べます。値の中では必ず \% と書いてください。
移植性の高い書きかたは @comment{ … } です。中身は完全に読み飛ばされ、biber でも安全です。というのも biber は古典 bibtex より厳格で、エントリの外に置かれた素のテキストに warning: 30 characters of junk seen at toplevel という警告を出すからです。エントリを一時的に無効にしたいだけなら、先頭の @ を一文字消すのが最短の方法です——@article{…} を article{…} にすれば、それはもうエントリではなく、ただの無視される文字列になります。
crossref で会議録の情報を一度だけ書く
crossref は、あるエントリに 足りないフィールドを別のエントリから継承させる 仕組みです。同じ会議録から五本の論文を引くとき、会議名・編者・出版年を五回書く必要はありません。親として @proceedings を一件置き、子の @inproceedings に crossref = {gg1988} と書けば、booktitle も editor も year も親から降りてきます。データの重複が消えるので、会議名の表記ゆれという厄介な事故もまとめて消えます。
@inproceedings{gneisser1988,
crossref = {gg1988},
author = {Gneisser, Rocky},
title = {No Gnats Are Taken for Granite},
pages = {133--139}
}
% the parent must appear LATER in the file than every entry citing it
@proceedings{gg1988,
editor = {Ford, Gerald and Carter, Jimmy},
title = {The Gnats and Gnus 1988 Proceedings},
booktitle = {The Gnats and Gnus 1988 Proceedings},
year = {1988}
}規則が三つあります。第一に、親は自分を参照するすべてのエントリより後ろに置く こと。だから crossref の親をファイル末尾にまとめる流儀が定着しました。第二に、親を明示的に \cite していなくても、二件以上の子から参照されていれば親自身が文献リストに現れます——一件しか参照していないと親は現れず、代わりに親のフィールドが子の中に埋め込まれて出ます。この閾値は bibtex --min-crossrefs=N で変えられます。第三に、crossref の入れ子は当てにならないので、親の親を作らないこと。biblatex にはこれとは別に xdata があり、親子関係を作らずにデータだけを継承させます。出版社と所在地の組み合わせのように、文献としては存在しないひとかたまりを共有したいときはこちらが素直です。
文献リストの並び順は誰が決めるのか
あなたではありません。そして、これは朗報です。リストに出る順番は .bib に書いた順とは完全に無関係で、決めているのは処理側です。古典的な BibTeX では、並び順をスタイル(.bst)が固定します。 利用者が指定できる余地はほとんどなく、スタイルを選ぶことがそのまま並びを選ぶことになります。plain と alpha は 著者名のアルファベット順、unsrt は 本文で最初に引用した順、ieeetr のような工学系スタイルも引用順です。同じデータのまま \bibliographystyle{plain} を \bibliographystyle{unsrt} に書き換えるだけで、リストの順番はそっくり入れ替わります。日本語文献の並べ替えは pbibtex/upbibtex が担当します(BibTeX のページを参照)。
biblatex はこの決定権を利用者に返します。 スタイルとは独立に \usepackage[sorting=nyt]{biblatex} と書くだけで並びが決まります。並べ替えキーは文字の組み合わせで表され、n が名前(name)、y が年(year)、t が表題(title)です。
| 指定 | キーの順 | 意味 |
|---|---|---|
nty | name → title → year | 名前・表題・年(biblatex の既定) |
nyt | name → year → title | 名前・年・表題(著者‑年式で好まれる) |
ynt | year → name → title | 年・名前・表題(時系列順) |
ydnt | year (降順) → name → title | 新しい年から古い年へ |
none | (並べ替えなし) | 本文で引用した順(unsrt 相当) |
まとめると、引用順のままにしたいなら BibTeX では unsrt スタイル、biblatex では sorting=none。アルファベット順なら BibTeX では plain、biblatex では既定の nty(著者‑年式なら nyt)です。どちらを選ぶにせよ、.bib のエントリを手で並べ替える必要は一切ありません。それは処理系の仕事であり、あなたの仕事は データを正確に書くこと だけです——正しい種類を選び、名前を四部構造に沿って書き、守るべき大文字を波括弧で囲む。この三つを守った .bib は、あなたが今書いている論文よりずっと長く生き残ります。