一語だけ書き換えます。\usepackage の style=numeric を style=authoryear にすると、本文中のすべての引用と参考文献リストのすべての項目が、別の体裁で出てきます。この一語が biblatex とバックエンド biber を使う理由のほぼすべてです。古典的な BibTeX は体裁をスタック言語で書かれた .bst プログラムの中に閉じ込めていましたが、biblatex は体裁を LaTeX のマクロ側へ返し——読めますし、再定義できます——データの側、つまり読み込み・曖昧性の解消・並べ替えを biber に任せました。このページでは、動かすためのプリアンブル(\usepackage[backend=biber, style=…]{biblatex}、\addbibresource、\printbibliography)、latex → biber → latex → latex というビルド、引用命令 \autocite・\parencite・\textcite、そしてもっとも多い事故——エディタが bibtex を呼び続け、文献リストが空のままになる件——を扱います。
biblatex と biber の違い——どちらがパッケージで、どちらがプログラムか
biblatex は LaTeX のパッケージ、biber は外部プログラムです。 biblatex は引用と参考文献リストの見た目を受け持ち、biber は .bib を読み、相互参照を解決し、著者名の曖昧性を判定し、並べ替えて .bbl に書き出します。BibTeX ではこの二つが一つの .bst ファイルの中に同居していました——データ処理も体裁も、名前すら付いていない後置スタック言語で書かれていた、というのが BibTeX のページで見たとおりです。biblatex はこの層を切り離しました。パッケージ説明書の言葉を借りれば、体裁は「完全に TeX のマクロによって制御される」ようになり、新しいスタイルを設計するのに必要なのは LaTeX の知識だけになりました。
.bib(や他のデータ源)を解析して内部のデータモデルに載せるcrossref・エントリ集合・関連エントリを解決する- 同姓の著者や同一著者リストを区別するためのデータを生成する
- データモデルに照らしてエントリの構造を検証する
- 文献リストを並べ替える(複数のリストを別々の順序で並べることもできる)
- biblatex が読み込む
.bblを書き出す
バックエンドは backend= オプションで選べ、biber・bibtex・bibtex8 の三つが指定できます。既定値は biber です。三者の差はまず文字符号化に出ます。biblatex の説明書は、bibtex を「US-ASCII のみ、並べ替えは常に大文字小文字を区別しない」、bibtex8 を「US-ASCII と Latin-1 のような 8 ビット符号化」、biber を「US-ASCII、8 ビット符号化、UTF-8、その場での再符号化、ロケール固有の並べ替え」と説明しています。つまり bibtex を選んだ時点で非英語の文献リストは詰む ということで、ここが実務でもっとも効く差です。biber は Perl で書かれていますが、TeX Live や MacTeX には実行ファイルとして同梱されるので、Perl を入れる必要はありません。
名前も覚えておく価値があります。biblatex を書いたのは Philipp Lehman で、2006 年から 2012 年まで一人で育てました。2012 年に Philip Kime が引き継ぎ、2017 年からは Moritz Wemheuer が継続的に加わっています(引き継ぎの時期には Audrey Boruvka と Joseph Wright が手を貸しました)。説明書はいまも Lehman を著者に並べ、「彼の優れたコードの多くが中核に残っている」と明記しています。biber のほうは Philip Kime と François Charette の作で、biblatex 専用に設計されているため、単体で使うことはできません——.bst を渡しても動きません。bibtex が汎用の道具だったのに対し、biber は biblatex の一部品なのです。
最小構成——\usepackage{biblatex}・\addbibresource・\printbibliography
必要なのは三つの命令だけです。プリアンブルで \usepackage[backend=biber, style=…]{biblatex} を読み込み、同じくプリアンブルで \addbibresource{refs.bib} により文献データベースを登録し、リストを出したい位置に \printbibliography を置きます。引用は \autocite や \parencite などで行います。.bib ファイルそのものの書き方——@article などのエントリ型、引用鍵、フィールド——は BibTeX とまったく同じで、文献データベースのページで扱います。だからこそ移行は見た目ほど高くつきません。
\documentclass{article}
\usepackage[backend=biber, style=authoryear]{biblatex}
\addbibresource{refs.bib} % preamble only, and the .bib extension IS required
\begin{document}
\textcite{shannon1948} introduced the measure.
Later work built on it \autocite[see][45]{knuth1984}.
\printbibliography
\end{document}BibTeX から来た人が最初につまずくのは、この登録の書き方です。\addbibresource はプリアンブル専用で、本文末の \bibliography{refs} を置き換えます。そして .bib という拡張子を必ず書きます——\bibliography は拡張子を付けませんでしたが、\addbibresource は「完全なファイル名」を要求するので、\addbibresource{refs} と書くとファイルが見つかりません。複数回書けばデータベースを分割でき、biber をバックエンドにしていれば \addbibresource[glob]{bib/*.bib} のようなグロブや、http:// で始まる遠隔のファイルも渡せます。なお \bibliographystyle は biblatex では使いません——スタイルは \usepackage のオプションで決まるからです。
その style= は、実は二つのファイルを同時に読み込むマスターオプションです。style=authoryear は参考文献リスト用の authoryear.bbx と、引用用の authoryear.cbx を両方読みます。既定値は numeric。両者を食い違わせたいとき——たとえばリストは著者・年式で、引用は番号式で——だけ、bibstyle= と citestyle= を個別に指定します。ふだんは style= 一語で足ります。
ビルドが latex → biber → latex → latex になる理由
LaTeX は自分が何を引用したかを、一度走り終えるまで知らないからです。 一回目の実行で biblatex は、引用鍵と設定一式を .bcf という XML の制御ファイルに書き出します。biber はその .bcf を読み、.bib を突き合わせて処理し、.bbl を書きます。二回目の実行でその .bbl が取り込まれ、三回目で参照とページ番号が確定します。回数の理屈は BibTeX と同じですが、呼ぶプログラムが bibtex ではなく biber で、しかも渡すのは .tex ではなく 拡張子なしのジョブ名 です。pdflatex や lualatex を使う場合も、latex の部分を置き換えるだけで構造は変わりません。
$ pdflatex document.tex # 1st pass: writes document.bcf with the cited keys
$ biber document # NOT bibtex, and no .tex extension: reads .bcf, writes .bbl
$ pdflatex document.tex # 2nd pass: pulls the .bbl in
$ pdflatex document.tex # 3rd pass: settles cross-references and page numbersここで起きる事故がほぼ一つに集中します。エディタや latexmk の設定が bibtex を呼んだままになっている 場合です。biblatex は \citation も \bibdata も \bibstyle も .aux に書かないので、bibtex document を走らせると三行そろって次のように出ます。I found no \citation commands---while reading file document.aux、I found no \bibdata command---while reading file document.aux、I found no \bibstyle command---while reading file document.aux。.bbl は作られず、LaTeX 側は LaTeX Warning: Empty bibliography と LaTeX Warning: Citation 'knuth1984' on page 1 undefined を出し、Package biblatex Warning: Please (re)run Biber on the file: と続けます。この最後の一行が答えそのもの です。bibtex の代わりに biber を走らせてください。
$ latexmk -pdf document.tex # detects biblatex in the .fls/.bcf and runs biber itself四回を手で打つのは現実的ではないので、実務では latexmk に任せます。近年の版は biblatex を検出して自動的に biber を呼び、必要な回数だけ反復してくれます。エディタから使う場合は、TeXShop なら「LaTeXmk」系のエンジンを、VS Code の LaTeX Workshop なら latexmk を使うレシピを選ぶのがいちばん確実です。Overleaf は biblatex を検出して自動で biber を走らせます。手で組んだビルドスクリプトが残っている環境だけ、bibtex の行を biber に書き換えてください。
is wrong format version——biber と biblatex はバージョンが対で決まる
biber と biblatex は、対応するバージョン同士でしか動きません。 biber の説明書には両者の対応表が載っていて、biber 2.7/biblatex 3.7 以降はマイナー番号が完全に歩調を合わせています——TeX Live 2024 が積んでいるのは biber 2.19 と biblatex 3.19 です。これが効いてくるのは、パッケージ管理から biblatex だけを更新したときや、Homebrew などで入れた別の biber が PATH の先に居座っているときで、症状は Package biblatex Warning: File 'document.bbl' is wrong format version - expected … という警告と、古いままの文献リストです。直し方は単純で、biber と biblatex を同じ配布から同時に更新し、document.bbl を消してから組み直します。biber --version と、ログの先頭に出る biblatex のバージョンを見比べれば、ずれているかどうかはすぐ分かります。
style=numeric と style=authoryear——一語でスタイルを切り替える
style= に別の名前を書けば、引用も参考文献リストも一斉に変わります。biblatex に同梱されている汎用スタイルは五系統——numeric・alphabetic・authoryear・authortitle・verbose——で、それぞれに変種があります。おもしろいのは、スタイルが読み込み時に autocite= の既定値まで自分で決める ことです。numeric・alphabetic・authoryear は autocite=inline を、authortitle と verbose は autocite=footnote を設定します。つまり本文中に引用を置く分野向けか、脚注に出典を落とす分野向けかという想定が、スタイルの側に組み込まれています。
| style= | 引用の見え方 | 設計上の想定 |
|---|---|---|
numeric | [1] | 既定値。LaTeX 標準の番号式に相当し、autocite=inline を設定します |
numeric-comp | [1--3, 7, 8] | 連続する番号を範囲にまとめます。[8, 3, 1, 7, 2] が [1--3, 7, 8] になります |
alphabetic | [Jon95] / [JW86] | BibTeX の alpha.bst 相当。著者名と年から短い符号を作ります |
authoryear | Doe 1995a | 同じ著者・同じ年が並ぶと a, b… を付けて区別します |
authoryear-comp | Doe 1992, 1995a,b | 同一命令に渡した文献の著者が同じなら、著者名を一度だけ出します |
authortitle | Doe, Short title | 年を前面に出さず、shorttitle があればそれを使います。autocite=footnote |
verbose | 初出は完全な書誌、以降は短縮形 | 脚注に出典を書き切るため、文献リストなしでも成立します |
投稿先が体裁を指定してくる場合は、分野別・国別のスタイルパッケージを探すのが早道です。TeX Live には工学の biblatex-ieee、心理学ほかの biblatex-apa、人文系の biblatex-chicago と biblatex-mla、自然科学の biblatex-nature と biblatex-science、英国法の oscola、そして国家規格に沿ったものとして中国の biblatex-gb7714-2015(GB/T 7714—2015)、ロシアの biblatex-gost、ブラジルの biblatex-abnt、ドイツ人文系向けの biblatex-dw などが入っています。日本語の学会誌はいまも .bst を配ることが多く、その場合は素直に BibTeX 側に留まるのが現実的です——判断の分かれ目は BibTeX のページにまとめてあります。
\autocite と \parencite と \textcite の使い分け
文の一部として著者名を読ませたいなら \textcite、文の外に注として置くなら \parencite、そしてどちらかをスタイルに決めさせたいなら \autocite です。 この三択の文法的な理由——「Knuth (1986) が示した」と「……である (Knuth, 1986)」は別の文法的対象だという話——は引用の基本で詳しく扱っているので、ここでは biblatex 側の作りを見ます。すべての引用命令は \parencite[前注][後注]{鍵} の形をとり、鍵はカンマ区切りで複数渡せます。後注だけを付けたいときは \parencite[45]{knuth1984}、前注も付けるなら \parencite[see][45]{knuth1984} です。
| 命令 | 出るもの | 選ぶ場面 |
|---|---|---|
\cite | 付加のない素のラベル | 括弧も脚注も要らず、地の文にそのまま溶かしたいとき |
\parencite | 全体を丸括弧に入れる(番号式・英数字式では角括弧) | 文末に注として置く、いちばん多い形 |
\textcite | 著者名+括弧に入った年やラベル(Doe 1995 → Doe (1995)) | 著者名を主語などの文の成分として読ませるとき |
\footcite | 引用全体を脚注に落とし、末尾に終止符を打つ | 出典を脚注で示す分野の体裁 |
\autocite | autocite= の設定に応じて上のどれかに化ける | 文書全体の引用の出し方を一括で切り替えたいとき |
\citeauthor | 著者名だけ | 年や番号を伴わずに人名だけを本文で挙げるとき |
\citeyear | 発行年だけ | 直前で著者名を書いてしまった後の補足に |
\autocite は他の命令より一段抽象度が高く、\usepackage の autocite= オプションで実体が決まります。取れる値は plain(\cite 相当)・inline(\parencite 相当)・footnote(\footcite 相当)・superscript(上付き)です。しかも \autocite は句読点を「読む」だけでなく 動かします——autocite=footnote のとき、直後の句読点は脚注番号より前に移されます。文中に「……である\autocite{key}。」と書けば、脚注番号は句点の後に出る、ということです。この一手間があるおかげで、本文の引用体裁を脚注体裁へ一括で切り替えても、句読点を打ち直さずに済みます。
複数の文献をそれぞれ別の後注付きで一度に引きたい場合は、末尾に s の付いた multicite 版があります。\parencites[35]{key1}[88--120]{key2}{key3} のように書けば、括弧はひとつのまま、文献ごとにページ範囲を添えられます。\autocites や \footcites も同じ形です。なお BibTeX 時代の natbib に指が慣れているなら、\usepackage[natbib=true]{biblatex} を書けば \citep・\citet などが別名として使えるようになります——移行期の橋渡しとしては便利ですが、新しく書く文書では biblatex 本来の命令に寄せたほうが、スタイルを差し替えたときの挙動が読みやすくなります。
sorting= と sortlocale=——非英語の文献リストを正しい順に並べる
並び順は sorting= で決めます。既定は nty——name, title, year の頭文字です。ほかに nyt(名前・年・タイトル)、ynt(年・名前・タイトル)、ydnt(年の降順)、そして none(並べ替えず引用順のまま)などがあり、.bib に手を触れずに切り替えられます。BibTeX ではこの選択肢は .bst の中に埋まっていて、plain と unsrt と alpha のどれかを選ぶ、という形でしか触れませんでした。
そのうえで、同じ文字列でも「正しい順序」は言語によって違います。biber はここを Perl の Unicode::Collate モジュールに委ね、Unicode 照合アルゴリズム(UCA)を完全実装したうえで、CLDR のロケール別調整を重ねます。試すとすぐ分かります。ドイツ語で sortlocale=de_DE にすると Mohr → Möller → Muster の順ですが、電話帳式の sortlocale=de_DE_phonebook にすると ö が oe として扱われ、Möller → Mohr → Muster に変わります。スペイン語ではもっと劇的で、伝統的綴字の sortlocale=es_ES_trad は ch を独立した一文字と見なすため、Chávez が Cortázar の 後ろ に来ます(現代式の es_ES では Cela → Chávez → Cortázar)。biber の説明書はこの点をわざわざ注意していて、babel の spanish は現代式 es_ES に対応づけられるので、伝統的な順序が要るなら es_ES_trad と明示せよ、と書いています。
\usepackage[
backend=biber,
style=authoryear,
sorting=nyt, % name, year, title
sortlocale=de_DE_phonebook, % locale tailoring: umlauts sort as oe/ue/ae
maxbibnames=99, % list every author in the bibliography
maxcitenames=2, % but shorten to "et al." inside citations
backref=true % back-links from each entry to its citations
]{biblatex}照合アルゴリズムに渡せるのは、結局のところ 与えられた文字だけ です。ここが日本語・中国語・韓国語で効いてきます。sortlocale=ja_JP を指定すれば日本語向けの調整は当たりますが、漢字には読みが付いていないので、五十音順やピンイン順を期待するとずれます。読みで並べたいなら、読みそのものをデータに入れるしかありません——名前の読みを sortname に、任意の並べ替え鍵を sortkey に書きます。sortkey は biblatex の説明書が「マスターソートキー」と呼ぶもので、これがあると presort を除く他のすべてを無視して並べ替えます。並び順の細部でどうしても言うことを聞かない一件があるときは、この最終手段が効きます。
同じ \usepackage の行で、著者名の切り詰め方も決められます。maxnames が既定 3、minnames が既定 1 で、maxbibnames と maxcitenames は指定しなければ maxnames の値をそのまま受け継ぎます。つまり maxnames が親、あとの二つが子です。実務でよく使う設定は上のコード例のとおりで、参考文献リストでは全員を出し(maxbibnames=99)、本文の引用では二人で「et al.」に切る(maxcitenames=2) という組み合わせ。これは maxnames 一つでは表現できません。backref=true を足すと、各文献の末尾に「本文の何ページで引用されたか」が入ります——長い論文の校正でこれが効きます。
文献リストを分割する——\printbibliography[type=…] と keyword=
\printbibliography は何度でも書け、そのたびに絞り込みを変えられます。使える鍵は type=(そのエントリ型だけ)、nottype=(それを除く)、keyword= と notkeyword=(.bib の keywords フィールドで絞る)、category= と notcategory=(\DeclareBibliographyCategory で定義した分類)、それに見出しを決める heading= と title= です。一次資料と二次文献を分ける、書籍と論文を分ける、といった編集は データに一切手を触れずに できます。もっと込み入った条件が要るなら \defbibfilter で自前の絞り込みを定義できますし、言語ごとにリストを分けたいときもこの道具立てを使います——langid フィールドは訳語やハイフネーションの切り替えのためのもので、それ自体はリストを割ってくれません。
\printbibliography[type=article, title={Journal articles}]
\printbibliography[type=book, title={Books}]
\printbibliography[keyword=primary, title={Primary sources}]
\printbibliography[nottype=misc, heading=bibintoc, title={Everything else}]まとめると、判断は二段階です。投稿先が .bst を配ってくるなら BibTeX に留まり、体裁を自分で決められるなら biblatex と biber に移る。 移ったあとにやることは三つだけで、プリアンブルに \usepackage[backend=biber, style=…]{biblatex} と \addbibresource{refs.bib} を書き、\printbibliography を置き、ビルドで bibtex の代わりに biber を呼ぶ——あるいは latexmk に任せる。.bib ファイルは共通なので、資産はそのまま持っていけます。そして体裁の変更が .bst の書き換えではなく \usepackage の一語になった、というのが、四十年ぶりに変わった部分です。