読者です 読者をやめる 読者になる 読者になる

どせいたんさき。

ナスダヨー

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 ファイルの書式を見比べることで更に問題が切り分けられるかもしれない.面倒なので検証はしていない.