references.bibに貼る@article{...}が 1 個欲しいだけ、という話です。最短の手順を先に書き、そのあとで、どこから取ってきたエントリでもたいてい壊れている 6 か所を挙げます。
DOIがあれば 1 コマンドで足りる
curl -LH "Accept: application/x-bibtex" https://doi.org/10.1038/nphys1170
@article{Aspelmeyer_2009, title={Measured measurement}, volume={5},
ISSN={1745-2481}, url={http://dx.doi.org/10.1038/nphys1170},
DOI={10.1038/nphys1170}, number={1}, journal={Nature Physics},
publisher={Springer Science and Business Media LLC},
author={Aspelmeyer, Markus}, year={2009}, month=Jan, pages={11–12} }
(読みやすさのために折り返しています。実際のレスポンスは長い 1 行です。)
これはDOIのコンテントネゴシエーションです。doi.orgはそのDOIを登録した機関へリクエストを渡し、CrossrefもDataCiteもapplication/x-bibtexを返します。ジャーナル論文のほとんどと、arXivがDataCiteのDOIを付けるようになって以降はプレプリントの多くも、これで取れます。アカウントもブラウザも要らず、DOIを並べたテキストファイルに対してそのまま回せます。
.bibを渡してくれる 4 つの場所
| 手元にあるもの | BibTeXの在り処 |
|---|---|
| Google Scholarの検索結果 | 結果の下の引用符アイコン(Cite)→ポップアップ下部のBibTeX |
| arXivのページ | /abs/ページの「References & Citations」の下にある「export BibTeX citation」ボタン |
| ACL Anthology・DBLP・ACM DL・IEEE Xploreのレコード | レコードページの書き出し(Cite / Export Citation)でBibTeXを選ぶ。ACL AnthologyとDBLPは、レコードURL末尾のスラッシュ(や.html)を.bibに替えたものがファイルそのもの |
| すでに文献管理ツールに入っている論文 | その項目のコピーボタン |
知っておく価値のある穴が 1 つあります。PubMedはBibTeXを出しません。Citeボタンが出すのはAMA・MLA・APA・NLMのテキストで、文献管理ツール向けの書き出しは.nbibです。レコードからDOIを取って、上のコマンドを回すほうが早い。
同じ論文、3 つの取得先、3 つの違うエントリ
同じ日にBERTの論文を 3 通りの方法で取得しました。
DOI経由(上と同じ手順):
@inproceedings{Devlin_2019, title={}, url={http://dx.doi.org/10.18653/v1/N19-1423},
DOI={10.18653/v1/n19-1423}, booktitle={Proceedings of the 2019 Conference of the North},
publisher={Association for Computational Linguistics},
author={Devlin, Jacob and Chang, Ming-Wei and Lee, Kenton and Toutanova, Kristina},
year={2019}, pages={4171–4186} }
ACL Anthologyから(editor・address・publisher・urlは長さの都合で省略。著者欄は 1 行に畳んだ):
@inproceedings{devlin-etal-2019-bert,
title = "{BERT}: Pre-training of Deep Bidirectional Transformers for Language Understanding",
author = "Devlin, Jacob and Chang, Ming-Wei and Lee, Kenton and Toutanova, Kristina",
booktitle = "Proceedings of the 2019 Conference of the North {A}merican Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long and Short Papers)",
month = jun,
year = "2019",
doi = "10.18653/v1/N19-1423",
pages = "4171--4186"
}
その論文をすでに保存してあったライブラリから:
@inproceedings{devlin2019bert,
title = {BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding},
author = {Jacob Devlin and Ming-Wei Chang and Kenton Lee and Kristina Toutanova},
booktitle = {Conference of the North American Chapter of the Association for Computational Linguistics},
pages = {4171--4186},
year = {2019},
doi = {10.18653/v1/n19-1423},
}
同じ論文を同じ日に取って、3 つとも違います。DOI経由はタイトルが空でした——このDOIに対するCrossrefの登録内容にタイトルが無い——うえにbooktitleが途中で切れ、pagesがenダッシュです。エラーは出ません。参考文献リストにタイトルの無い項目が
1 つ並ぶだけです。3 つのうち最良はACL Anthologyのもので、理由は単純に、会議側の人間が作ったからです。略語はすでに波括弧で守られ、ページ範囲は--になっています。つまり、会場に近い出典を優先すること。そして何を取ってきても必ず読むこと。いちばん速い経路は、いちばん平然と穴の開いたエントリを渡してきます。
貼り付ける前に確認する 6 か所
1. 大文字は残らない
plain・abbrv・unsrt・alpha——ジャーナルの.bstの多くが継承している古典的なスタイル——は、タイトルの先頭の 1 文字と、コロンとスペースの直後の 1 文字を除いて、残りをすべて小文字にします。The role of DNA methylation in ArabidopsisはThe role of dna methylation in arabidopsisと出力されます。上のBERTのエントリで無事なのはACL Anthologyのものだけで、それは略語が{BERT}と波括弧で守られているからです。タイトルの先頭にあっても残るのは 1 文字目だけなので、波括弧の無いライブラリのエントリのBERT:はBert:と出力されます。逃げ道は波括弧で、{}の中は触られません。
title = {{BERT}: Pre-training of Deep Bidirectional Transformers},
title = {The role of {DNA} methylation in {Arabidopsis}},
タイトル全体を{{...}}で包んだ形も見かけます。一括で守れるので実際に動きますが、スタイルが意図して変えようとしていた大文字小文字まで凍結します。可能なら文ではなく語を包んでください。biblatexとbiberの組み合わせなら既定でこの変換は起きませんが、それでも包んでおくこと。投稿先がどのスタイルで.bibを処理するかは、こちらでは選べないからです。
2. BibTeXは、分けてほしくない名前を分ける
BibTeXはauthor = {World Health Organization}を「名がWorld Health、姓がOrganization」と読むので、名を略すスタイルではW. H. Organizationと出力されます。名前自体を波括弧で包んで 1 つの塊にします。
author = {{World Health Organization}},
同じ規則が、andという語を含む名前も救います(そのままだと著者 2 名の区切りとして読まれます)。姓が 2 語以上のときはLast, Firstの形で書き、推測の余地を無くします。
author = {van der Waals, Johannes Diderik},
3. @miscは「よく分からない」の別名ではない
同じ論文に対する実在のエントリを 2 つ、同じ日に取得したものです。arXivのDataCite
DOIから(著者は途中で省略。keywordsとcopyrightも落とした):
@misc{https://doi.org/10.48550/arxiv.1706.03762,
doi = {10.48550/ARXIV.1706.03762},
url = {https://arxiv.org/abs/1706.03762},
author = {Vaswani, Ashish and Shazeer, Noam and Parmar, Niki and ...},
title = {Attention Is All You Need},
publisher = {arXiv},
year = {2017}
}
その論文の出版版を持っているライブラリから:
@inproceedings{vaswani2017attention,
title = {Attention Is All You Need},
author = {Ashish Vaswani and Noam Shazeer and Niki Parmar and ...},
booktitle = {Conference on Neural Information Processing Systems},
volume = {30},
pages = {5998--6008},
year = {2017},
}
@miscには必須フィールドが 1 つもないので、会場も巻もページも消えていることは何も警告されません。著者とタイトルと年だけが出力されます。読者に見に行ってほしい版を引用してください。出版版があるなら@articleか@inproceedingsで書き、プレプリントのリンクはurl(biblatexならeprint)に残します。@miscを使うのは、本当にプレプリントしか存在しないときだけです。
4. ダッシュと月
最初のエントリのpages={11–12}はenダッシュそのものです。BibTeXの流儀はハイフン
2 個——pages = {11--12}——で、LaTeXがこれをenダッシュとして組みますし、範囲を整形し直すスタイルも解釈できます。月も同種の問題です。標準スタイルが定義しているのはjanからdecまでだけなので、波括弧の無いmonth=Julyは未定義の文字列で、BibTeXはstring name "july" is undefinedと警告を出して落とします。month = julと書くか、リテラルにしたいならmonth = {July}と書きます。なお最初のエントリのmonth=Janは問題ありません。BibTeXはマクロ名を大文字小文字の区別なく照合するので、janとして解決されます。
5. Unicodeと、エスケープが要る 4 文字
タイトルに裸で入った&・_・#("Design & Analysis"など)はLaTeXの実行を止めます。%はもっと静かで、そのぶん質が悪い。コメントの開始なのでエラーにすらならず、その行の残りを黙って飲み込みます。4 つとも\&・\_・\#・\%とエスケープしてください。アクセント付き文字はもう少し厄介です。SchölkopfはUTF-8ネイティブなbiblatexとbiberなら問題ありません。古典的なbibtexはバイト指向なので、マルチバイト文字をまたぐソートと大文字小文字の変換が信用できません。加えて、.bibのエンコーディングと読み手側の想定がずれればSchölkopfはSchölkopfになって届きます。bibtexから動けないならSch{\"o}lkopfと書きます。
6. 自分で打てる引用キー
上のarXiv DOIが返す引用キーはhttps://doi.org/10.48550/arxiv.1706.03762です。DBLPはDBLP:conf/naacl/DevlinCLT19を返します。半年後の自分が見て分かる名前——
vaswani2017attention——に変えること。しかも、キーが原稿中に広がって\cite{}を全部探し直す羽目になる前に。
1 本ではなく 40 本になったとき
この 6 項目を 40 回やる、という段になって人は諦め、最初に出てきたジェネレータの出力をそのまま貼ります。効くのは構造のほうの変更です。論文は見つけた時点で集めておき、参考文献は最後に 1 か所からまとめて取り出す。
Litlasはその形に合わせて作ってあります。論文は検索結果から、読んでいる最中ならブラウザ拡張から、あるいはPDFをライブラリにドラッグして入ります。手元の.bibは、すでに書いたメモを上書きせずに取り込めます。任意の論文でBibTeXを表示を押すと、エントリがその場に開くと同時にクリップボードへコピーされます。隣の引用パネルはAPA・Chicago(著者-年)・IEEE・MLA・Vancouverで参考文献を整形し、.bib・.ris・CSL-JSONとして書き出します。ボード 1 つ分、あるいは絞り込み後のライブラリ全体を、
1 つの.bibとして出せます。会議名を正式名称(“Conference of the North American
Chapter of the Association for Computational Linguistics”)で出すか短縮(“NAACL”)で出すかの設定もあり、これは投稿できるエントリと書き直すエントリの差になります。ただし効くのは論文単位の書き出しで、ライブラリ全体の.bibはいまのところ常に正式名称です。
驚かないように、できないことを 2 つ。Litlasはページ範囲を--に正規化しますが、波括弧による保護は付けません。上のエントリは本当にtitle = {BERT: Pre-training...}のままで、{BERT}は自分で打つことになります。もう 1 つ、論文 1 本のBibTeXを読むだけならアカウントは要りません(論文単位の書き出しは公開されています)が、ライブラリを作るには要ります。無料プランはボード 3 個・アイテム 100 件までで、カード登録は不要です。
まとめ
- DOIがあるなら
curl1 回で終わり。 - URLしか無いなら、まずそのサイト自身の
.bibリンク、次にGoogle Scholar。 - 何が返ってきても読むこと。大文字・名前の分割・エントリ種別・
--・エスケープ・引用キー。
どのジェネレータも、それらしいBibTeXは出します。完成したBibTeXを出すものはありません。最後の 1 回は自分の仕事で、見る場所が 6 か所と分かっていれば 30 秒ほどで済みます。
