Skip to content

Instantly share code, notes, and snippets.

@Yarakashi-Kikohshi
Last active June 11, 2024 10:27
Show Gist options
  • Save Yarakashi-Kikohshi/986bb23547866e32c8916b81099a470a to your computer and use it in GitHub Desktop.
Save Yarakashi-Kikohshi/986bb23547866e32c8916b81099a470a to your computer and use it in GitHub Desktop.
初心者のためのBibTeX とは

About BibTeX for Beginner

LaTeX 初心者やBibTeX 初心者がBibTeX とは何かを調べてみると非常にさまざまな記事を見つけられるが,さまざまな記事にバラバラとして煩雑で分かりづらいように思われる.また,実用的な内容は多いが概要を得るような記事は少ないと思われる.

以下のような項目をまとめた.

Outline TOC

LaTeX に基本的な部分は実用的に記述し,パッケージなどはそれほど深くは掘らずにどのようなことが出来るか紹介するに留めた. ただし,比較検証することは行っていないため,どのような方法を用いてBibTeX を利用するかは個人に委ねることになる.

: 記事構成としてのストーリー性を気にして作成していません.そのため,気になる項目をかいつまんで読むと良いと思われます.

Detail TOC (折りたたみ)

What is BibTeX?

BibTeX : 文献の諸情報を記載したbib ファイルから自動的に文献リストを出力するプログラム

文献リストを作成するにはthebibliography 環境を利用して手作業で作成することが出来る. しかし,文献リストのフォーマットや順序などを考えながら行うには煩雑な作業となる.文献引用が多くなればなるほど面倒な作業になる. これをBibTeX によって自動化させている.

How to COMPILE LaTeX and BibTeX?

タイプセットは以下のように複数回必要になる. latexbibtex では適宜利用したいエンジンに変更のこと.

$ latex hoge.tex
$ bibtex hoge.aux
$ latex hoge.tex
$ latex hoge.tex

この手の複数回のタイプセットはlatexmk やllmk を利用すると簡単に行うことが出来るようになるだろう.

BibTeX では以下のような処理が行われているようだ.

Search `Citation_key` in .aux file
  ↓
Search cited `Citation_key` in .bib file
  ↓
Output .bbl file with formatted bibliography

cf.

$ bibtex -help
Usage: bibtex [OPTION]... AUXFILE[.aux]
  Write bibliography for entries in AUXFILE to AUXFILE.bbl,
  along with a log file AUXFILE.blg.

Type of BibTeX

BibTeX にはいくつかのバリエーションがある.

Program Description
BibTeX 基本的なBibTeX
(u)pBibTeX 和文用BibTeX
upBibTeX はUnicode 対応
biber 完全なUnicode を提供
BibLaTeX パッケージと連携して利用

まれにjBibTeX という記述のあるものがあるが,pBibTeX の旧名でありpBibTeX と同じものになっている.また,texdoc ではpbibtex では検索できず,jbibtex で検索する必要がある. (pbibtex でもjbibtex と同じものが出るようになってほしい)

jbibtex.pdf [PDF]

英語文献のみであればBibTeX で十分となるだろう.日本語文献を含む場合には(u)pBibTeX を利用することになるだろう. biber はBibLaTeX を利用することを前提にしているため,単独で利用するものではないと思われる. BibLaTeX に関しては# この節で少し取り上げておいた.

BibTeX に関するドキュメントをtexdoc で検索する場合には$ texdoc btxdoc とする.これの日本語訳は$ texdoc jbtxdoc とする.このドキュメントにはpBibTeX に関する情報も含まれている.

また,TeXLive でローカルには保存されていないようだが,以下のようなtips とFAQ に関するドキュメントがCTAN にあった.

BibTeX Tips and FAQ ::btxFAQ.pdf [PDF]

Extensions around BibTeX

BibTeX 関連のファイル拡張子を確認しておきたい.

Extension Description
.bib 文献情報が記載されたファイル
著者が用意する
.bst BibTeX のためのスタイルファイル
.bbl BibTeX によって得られる成果物
中身はthebibliography 環境
LaTeX エンジンはこのファイルを読み込む
.blg BibTeX エンジンのログファイル
(Windows のバイナリパフォーマンスログファイルではなく,ただのテキストファイル)

.bib については# この節で,.bst については# この節で詳しく取り扱う.

