LaTeXの参考文献リストは、どの書き方でも部品が同じ 3 つです。文献レコードの集合(たいていは.bibファイル)、それを整形するプログラム(BibTeXかBiber)、そして結果を出力するコマンド。壊れた参考文献リストのほとんどは、どれか 1 つの中の間違いではなく、この 3 つの食い違いです。
.bibファイルを使う書き方は 2 つあります。どちらを選ぶか、そしてリストを実際に出現させるコンパイル順をまとめます。最後に、.bibを使わない 3 つ目の道も置きます。
2 つの経路と、どちらを選ぶか
| 経路 1: BibTeX | 経路 2: biblatex + Biber | |
|---|---|---|
| 文献データの読み込み | \bibliography{refs}(拡張子なし) |
\addbibresource{refs.bib}(拡張子あり) |
| リストの出力 | 同じコマンドが兼ねる | \printbibliography |
| スタイルの指定 | \bibliographystyle{plain} — .bstファイル |
パッケージのオプションstyle=authoryear |
| 整形プログラム | bibtex |
biber |
出版社からクラスファイルや.bstを渡されているなら経路 1です。IEEEtran、acmart、elsarticle、たいていの学会テンプレートがこれにあたります。IEEEtranとelsarticleはBibTeX用のスタイルしか配布していません。acmartはbiblatex用のスタイルも同梱していますが、acmart自身のマニュアルがそれを実験的な機能と呼び、ACMの製版システムTAPSは受け付けないと書いています。テンプレートに逆らうと手間のほうが大きくなります。
自分で選べるなら経路 2。スタイルが探し回るファイルではなくパッケージのオプションになり、非ASCIIの著者名も正しく並び、1 つのソースから複数の参考文献リスト(章ごと、一次資料だけ、など)を出せます。
.bibファイルはどちらの経路でも同じものが使えますが、コマンドは混ぜないこと。\bibliographystyleは経路 1 のもので、\printbibliographyは経路 2 のものです。
経路 1 — BibTeX、4 つのコマンド
ファイルは 2 つ。refs.bib:
@inproceedings{vaswani2017attention,
author = {Vaswani, Ashish and Shazeer, Noam and Parmar, Niki},
title = {Attention Is All You Need},
booktitle = {Advances in Neural Information Processing Systems},
year = {2017}
}
main.tex:
\documentclass{article}
\begin{document}
Attention-based models replaced recurrence for sequence transduction
\cite{vaswani2017attention}.
\bibliographystyle{plain}
\bibliography{refs} % refs.bib, written without the extension
\end{document}
そして、この順に実行します:
pdflatex main # main.aux を書く: \citation{...}, \bibdata{refs}, \bibstyle{plain}
bibtex main # main.aux を読み、refs.bib から引用された項目を抜き、main.bbl を書く
pdflatex main # main.bbl を取り込む。リストは出るが本文の番号はまだ [?]
pdflatex main # 番号が確定する
事故のほとんどは 2 点から起きます。2 つめのコマンドが取るのはジョブ名(main)であってmain.texでもrefsでもないこと——BibTeXは.auxファイルに対して走る別プログラムで、ソースを読むわけではありません。そして、そのあとLaTeXを
2 回走らせる必要があること。1 回目はBibTeXが生成したリストを取り込むため、
2 回目はそのリストが定義した番号を本文の引用に反映するためです。
latexmk -pdf main.texはこの連鎖をまとめて実行し、出力が変わらなくなるまで繰り返します。Overleafや各エディタのビルドボタンも中身は同じです。それでも一度は手で 4 つを打っておくとよい。ビルドボタンが失敗したとき本当に読むべきログはBibTeX自身のログ(main.blg)で、どのパスが出したものかを知っていると 1 時間分の遠回りが消えます。
参考文献リストが空になる理由
| 出ている症状 | 起きていること |
|---|---|
引用のところが[?] |
BibTeXのあとLaTeXを 2 回走らせていない |
| 参考文献リストがまるごと出ない | BibTeXを走らせていないか、違う名前に対して走らせた |
I found no \citation commands |
.auxに\citationが 1 つも無い。LaTeXパスが書き出す前に落ちたか、何も引用していない(.aux自体が無いときのメッセージはI couldn't open file name `main.aux') |
I couldn't open database file refs.bib |
BibTeXが探して見つけられなかった。パスか名前が違う |
refs.bibにはあるのに出力されない項目 |
それを引用している箇所が無い |
まっさらから通してもCitation undefined |
\citeのキーとエントリのキーが一致していない |
5 行目は単独で言う価値があります。BibTeXは引用したものしか出力しません。
200 件の.bibを持つ論文でも、引用が 12 件ならリストは 12 件です。ファイル全体を出したいとき——読書リストや注釈付き書誌——は、\bibliography{refs}の前に\nocite{*}を置きます。
引用コマンド — natbibの使い分け
素のLaTeXにあるのは\cite{key}の 1 つだけで、何が出るかはスタイル任せです。著者年方式にはこれでは足りません——同じ引用でも、ある場所では文の一部として、別の場所では括弧の中に置きたいからです。natbibはその区別を足します。
\usepackage[authoryear]{natbib} % [1] にしたいときは [numbers]
\bibliographystyle{plainnat} % natbib 対応の .bst であること
| コマンド | 出力 |
|---|---|
\citet{vaswani2017attention} |
Vaswani et al. (2017) |
\citep{vaswani2017attention} |
(Vaswani et al., 2017) |
\citep[see][p. 5]{key} |
(see Vaswani et al., 2017, p. 5) |
\citeauthor{key}と\citeyear{key} |
Vaswani et al. / 2017 |
\cite{key} |
スタイル依存。natbibでは使い分けを明示するほうがよい |
罠があります。著者年方式では、natbib非対応のスタイル(plain・abbrv・unsrt)は次の実行時にBibliography not compatible with author-year citationsを出し、文書全体を番号引用へ引き戻します。natbibには著者年の情報を出す.bstが要ります——
plainnat・abbrvnat・unsrtnat、または投稿先が配布しているnatbib対応スタイルです。
番号引用は指定すれば圧縮されます。\usepackage[numbers,sort&compress]{natbib}と書くと\cite{a,b,c,d}は[1, 2, 3, 4]ではなく[1–4]になります。
スタイルを選ぶ
.bst |
本文中 | リストの並び |
|---|---|---|
plain |
[1] |
著者名のアルファベット順 |
unsrt |
[1] |
最初に引用した順 |
abbrv |
[1] |
アルファベット順、名はイニシャル |
alpha |
著者 1 名なら[Vas17]、上の 3 名の項目なら[VSP17] |
アルファベット順 |
ieeetr |
[1] |
最初に引用した順 |
plainnat |
natbib経由で番号または著者年 | アルファベット順 |
abbrvnat |
同上。名はイニシャルになる | アルファベット順 |
投稿先が.bstを配布しているならそれを使い、この表は忘れてよい。「APA 7th」のように文章でスタイル名だけ指定されている場合は、合致するBibTeXスタイルを探すよりbiblatexのstyle=apa(biblatex-apaパッケージ。第 7 版に追随し、Biberが必須)のほうがたいてい楽です。
経路 2 — biblatexとBiber
\documentclass{article}
\usepackage[style=authoryear, backend=biber]{biblatex}
\addbibresource{refs.bib} % \bibliography と違い拡張子を付ける
\begin{document}
\textcite{vaswani2017attention} replaced recurrence with attention, and the
result has been reproduced widely \parencite{vaswani2017attention}.
\printbibliography
\end{document}
pdflatex main
biber main # bibtex ではない
pdflatex main
pdflatex main
形は同じで、2 つめのコマンドだけが違います。引用コマンドもきれいに対応していて、\textciteがnatbibの\citet、\parenciteが\citep、\footciteは脚注に置きます。文書全体を番号方式から著者年方式へ変えるのはオプション 1 つ——style=numericをstyle=authoryearにして再コンパイル。経路 1 では別の.bstファイルになり、しばしば別パッケージにもなる作業です。
すぐ欲しくなるオプションが 2 つ。\printbibliography[title={References}, heading=bibintoc]は見出しを変えて目次にも載せ、\printbibliography[keyword=primary]は絞り込んだ部分集合だけを出力します。この絞り込みに見合うBibTeX側の代替はありません。
経路 3 — .bibを使わない
参考文献が 5 件のレポートなら、この仕組み一式は省けます。
\begin{thebibliography}{9}
\bibitem{vaswani2017attention}
A. Vaswani, N. Shazeer, and N. Parmar.
\newblock Attention Is All You Need.
\newblock In {\em Advances in Neural Information Processing Systems}, 2017.
\end{thebibliography}
\cite{vaswani2017attention}はこれまでどおり動き、走らせる別プログラムもありません——LaTeXを 2 回で終わりです。引き換えに、各項目の書式は自分で整え、並べ替えは効かず、スタイル変更はリストの書き直しになります。知っておくとよいのは、これがまさにBibTeXがmain.bblに生成しているものだということ。経路 1 と経路 3 は同じ構造を作っていて、違いはプログラムが書くか自分が書くかだけです。
ローカルにTeXを入れずにやる
3 つの経路すべてで面倒なまま残るのは.bibファイルそのものです。1 件 1 件が誰かの手で打たれたレコードで、出版社のページからの書き出しは会場名が別のフィールドに入り、booktitleが欠け、著者名が崩れています。どんなスタイルファイルも、間違ったレコードは直しません。
Litlasはその側を担当します。エディタはブラウザ内でLaTeXをコンパイルし(pdfTeXのWebAssemblyビルドなので、ローカルのTeX環境を保守する必要がありません)、引用は打ち込むのではなく保存済みのライブラリから出てきます。ライブラリから論文を選ぶと、カーソル位置に\cite{key}が入り、同時にその論文のBibTeXエントリが文書側へマージされます。引用とエントリが食い違いようがない、ということです。参考文献の環境をあらかじめ用意しておく必要はありません。最初の引用がthebibliographyを作り、以後はそこへ足されていきます(IEEE・ACMのテンプレートは空の環境を最初から同梱しています)。本物の.bibのほうがよければ、プロジェクトに追加して\bibliography{refs}を使えます——同梱エンジンは各パスのあとに古典的なBibTeXを走らせ、参照が解決するまで(最大 4 パス)LaTeXを繰り返すので、上の 4 段階の連鎖がコンパイルボタン 1 つの裏で起きます。手元の.bibは貼り付けでもアップロードでも取り込めて、すでにある項目は重複させずに飛ばします。
原稿を移す前に知っておくべき制約があります。ブラウザ内のエンジンはBiberを実行できません。経路 2 の文書はコンパイル自体は通りますが、参考文献が解決しません。エディタはこの組み合わせを検知して、コンパイルできるthebibliographyへの 1 クリック変換を提案します。便利ではありますが、投稿先がbiblatexを要求するならその文書はローカルかサーバー側のフルTeXに置いたままにしてください。無料プランはカード登録なしでこの作業に使えます(上限はボード 3 個・保存 100 件・検索 1 日
5 回)。ドキュメントのリンク共有は無料で、共著者をメールアドレスで招待するのは有料機能です。
提出前の確認
main.aux・main.bbl・main.blgを消して、まっさらな状態から連鎖を通す。古い.bblは締め切りまで問題を隠します。- 出力PDFを
[?]とundefinedで検索する。 main.blgを読む。必須フィールドの欠落はここでは警告でありエラーではないので、年の入っていない参考文献のまま提出できてしまいます。- スタイルが投稿先の指定どおりか確認する——コピーしてきたテンプレートに付いていたもののままになっていないか。
