理系学生日記

おまえはいつまで学生気分なのか

LaTeX では latexmk を使うと気持ちが良い

LaTeX で論文を書くときとかだと,主張の根拠が他の文献に書いてある場合にはその文献を \cite コマンドとかで参照することになります.あるいは,自分が論文中に挿入した図なり表なりの番号を \ref で参照することもありますね.

Our bio-inspired control approach is based on pheromone-mediated ant-swarm behaviors called ant colony optimization (ACO)~\cite{bonabeau99:swarm_intelligence} and ...

ところが LaTeX では,一般的には一度でこの参照だのクロスリファレンスだのを解決することができない.どういうことかというと,一回コンパイルしただけでは,きちんとした文献番号,表番号が表示されず,[?]というような表示になってしまうのですね.

これは LaTeX の仕様みたいなもんで仕方がない.

目次を生成するには、最低その文書を2回コンパイルしなければなりません。なぜかというと、1回目のコンパイルではLaTeXが「\section」他見出しコマンドを纏めて「….aux」ファイルに書き出し、「….aux」から目次を生成して「….toc」(table of contents)ファイルとして保存するだけだからです。2回目のコンパイルでやっと「….toc」の内容をメインの「….dvi」の本文に付け加えます(初回だけでは目次、参考文献頁は見出しだけで中身は空)。だから、文書を改編して論理構造が変わった場合なども、目次をアップデートするために最低2度コンパイルしてやる必要があります。

文系のマカーにも「使える」LaTeX

まぁ Makefile なり何なりで,常に platex コマンドとか 2 回ほど実行するようにしとけば世話ないんですけど,他の文献参照を行うときは bibtex コマンドなり何なりも入ってくるし,YaTeX を使うときとかやたらメンドくなる.もう何もかもメンドくなって息をするのも嫌になるから,latexmk 使えば良いと思う.

latexmk-401.zip をダウンロードして,解凍して,INSTALL ファイルに記載されている順序に従えばインストールできるけど,基本的には Perl スクリプトであるので,latexmk.pl なりをパスの通ったディレクトリに置くだけで良い.元々日本語とかは考慮されていないので,デフォルトだと platex とかではなく latex コマンドを呼び出してしまう設定だけど,そういうコマンドの類は RC ファイル latexmkrc に記述することで変更できる.

# -*- cperl -*-
# latexmkrc

$latex         = 'platex';
$latex_silent  = 'platex -interaction=batchmode';
$bibtex        = 'jbibtex';
$dvips         = 'dvipsk';
$dvi_previewer = 'open -a Mxdvi';

詳しくは

あたりが参考になる!

.emacs の tex-command を latexmk に書き変えたりすると,コマンド一発でコンパイル完全終了とかして,とても便利だと思います.

(add-hook 'yatex-mode-hook
  '(lambda ()
     (setq tex-command "latexmk -dvi")
     (setq dvi2-command "open -a Mxdvi")
     (setq YaTeX-use-AMS-LaTeX t)
     (setq dviprint-command-format "dvipsk %s")
     hoge hoge