Posted at

ファイルを分割していると 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 が呼ばれるようになりました。めーたしめーたしー


参考文献