執筆

LaTeXの参考文献リストの作り方:BibTeX・biblatex・コンパイル順

LaTeXで.bibから参考文献リストを出す経路は 2 つあります。BibTeXと、biblatex+Biberです。動くコード片・引用コマンドの使い分け・natbibのスタイル指定、そしてリストが実際に出てくるコンパイル順(latex → bibtex のあと latex をもう 2 回)まで具体的にご紹介します。.bibを使わない書き方も最後にご紹介します。

この記事は AI を使って下書きし、公開前に人が内容を確認しています。

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 つです。1 つ目の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}
}

2 つ目の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 点から起きます。1 つ目は、2 つめのコマンドが取るのがジョブ名(main)であって、main.texでもrefsでもないことです。BibTeXは.auxファイルに対して動く別のプログラムで、ソースを読むわけではありません。2 つ目は、そのあと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{*}を置きます。各文献に要約と評価を添える課題であれば、リストを出す前に注釈付き参考文献の例と書き方で、注釈に必要な 4要素を確認してください。

引用コマンド: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は、この.bibファイルを整える部分を担当します。ブラウザ内でLaTeXをコンパイルでき、引用は自分で打ち込まずに保存済みのライブラリから挿入できます。ライブラリから論文を選ぶと、カーソル位置に\cite{key}が入り、同時にその論文のBibTeXエントリが文書側へマージされます。引用とエントリが食い違いようがない、ということです。参考文献の環境をあらかじめ用意しておく必要はありません。最初の引用がthebibliographyを作り、以後はそこへ足されていきます(IEEE・ACMのテンプレートは空の環境を最初から同梱しています)。自身で用意した.bibが使いたければ、プロジェクトに追加して\bibliography{refs}を使えます。同梱エンジンは各パスのあとに古典的なBibTeXを実行し、参照が解決するまで(最大 4 パス)LaTeXを繰り返すので、上の 4 段階の連鎖がコンパイルボタン 1 つの裏で起きます。手元の.bibは貼り付けでもアップロードでも取り込めて、すでにある項目は重複させずに飛ばします。

無料プランはカード登録なしで今すぐ使えます。

→いますぐLitlasを試す

提出前の確認

  1. main.aux・main.bbl・main.blgを削除して、まっさらな状態から一連のコマンドを実行します。古い.bblが残っていると、締め切りまで問題に気づけません。
  2. 出力したPDFを[?]とundefinedで検索します。
  3. main.blgを読みます。必須フィールドの欠落は、ここでは警告でありエラーではないため、年の入っていない参考文献のまま提出できてしまいます。
  4. スタイルが投稿先の指定どおりか確認します。コピーしてきたテンプレートに付いていたものが、そのまま残っていないかを見てください。

参考文献