OMake + BibTeX の話です。
OMake で BibTeX (もしくは LaTeX) を扱う方法について調べてみると、一様に皆こんな感じのことを言っています:
- めっちゃカンタンだった。
- 何もしなくてもよかった。
- すべてよしなにしてくれた。
- 身長が 5cm 伸びた。
おいおいマジか。じゃぁカンタンなんだろう… うちの OMake + LaTeX でも BibTeX させちゃうぞ!
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 に対応していなかったんですね。
#
# 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 ファイルは次のようになります。
\@input{other.aux}
\citation{fuga}
\bibdata{reference}
hoge.aux
には \citation
も \bibdata
もないからわざわざ $(BIBTEX)
呼び出す必要はないね!飛ばそう! 全 然 よ く な い !
はい、仕方ないので、/usr/lib/omake/build/LaTeX.om
をコピーしてきて、該当行だけ修正してビルドすることにしました。\@input{other.aux}
を読んで再帰的に条件をチェックするのはダルそうなので、単純に hoge.aux
の存在確認だけするようにします。
#open build/LaTeX
open myLaTeX
:
:
:
:
if $(file-exists $(name).aux)
$(BIBTEX) $(name)
run-latex $(prog) $(flags) $(name)
:
:
これで無事 omake
したときに (p)bibtex
が呼ばれるようになりました。めーたしめーたしー
参考文献
- 13. ビルド関数とユーティリティ — OMakeマニュアル 日本語訳
- 有象無象の blog たち