Help us understand the problem. What is going on with this article?

ファイルを分割していると OMake + BibTeX がうまくいかない

More than 5 years have passed since last update.

OMake + BibTeX の話です。

OMake で BibTeX (もしくは LaTeX) を扱う方法について調べてみると、一様に皆こんな感じのことを言っています:

  • めっちゃカンタンだった。
  • 何もしなくてもよかった。
  • すべてよしなにしてくれた。
  • 身長が 5cm 伸びた。

おいおいマジか。じゃぁカンタンなんだろう… うちの OMake + LaTeX でも BibTeX させちゃうぞ!

~/hoge/OMakefile
open build/LaTeX

LATEX=platex
BIBTEX=pbibtex
DVIPDFM=dvipdfmx

LaTeXDocument(hoge, hoge)
.DEFAULT: hoge.dvi hoge.pdf
uda@host:~/hoge $ omake
*** omake: reading OMakefiles
*** omake: finished reading OMakefiles (0.17 sec)
- build . hoge.dvi
+ <if ... then ... [else ...]>
Enviroment variables TEXINPUTS, BIBINPUTS, BSTINPUTS set to .:
- build . hoge.dvi
+ Shell.run-latex(platex -kanji=utf-8 hoge)
This is e-pTeX, Version 3.1415926-p3.4-110825-2.6 (utf8.euc) (TeX Live 2013/Debian)
 restricted \write18 enabled.
 :
 :
- build . hoge.pdf
+ dvipdfmx -p a4 -o hoge.pdf hoge.dvi
hoge.dvi -> hoge.pdf
[1][2][3][4][5][6][7][8][9][10][11][12][13][14][15][16]

ん?

んんん?

uda@host:~/hoge $ ls *.bbl
zsh: no matches found: *.bbl

なんか…… bibtex 先生…… 呼 ば れ て な い !!!?!?

やだなー とりあえず clean してキャッシュ削除してもっかいやってみるかー… 変わらないなー… んー、TEXDEPS[] 書くといいのかな?… 変わらないなー… う、うーん………???

ググってもみんなカンタンだカンタンだ身長伸びたと言ってるのにうまくいかない、つらいですね。まぁなんでダメだったのか結論を言うと、OMake のデフォルトの build/LaTeX モジュールが、ファイルを分割している場合の BibTeX に対応していなかったんですね。

/usr/lib/omake/build/LaTeX.om
#
# Required version of omake
#
OMakeVersion(0.9.8.5, 0.9.8.5)

########################################################################
# Building LaTeX documents.
#
# Copyright (C) 2003-2007 Jason Hickey and Mojave Group
 :
 :
            if $(and $(file-exists  $(name).aux), $(grep q, $'\\citation', $(name).aux), $(grep q, $'\\bibdata', $(name).aux))
                $(BIBTEX) $(name)
                run-latex $(prog) $(flags) $(name)
 :
 :

今の場合、hoge.aux が存在してかつそこに \citation\bibdata の記述がある場合にのみ $(BIBTEX) が呼び出される仕組みになっているようです。しかし、私は、TeX ファイルを分割するため \input{other} を使っていました。すると、.aux ファイルは次のようになります。

~/hoge/hoge.aux
\@input{other.aux}
~/hoge/other.aux
\citation{fuga}
\bibdata{reference}

hoge.aux には \citation\bibdata もないからわざわざ $(BIBTEX) 呼び出す必要はないね!飛ばそう! 全 然 よ く な い !

はい、仕方ないので、/usr/lib/omake/build/LaTeX.om をコピーしてきて、該当行だけ修正してビルドすることにしました。\@input{other.aux} を読んで再帰的に条件をチェックするのはダルそうなので、単純に hoge.aux の存在確認だけするようにします。

~/hoge/OMakefile
#open build/LaTeX
open myLaTeX
 :
 :
~/hoge/myLaTeX.om
:
:
            if $(file-exists  $(name).aux)
                $(BIBTEX) $(name)
                run-latex $(prog) $(flags) $(name)
:
:

これで無事 omake したときに (p)bibtex が呼ばれるようになりました。めーたしめーたしー

参考文献

t_uda
主に JavaScript-er です。HTML5 力が足りていない。数学方面でよく C++ も書いていますがあまり詳しくないです。誰か私に RAII について教えてください。 Twitter とは距離を置いてそろそろ Qiita 活用してプログラミング生活にうちこみたいそんな今日この頃。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away