[LaTeX] bibtexのエラー "Case mismatch error between cite keys" についての断片的なメモ

環境:Windows10 + W32TeX
文書クラス:jsarticle
コンパイル:ptex2pdf + pbibtex
(バージョンは調べていない)

bibtexのエラー

先日、いつも通りTeXを書いてコンパイルしたところ、bibtexがエラーを出してきた。

Case mismatch error between cite keys ...

エラーメッセージはこの後にも続くが、エラーの核はこの部分。どうやら、bibtexkey周りでエラーを出しているらしい。auxファイルをのぞいてみると、あるbibtexkey(ここでは例としてYamada2018としておく)が初めはYamada2018と正しいキーで呼ばれているのが、途中からYAMADA2018と全て大文字で呼ばれており、この不一致が原因でbibtexにエラーが出ているようだ。

まとめるとこうなる。

  1. auxファイルの生成
  2. 生成されたauxファイル内で(なぜか)同じbibtexkeyが小文字だったり大文字だったりと統一されていない
  3. pbibtex実行時、bibtexkeyの不一致があるのでエラーが発生

たしかに、bibtexkeyを大文字・小文字統一して呼び出さないとエラーが出るらしいというのは次のページでも言われている。

tex.stackexchange.com

ただエラーの出方はトリッキーである。例えばbibtexkeyをYamada2018としておいても、初回の呼び出しはYamada2018でもYAMADA2018でもyamada2018でもコンパイルは通るらしい……。しかし、初回の呼び出し方と異なる呼び出し方をすると上記のエラーが発生する、ということのようだ。

これでエラーの後半部分(不統一な呼び出し方に対してなぜbibtexはエラーを出すのか?)は分かった。では前半部分(なぜ不統一な呼び出し方をするauxファイルが生成されてしまうのか?)はどうだろうか。この問題についていろいろ試行錯誤して調べたところ、エラーの発生した自分の文書の場合は

  • 参考文献リストが3ページ目に入るとauxファイルがおかしくなる

ということが分かった。逆に、参考文献リストが2ページ目に入っていれば、なぜかエラーは起きなかった(このときauxファイルの中で統一したbibtexkey呼び出しをしていることも確認した)。しかし、なぜ参考文献リストが3ページ目に入るとauxファイルがおかしくなるのかについてはさっぱり分からなかった。ここまでのことが分かるのに4~5時間を費やしてしまったので、自分としては原因の完全な解明はもうどうでもよいという気分になっていた。

解決策(対症療法)

エラーの原因は分からないままだが、コンパイルができないのは困るので、対症療法を考える。やり方は次の二通りがある(このツイートを参考にしたhttps://twitter.com/dododohondo/status/29731275401068544).

  1. bibtexkeyをYAMADA2018にしてしまう(呼び出し側はYamada2018などで統一).
  2. 呼び出し方をYAMADA2018にしてしまう(bibtexkeyはYamada2018のまま).

どちらでもエラーは回避できるので、使いやすい方を選べば良いと思う(どちらもエラーを回避できることを自分の場合で確認した)。私の場合は、文献情報の入っているbibファイルの中身を書き変えたくなかったので(つまりbibtexkeyを変えたくなかったので)、代わりに文書のbibtexkeyをYamada2018からYAMADA2018にすべて置換した。いまのところ問題は起きていない。

以上、bibtexkeyのエラーの原因は分からなかったが、対症療法は見つかった。先のエラーメッセージで検索すると、いくつかページはヒットするが、原因と解決策を書いているページは見つけられなかった。詳しいことは分からないままなのでもやもやとした感じだが、もし同じエラーに遭遇した人がいた場合、参考になればと思って一応載せておく。

追記(2018/11/03)

参考文献が2ページ目を超えるとエラーが出るという現象は、別のファイルでも再現できた。一方で、参考文献が2ページ目を超えなくても同様のエラーが出るケースにも遭遇した。これを調べればエラーを再現できる最小のファイルが作れて原因が分かるのかもしれないが、いまはそこまでやる気力がない……。