Zotero でエクスポートした bib ファイルと apj.bst の相性が悪いらしい
問題
論文管理ソフトウェアとして http://www.zotero.org/:Zotero を使用している.NASA/ADS のデータベースから取得したした文献データを BibTeX 用のファイルにエクスポート.この bib ファイルと NASA/ADS からダウンロードしてきた apj.bst ファイルを使用してコンパイルしたら BibTeX が以下のようなエラーを吐いた.
You can't pop an empty literal stack for entry SOME_BIBLIOGRAPHY_20XX while executing---line 1676 of file apj.bst
解決方法
apj.bst ファイルの 1676 行目はイテレーションを回しているだけのようなので関係ないらしい.
- エラーを吐いたアイテムはすべて @article である.
- エラーから察するに空っぽになったスタックからまた呼び出しているっぽい.
以上の推測から apj.bst のなかで @article を処理している部分に注目.一行ずつコメントアウトしてどこが問題なのかを切り分けた.最終的にあるブロックを以下のようにコメントアウトすることでエラーを消すことができた.
--- apj.bst.orig 2013-02-14 20:02:51.266775055 +0900 +++ apj.bst 2013-02-14 19:26:28.069025488 +0900 @@ -1090,10 +1090,10 @@ format.pages output } if$ - pages empty$ - { format.eprint output } - { format.journal.pages output } - if$ +% pages empty$ +% { format.eprint output } +% { format.journal.pages output } +% if$ format.journal.pages format.note output fin.entry
推測
どうやら format.journal.pages の周辺でエラーが発生しているらしい.コメントアウトした format.journal.pages 直後の output を消してもエラーは出なかった.この関数の仕様をちゃんと読めばもう少し問題の切り分けができるかもしれない.
あくまで推測に過ぎないが, Zotero に保存した文献データの pages に開始ページしか含まれていないことが問題なのではないかという気もしている. apj.bst はもともと NASA/ADS が出力する bib ファイルに特化しているはずである. NASA/ADS からダウンロードした bib ファイルの書式と Zotero が出力した bib ファイルの書式を見比べることで更に問題が切り分けられるかもしれない.面倒なので検証はしていない.