.bbl については詳しく取り扱わないが,thebibliography 環境については# この節で編集方法を少しだけみる.

blg file

Windows ではblg ファイルはWindows Binary Performance Log Format ファイルと認識される.このように解釈されるのは少し厄介な感じがする.

拡張子を適当に変更しておいても良いように思われる.

.blg → .bibtex.log

ちなみに,以下のようにren コマンドから拡張子を書き変えることが出来る.

$ ren *.blg *.bibtex.log

Bibliography style files

bst ファイルによって文献リストのスタイルを決めることが出来る. 代表的なスタイルには以下のようなものがある.(もう少し詳細に説明を入れてみたい)

bst file Short description
plain 標準 (著者のアルファベット順)
unsrt 本文で引用した順に並べる
alpha 文献リストの番号がauthor-year
abbrv 省略 (abbreviated)
acm ACM スタイル
apalike APA 風スタイル
ieeetr IEEE Transactions スタイル
siam SIAM スタイル

代表的なbst によるスタイルの違いは以下のページで具体例を見ることが出来る.

この他にもCTAN では次のようなスタイルが集録されているようだ.

CTAN: BibTeX Style

これに加えて日本語文献の(u)pBibTeX ではjplain, junsrt, jalpha, jabbrv のスタイルが利用できる.

また,英語文献による基本形は上の通りになるが,日本語と英語が混じった文献リストの作成には精力的にbst ファイルを編集することが多くなされているようだ.ただし,これもかなり面倒らしい.
代表的によく見られるのは経済学用に開発されているjecon.bst (japanese economics) になる.経済学用ではあるが,自作するよりは簡便に日英混合の文献リスト作成が出来るだろう.

経済学におけるBibTeXの利用 - Qiita

License: The LaTeX Project Public License, either version 1.3

あるいは,IEEEtr を日本語にも対応させることを目標としたjIEEEtran.bst を見つけることも出来た.

日本語と英語の共存するbibtexのスタイルファイルを作る - Qiita

ehki/jIEEEtran: bibtex style file for containing both Japanese and English references - GitHub

License: MIT

どちらのリポジトリにもPDF でマニュアルが作成してあったので,これを確認すれば問題なく利用できるだろう.

これらが気に入らない場合にはbiber+BibLaTeX を利用するかbst ファイルを自作編集することになる.(あるいは,TeX/LaTeX のマクロを編集することになる)

biber+BibLaTeX であれば,bst ファイルを編集するよりも簡便に文献リストを作成することが出来るだろう. かなり細かく設定できるようなので,マニュアルを参照しながら試してみると良い.

本当は言語ごとに文献リストを作成した方が良いのかもしれない.(LaTeX としてはこの方が格段に楽になると思われる)

Edit bst files

もしもbst ファイルを自作しようとするパワーのある人は以下のようなツールを利用するのも良いかもしれない.

custom-bib | CTAN

しかし,custom-bib を取り扱った記事は少ないようだ.むしろbst ファイルの書き方の記事の方が多い.以下のようにして検索すれば,いくらでもbst の文法などを調べることが出来るだろう.

bst カスタマイズ

しかし,これらの記事をざっと見ているとリファレンスとなるような記事がないことが多い.bst ファイルの文法は一子相伝か何かのたぐいだと思われる.

リファレンスはtexdoc でbtxhak あるいはjbtxhak とすると以下のようなドキュメントを見ることが出来る.とりあえずはこれを参照すればbst ファイルを編集することが出来るようになるだろう.

これらのドキュメントはbtxdoc.pdf の続きの体裁を採っている.続きにはなっているものの,bst 文法を知りたいのみであればこのドキュメントのみで満足できるようだ.

bst ファイルを作成した場合は,$ kpsewhich -var-value BSTINPUT で保存ディレクトリを確認し,保存後にmktexlsr すれば良い.

Citation style

bst ファイルはあくまでthebibliography 環境内のみのスタイルを決定するものであり,\cite のスタイルを決めるものではないことに注意が必要になる. \cite のスタイルの変更にはnatbib を利用することが良く知られている.

natbib を利用する場合にはnatbib のためのbst ファイルもある
\cite に関してもさまざまなコマンドを提供する

natbib よりは少ないが,これを採用している記事も見受けられた

あるいは同様のパッケージにあたるjurabib もあるようだ.

これを取り扱う記事は極端に少ない

