biber / biblatex

一語だけ書き換えます。\usepackagestyle=numericstyle=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= オプションで選べ、biberbibtexbibtex8 の三つが指定できます。既定値は 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 とまったく同じで、文献データベースのページで扱います。だからこそ移行は見た目ほど高くつきません。

document.tex
\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 ではなく 拡張子なしのジョブ名 です。pdflatexlualatex を使う場合も、latex の部分を置き換えるだけで構造は変わりません。

terminal
$ 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.auxI found no \bibdata command---while reading file document.auxI found no \bibstyle command---while reading file document.aux.bbl は作られず、LaTeX 側は LaTeX Warning: Empty bibliographyLaTeX Warning: Citation 'knuth1984' on page 1 undefined を出し、Package biblatex Warning: Please (re)run Biber on the file: と続けます。この最後の一行が答えそのもの です。bibtex の代わりに biber を走らせてください。

terminal
$ 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=numericstyle=authoryear——一語でスタイルを切り替える

style= に別の名前を書けば、引用も参考文献リストも一斉に変わります。biblatex に同梱されている汎用スタイルは五系統——numericalphabeticauthoryearauthortitleverbose——で、それぞれに変種があります。おもしろいのは、スタイルが読み込み時に autocite= の既定値まで自分で決める ことです。numericalphabeticauthoryearautocite=inline を、authortitleverboseautocite=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 相当。著者名と年から短い符号を作ります
authoryearDoe 1995a同じ著者・同じ年が並ぶと a, b… を付けて区別します
authoryear-compDoe 1992, 1995a,b同一命令に渡した文献の著者が同じなら、著者名を一度だけ出します
authortitleDoe, Short title年を前面に出さず、shorttitle があればそれを使います。autocite=footnote
verbose初出は完全な書誌、以降は短縮形脚注に出典を書き切るため、文献リストなしでも成立します

投稿先が体裁を指定してくる場合は、分野別・国別のスタイルパッケージを探すのが早道です。TeX Live には工学の biblatex-ieee、心理学ほかの biblatex-apa、人文系の biblatex-chicagobiblatex-mla、自然科学の biblatex-naturebiblatex-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引用全体を脚注に落とし、末尾に終止符を打つ出典を脚注で示す分野の体裁
\autociteautocite= の設定に応じて上のどれかに化ける文書全体の引用の出し方を一括で切り替えたいとき
\citeauthor著者名だけ年や番号を伴わずに人名だけを本文で挙げるとき
\citeyear発行年だけ直前で著者名を書いてしまった後の補足に

\autocite は他の命令より一段抽象度が高く、\usepackageautocite= オプションで実体が決まります。取れる値は 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 の中に埋まっていて、plainunsrtalpha のどれかを選ぶ、という形でしか触れませんでした。

そのうえで、同じ文字列でも「正しい順序」は言語によって違います。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 と明示せよ、と書いています。

preamble
\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 で、maxbibnamesmaxcitenames は指定しなければ maxnames の値をそのまま受け継ぎます。つまり maxnames が親、あとの二つが子です。実務でよく使う設定は上のコード例のとおりで、参考文献リストでは全員を出し(maxbibnames=99)、本文の引用では二人で「et al.」に切る(maxcitenames=2 という組み合わせ。これは maxnames 一つでは表現できません。backref=true を足すと、各文献の末尾に「本文の何ページで引用されたか」が入ります——長い論文の校正でこれが効きます。

文献リストを分割する——\printbibliography[type=…]keyword=

\printbibliography は何度でも書け、そのたびに絞り込みを変えられます。使える鍵は type=(そのエントリ型だけ)、nottype=(それを除く)、keyword=notkeyword=.bibkeywords フィールドで絞る)、category=notcategory=\DeclareBibliographyCategory で定義した分類)、それに見出しを決める heading=title= です。一次資料と二次文献を分ける、書籍と論文を分ける、といった編集は データに一切手を触れずに できます。もっと込み入った条件が要るなら \defbibfilter で自前の絞り込みを定義できますし、言語ごとにリストを分けたいときもこの道具立てを使います——langid フィールドは訳語やハイフネーションの切り替えのためのもので、それ自体はリストを割ってくれません。

document.tex
\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 の一語になった、というのが、四十年ぶりに変わった部分です。