LaTeX 初心者やBibTeX 初心者がBibTeX とは何かを調べてみると非常にさまざまな記事を見つけられるが,さまざまな記事にバラバラとして煩雑で分かりづらいように思われる.また,実用的な内容は多いが概要を得るような記事は少ないと思われる.
以下のような項目をまとめた.
Outline TOC
- What is BibTeX?
- Extensions around BibTeX
- Bibliography style files
- How to EDIT Bib files?
- How to INSERT Bibliography list?
- How to CITE Bibliography?
- How to EDIT thebibliography environment?
- About BibLaTeX
LaTeX に基本的な部分は実用的に記述し,パッケージなどはそれほど深くは掘らずにどのようなことが出来るか紹介するに留めた. ただし,比較検証することは行っていないため,どのような方法を用いてBibTeX を利用するかは個人に委ねることになる.
注 : 記事構成としてのストーリー性を気にして作成していません.そのため,気になる項目をかいつまんで読むと良いと思われます.
Detail TOC (折りたたみ)
BibTeX : 文献の諸情報を記載したbib ファイルから自動的に文献リストを出力するプログラム
文献リストを作成するにはthebibliography 環境を利用して手作業で作成することが出来る. しかし,文献リストのフォーマットや順序などを考えながら行うには煩雑な作業となる.文献引用が多くなればなるほど面倒な作業になる. これをBibTeX によって自動化させている.
タイプセットは以下のように複数回必要になる.
latex
やbibtex
では適宜利用したいエンジンに変更のこと.
$ 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.
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 関連のファイル拡張子を確認しておきたい.
Extension | Description |
---|---|
.bib |
文献情報が記載されたファイル 著者が用意する |
.bst |
BibTeX のためのスタイルファイル |
.bbl |
BibTeX によって得られる成果物 中身はthebibliography 環境 LaTeX エンジンはこのファイルを読み込む |
.blg |
BibTeX エンジンのログファイル (Windows のバイナリパフォーマンスログファイルではなく,ただのテキストファイル) |
.bib
については# この節で,.bst
については# この節で詳しく取り扱う.
.bbl
については詳しく取り扱わないが,thebibliography 環境については# この節で編集方法を少しだけみる.
Windows ではblg ファイルはWindows Binary Performance Log Format ファイルと認識される.このように解釈されるのは少し厄介な感じがする.
拡張子を適当に変更しておいても良いように思われる.
.blg → .bibtex.log
ちなみに,以下のようにren
コマンドから拡張子を書き変えることが出来る.
$ ren *.blg *.bibtex.log
bst ファイルによって文献リストのスタイルを決めることが出来る. 代表的なスタイルには以下のようなものがある.(もう少し詳細に説明を入れてみたい)
bst file | Short description |
---|---|
plain | 標準 (著者のアルファベット順) |
unsrt | 本文で引用した順に並べる |
alpha | 文献リストの番号がauthor-year |
abbrv | 省略 (abbreviated) |
acm | ACM スタイル |
apalike | APA 風スタイル |
ieeetr | IEEE Transactions スタイル |
siam | SIAM スタイル |
代表的なbst によるスタイルの違いは以下のページで具体例を見ることが出来る.
この他にもCTAN では次のようなスタイルが集録されているようだ.
これに加えて日本語文献の(u)pBibTeX ではjplain, junsrt, jalpha, jabbrv のスタイルが利用できる.
また,英語文献による基本形は上の通りになるが,日本語と英語が混じった文献リストの作成には精力的にbst ファイルを編集することが多くなされているようだ.ただし,これもかなり面倒らしい.
代表的によく見られるのは経済学用に開発されているjecon.bst (japanese economics) になる.経済学用ではあるが,自作するよりは簡便に日英混合の文献リスト作成が出来るだろう.
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 としてはこの方が格段に楽になると思われる)
もしもbst ファイルを自作しようとするパワーのある人は以下のようなツールを利用するのも良いかもしれない.
しかし,custom-bib を取り扱った記事は少ないようだ.むしろbst ファイルの書き方の記事の方が多い.以下のようにして検索すれば,いくらでもbst の文法などを調べることが出来るだろう.
bst カスタマイズ
しかし,これらの記事をざっと見ているとリファレンスとなるような記事がないことが多い.bst ファイルの文法は一子相伝か何かのたぐいだと思われる.
リファレンスはtexdoc でbtxhak あるいはjbtxhak とすると以下のようなドキュメントを見ることが出来る.とりあえずはこれを参照すればbst ファイルを編集することが出来るようになるだろう.
- Designing BibTeX Styles ::btxhak.pdf [PDF]
- jbtxhak.pdf [PDF] :btxhak.pdf の日本語訳
これらのドキュメントはbtxdoc.pdf の続きの体裁を採っている.続きにはなっているものの,bst 文法を知りたいのみであればこのドキュメントのみで満足できるようだ.
bst ファイルを作成した場合は,$ kpsewhich -var-value BSTINPUT
で保存ディレクトリを確認し,保存後にmktexlsr
すれば良い.
bst ファイルはあくまでthebibliography 環境内のみのスタイルを決定するものであり,\cite
のスタイルを決めるものではないことに注意が必要になる.
\cite
のスタイルの変更にはnatbib を利用することが良く知られている.
natbib を利用する場合にはnatbib のためのbst ファイルもある
\cite
に関してもさまざまなコマンドを提供する
natbib よりは少ないが,これを採用している記事も見受けられた
あるいは同様のパッケージにあたるjurabib もあるようだ.
これを取り扱う記事は極端に少ない
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 |
- | タイトルや著者名など |
Fields
とContents_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},
}
%
でコメントアウトは出来ないので注意が必要.
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 の挿入方法を紹介している.
乾燥したパスタを2つに割る方法について示した「Controlling fracture cascades through twisting and quenching」のBibTeX ソースを示しておく.
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 にあるような修正を適宜加える必要もあるだろう.
bib ファイルの作成に関していくつかのtips を挙げておきたい. おそらくこの他にもさまざまなtips があるが,知っているのはこれくらいだった.
本当は以下のドキュメントを参照した方が確実だと思われる.
bib ファイルは最終的にLaTeX が読むので,\LaTeX
や\emph
などのLaTeX のコマンドは利用することが出来る.
また,\"o
などは{\"o}
としておくべきのようだ.
BibTeX は賢いのかどうかよく分からないが先頭の単語の頭文字のみを大文字にして,それ以降の単語は小文字に変換する.したがって,以下のようなタイトルの文献があった場合,上手く大文字を処理することが出来ない.
@example{
title = {An Exmample Title}
}
そのため,以下のように書き直す必要がある.
@example{
title = {An {Exmample} {Title}}
}
@example{
title = "An {Exmample} {Title}"
}
連名の場合,␣and␣
で続ける.(u)pBibTeX では,
または、
で区切る.
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
を利用すれば良いと思われる.
手作業なら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 を文献リストの数だけ実行する必要があるようだ.
もしもLaTeX ファイル1つにしたい場合には,BibTeX を実行したのちに生成されたbbl ファイルの中身を上の2つのコマンドと置き換えれば良い.
文献の引用方法は\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 を利用すると良いだろう.
\cite
を再実装している
これらのバリエーションも提供している
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件くらいまでなら手作業で編集していてもストレスにはならないと思われる.
BibTeX がC で実装されているのに対して,biber はPerl で実装されている
具体的な利用方法については他の記事を参照のこと. ここでは概略をつかみたい.
BibLaTeX はbiber をバックエンドに利用する文献用パッケージである.BibLaTeX には以下のような特徴がある.
- Unicode に完全対応
- 文献リストのスタイルのカスタマイズ
- 引用スタイルのカスタマイズ
- 複数の文献リストの作成
そのため,natbib も基本的には必要ないような作りにはなっているようだ.(ただし,natbib を読み込みたい場合にはnatbib
オプションを有効にする)
Unicode 対応を除けば,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
を利用することが出来るが,この他にもバリエーションがいくつか提供されている.詳細はパッケージガイドを参照.
BibLaTeX のスタイルファイルはBibTeX のそれとは拡張子も異なるため注意が必要になる.
Extension | Description | Package option |
---|---|---|
.bbx |
Bibliography style file | bibstyle |
.cbx |
Citation style file | citestyle |
これらのスタイルファイルは\usepackage{biblatex}
のオプションから指定する.style
オプションはこれらのbibstyle
とcitestyle
の同時指定に対応している.
BibLaTeX ではbiber またはBibTeX をバックエンドとして利用するが,(u)pBibTeX もバックエンドとして利用することが出来るようだ.
検証が面倒だったので以下の記事を参照のこと.
kmaed/biblatex-japanese: Japanese language support for biblatex - GitHub
License: BSD 2-Clause "Simplified" License
日本語用のBibLaTeX を作成している方もいるようである.
- Wiki
- CTAN
- CTAN: Package bibtex
- CTAN: Package pbibtex-base
- BibTeXing ::btxdoc.pdf [PDF]
- Designing BibTeX Styles ::btxhak.pdf [PDF]
- jbtxdoc.pdf [PDF] :btxdoc.pdf の日本語訳
- jbtxhak.pdf [PDF] :btxhak.pdf の日本語訳
- About Bib files
- bibliographies - bibtex vs. biber and biblatex vs. natbib - TeX - LaTeX Stack Exchange
- texjporg/pbibtex-base: Bibliography styles and miscellaneous files for pBibTeX - GitHub
- plk/biber: Backend processor for BibLaTeX - GitHub
BibTeX で知っていることをまとめた. 数十の文献を管理する場合には簡単になるが,なかなか奥が深い.
Wiki があれば十分と思えばそれまでだが,毛ほども役に立たないまとめ.
誰かの役に立てばと思う.
\cite
にもハイパーリンクを付けることが出来るため,hyperref を利用するとおもしろい.
また,バックリファレンスにも可能に出来るようだ.
ところで,ハイパーリンク関連は以下の記事が読みやすかった.
代表的な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