How to EDIT Bib files?

bib ファイルについての基本的な記述方法を確認しておきたい. 1つの文献はbib ファイル内で以下のような形式で記述される.

@EntryType{Citation_key,
  Fields = {Contents_of_fields},
}

本記事ではbib ファイル内の要素を以下の4つの名前を利用していく.(さまざまな呼び方があり一般的な呼び名が分からなかった)

Contents Example elements Description
EntryType article, book ...etc 文献の形式
Citation_key Any key name \cite で文献参照する際の参照キー
Fields title, author, year ...etc 文献の諸情報を記載
Contents_of_fields - タイトルや著者名など

FieldsContents_of_fields からなるkey-value については以下のような記法を満たす必要がある.

  • Fields 名は大文字小文字を問わない (EntryType も同様)
  • Fields 要素を同不順に列挙可能
  • = の後に続けてContents_of_fields{} または" で囲う
  • 行末尾には, を付ける
  • EntryType ごとに必須のFields がある (これらが揃っていないとエラーになる)
    • Fields には"required"(必須), "optional"(オプション), "ignored"(無視) の3種類がある
    • これらのFields はBibTeX エンジンやbst ファイルによって異なる

コメントアウトするには@ を取り除けば良い.引用文献全体をコメントアウト出来るが,Fields のそれぞれをコメントアウトすることは出来ないようだ.

EntryType{Citation_key,
  Fields = {Contents_of_fields},
}

% でコメントアウトは出来ないので注意が必要.

Where to SAVE bib files?

bib ファイルはカレントディレクトリまたは適切なディレクトリに保存する必要がある.

Git で管理することや共同編集などがあること思えばカレントディレクトリに保存することがオススメである../bib に保存して\bibliography{./bib/hoge} などとすれば良い.

適切なディレクトリはkpsewhich で探すことが出来る.(pbibtex の場合はBIBINPUTS.pbibtex とする)

$ kpsewhich -var-value BIBINPUTS

すなわち,以下のディレクトリに保存すれば良い.(!! から始まるパスはデフォルトでは無視される)

C:/Users/<user_name>/.texlive20**/texmf-config/bibtex/bib//
C:/Users/<user_name>/.texlive20**/texmf-var/bibtex/bib//
C:/Users/<user_name>/texmf/bibtex/bib//

これらのディレクトリに保存した際にはmktexlsr を実行する必要がある.

# この節でBibliography の挿入方法を紹介している.

Example of Bib file

乾燥したパスタを2つに割る方法について示した「Controlling fracture cascades through twisting and quenching」のBibTeX ソースを示しておく.

cf. 1802.05402 | arXiv

arXiv のExport Bibtex Citation からBibTeX ソースを出力することが出来る.これを適当にフォーマットした.

@article{Heisser_2018,
  title     = {Controlling fracture cascades through twisting and quenching},
  author    = {Heisser, Ronald H. and Patil, Vishal P. and Stoop, Norbert and Villermaux, Emmanuel and Dunkel, Jörn},
  year      = {2018},
  journal   = {Proceedings of the National Academy of Sciences},
  publisher = {Proceedings of the National Academy of Sciences},
  doi       = {10.1073/pnas.1802831115},
  issn      = {1091-6490},
  month     = {Aug},
  number    = {35},
  pages     = {8665–8670},
  url       = {http://dx.doi.org/10.1073/pnas.1802831115},
  volume    = {115},
}

BibTeX やパッケージから提供されるフィードもあるため,arXiv やGoogle Scholar,文献管理ツールなどの出力のみではないことに注意したい.

例えば,日本語文献で(u)pBibTeX を利用する場合にはyomi フィールドによって読み仮名を与えることが出来る. あるいは,BibLaTeX ではlanguage フィールドによって文献言語情報を与えることが出来る.

また,# Some tips にあるような修正を適宜加える必要もあるだろう.

Some tips

bib ファイルの作成に関していくつかのtips を挙げておきたい. おそらくこの他にもさまざまなtips があるが,知っているのはこれくらいだった.

本当は以下のドキュメントを参照した方が確実だと思われる.

BibTeX Tips and FAQ ::btxFAQ.pdf [PDF]

LaTeX Commands

bib ファイルは最終的にLaTeX が読むので,\LaTeX\emph などのLaTeX のコマンドは利用することが出来る.

また,\"o などは{\"o} としておくべきのようだ.

Uppercases

BibTeX は賢いのかどうかよく分からないが先頭の単語の頭文字のみを大文字にして,それ以降の単語は小文字に変換する.したがって,以下のようなタイトルの文献があった場合,上手く大文字を処理することが出来ない.

@example{
  title = {An Exmample Title}
}

そのため,以下のように書き直す必要がある.

@example{
  title = {An {Exmample} {Title}}
}
@example{
  title = "An {Exmample} {Title}"
}

Author field

連名の場合,␣and␣ で続ける.(u)pBibTeX では または で区切る.

URL

URL には~ などの特殊文字が含まれることがあるため,そのままの状態にしておくと上手く出力できないことがある.

これを解決するためにurl パッケージまたはhyperref パッケージから\url コマンドを利用すると良い.

% at preamble in latex documets
\usepackage{hyperref}
% or
% \usepackage{url}

BibTeX では以下のように\url で囲んでおく.

@example{
  url = {\url{https://www.example.org}}
}
@exmaple{
  url = "\url{https://www.example.org}"
}

これらのパッケージを利用するとハイパーリンクが作成されるが,これを嫌う場合には\verb を利用すれば良いと思われる.

How to INSERT Bibliography list?

手作業ならthebibliography 環境でゴリゴリ書いていくことになるが,BibTeX を使えば文献リストを挿入したいところで以下のようにすれば良いだけ.

\bibliography{hoge.bib}
\bibliographystyle{foo} % .bst file

bib ファイルはパスで指定しても理解される.

e.g. \bibliography{./bib/hoge}

複数のbib ファイルを読み込みたい場合には, で区切れば良い.ただし,このようにした場合には2つのbib ファイルが区別なく処理されるため,2つを分けることは出来ない. また,\bibliography コマンドは2回以上ドキュメント内に挿入することは出来ない.

e.g. \bibliography{hoge1.bib,hoge2.bib}

2つ以上の文献リストを作成したい場合には次のようなパッケージを利用すると良い.この場合にはそれぞれの文献リストでスタイルを変更できる.また,タイプセットではBibTeX を文献リストの数だけ実行する必要があるようだ.

Multibib - Overleaf, Online LaTeX Editor

もしもLaTeX ファイル1つにしたい場合には,BibTeX を実行したのちに生成されたbbl ファイルの中身を上の2つのコマンドと置き換えれば良い.

How to CITE Bibliography?

文献の引用方法は\cite を利用すれば良い.このとき,\cite の前で改行されたくないので~ を付けておく.

Text text text text.~\cite{Citation_key}

このとき,複数の文献を同時に\cite することも出来る.

e.g. \cite{Citation_key1,Citaion_key2}

あるいは,オプションでコメントを付すことも出来る.

Text text text text.~\cite[Comment]{Citation_key}

BibTeX で文献を処理する場合,\cite で参照していない文献は無視されてしまう.
逆に言えば,とりあえずbib ファイルに文献情報を入れておけば,文献引用が自動化されているために引用漏れを防ぐことが出来ることになる.

そもそも,参照しないのに文献を明示させることはほとんどないと思われるが 参照しないが文献リストに加えたい文献がある場合は,document 環境内の\bibliography より前で\nocite{Citatiion_key} とすれば良いようだ.

\begin{document}
  Text text text text.~\cite{Citation_key2}
  \nocite{Citation_key1}\nocite{Citation_key3}
  \bibliography{hoge.bib}
  \bibliographystyle{foo} % .bst file
\end{document}

また,引用の基本スタイルは[1] のような形式になっているが,author-year スタイルなどにしたい場合にはnatbib を利用すると良いだろう.

natbib | CTAN

\cite を再実装している
これらのバリエーションも提供している

How to EDIT thebibliography environment?

BibTeX を利用する場合にはthebibliography 環境を編集作成する必要はないが,BibTeX に不具合があった場合にはbbl ファイル内のthebibliography 環境を編集して修正する方法が最も簡単である. この環境の基本的な書き方は知っておいた方が良いと思われる.雰囲気はおおよそitemize 環境に似ている.

\begin{thebibliography}{99}
  \bibitem{Citation_key1} Bibliography_info1
  \bibitem{Citation_key2} Bibliography_info2
  % ...etc
  % Example of Bibliography_info
  % % Author, Titile, Year, Publisher
\end{thebibliography}

\bibitem では本文中で\cite するためのCitation_key を含める.Bibliography_info には著者名や文献題名などを列挙する.この中では任意の位置で改行することが出来る.

この場合では文献は通し番号が[1] のように付与されるが,[hoge] のように任意の文字にしたい場合には,\bibitem のオプション[Short_heading] を利用する.

\begin{thebibliography}{99}
  \bibitem[Short_heading1]{Citation_key1} Bibliography_info1
  \bibitem[Short_heading2]{Citation_key2} Bibliography_info2
\end{thebibliography}

\bibitem\label\cite\ref に対応していると思えば,それほど難しくはないと思われる.

おそらく,5件くらいまでなら手作業で編集していてもストレスにはならないと思われる.

About BibLaTeX

biblatex | CTAN

BibTeX がC で実装されているのに対して,biber はPerl で実装されている

具体的な利用方法については他の記事を参照のこと. ここでは概略をつかみたい.

What is BibLaTeX?

BibLaTeX はbiber をバックエンドに利用する文献用パッケージである.BibLaTeX には以下のような特徴がある.

  • Unicode に完全対応
  • 文献リストのスタイルのカスタマイズ
  • 引用スタイルのカスタマイズ
  • 複数の文献リストの作成

そのため,natbib も基本的には必要ないような作りにはなっているようだ.(ただし,natbib を読み込みたい場合にはnatbib オプションを有効にする)
Unicode 対応を除けば,BibLaTeX でなくても他のパッケージを利用すれば対応できるとも思われる.

また,いくつかのパッケージでの互換を確認しておく必要があると思われる.これらはパッケージガイドを参照のこと.

How to USE BibLaTeX?

LaTeX ファイルでは以下のようなプリアンブルにする.

\usepackage[
  backend = biber % biber(default), bibtex, bibtex8
  ,style = numeric % numeric(default),
  ,natbib = false % true, false(default)
  ]{biblatex}
\addbibresource{hoge.bib}
% X: \addbibresource{hoge.bib,foo.bib}
% O: \addbibresource{hoge.bib}\addbibresource{foo.bib}

\bibliography でbib ファイルを指定するのではなく,プリアンブルで\addbibresource で指定する.また,複数のファイルを同時に読み込ませることは出来ず,一つずつ読み込ませる.

参考文献を挿入したい位置で以下のようにする.

\printbibliography

また,引用には\cite を利用することが出来るが,この他にもバリエーションがいくつか提供されている.詳細はパッケージガイドを参照.

Select style

BibLaTeX のスタイルファイルはBibTeX のそれとは拡張子も異なるため注意が必要になる.

Extension Description Package option
.bbx Bibliography style file bibstyle
.cbx Citation style file citestyle

これらのスタイルファイルは\usepackage{biblatex} のオプションから指定する.style オプションはこれらのbibstylecitestyle の同時指定に対応している.

Backend another BibTeX Engine

BibLaTeX ではbiber またはBibTeX をバックエンドとして利用するが,(u)pBibTeX もバックエンドとして利用することが出来るようだ.

検証が面倒だったので以下の記事を参照のこと.

【LaTeX】BibTeX導入 まとめ - 溶けかけてるうさぎ - BLOG

Biblatex-japanese

kmaed/biblatex-japanese: Japanese language support for biblatex - GitHub

License: BSD 2-Clause "Simplified" License

日本語用のBibLaTeX を作成している方もいるようである.

References

Repository

Digressions

BibTeX で知っていることをまとめた. 数十の文献を管理する場合には簡単になるが,なかなか奥が深い.

Wiki があれば十分と思えばそれまでだが,毛ほども役に立たないまとめ. 誰かの役に立てばと思う.

\cite にもハイパーリンクを付けることが出来るため,hyperref を利用するとおもしろい. また,バックリファレンスにも可能に出来るようだ.

ところで,ハイパーリンク関連は以下の記事が読みやすかった.

Hyperlinks - Overleaf, Online LaTeX Editor

代表的なbst ファイルの表の後半は組織名になっていた.これを明らかにしておきたい. abbreviation が利用できないのでリストにしておいた.

  • [ACM]: Association for Computing Machinery
  • [APA]: American Psychological Association
  • [IEEE]: Institute of Electrical and Electronics Engineers
  • [SIAM]: Society for Industrial and Applied Mathematics
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment