Latexmkを使った,LaTeX文書の自動コンパイル

公開日:
最終更新日:

非常に単純な構造のLaTeX文書であれば,.tex -> .dvi -> .pdf という処理を行うために uplatex, dvipdfmxの順にそれぞれを1回ずつ走らせればよいが,BiB(La)TeXを使って参考文献を管理したり,目次・索引を付けたりしようとすれば,複数回のコンパイルとその他いくつかのプログラムの起動が必要になる.
そのような場合,ターミナルにコマンドを手打ちするのはもちろん,シェルスクリプト等で対応するのも骨が折れるので,ここは TeX Live に含まれるLatexmkを使って楽をしよう.

Latexmkとその他のインストール

TeX Live の場合,標準でLatexmkが含まれるので,特段の作業は必要ない.

Latexmk - TeX Wiki によれば,W32TeXの場合もLatexmkは含まれるが,Perlのインストールが別途必要なようだ.
Perl - TeX Wiki を参照のこと.

.latexmkrcの作成

latexmk -commands とすると,Latexmkが呼び出すべきプログラム(あるいはコマンド)の一覧が表示される.
初期の状態では,恐らく,latexやdvipdfを呼び出すようになっているだろう.
当然,これでは日本語が正常に処理できないので,変更する必要がある.
具体的には,uplatexを利用しているのであれば,ホームディレクトリ(UNIX/Linuxであれば, ~ )に以下の最低限の内容で,".latexmkrc" というファイルを作成すればよい.

                  #!/usr/bin/perl

                  $latex     = 'uplatex %O %S';
                  $biber     = 'biber %O -u -U --output_safechars %B';
                  $bibtex    = 'upbibtex %O %B';
                  $dvipdf    = 'dvipdfmx %O -o %D %S';
                  $makeindex = 'mendex %O -o %D %S';
                  $pdf_mode  = '3'; # .tex -> .dvi -> .pdf
                
  • 3行目: uplatexを使用する(latexの代替).
  • 4行目: biberを,Unicode・文字化け対策のオプションとともに使用する.
  • 5行目: upbibtexを使用する(bibtexの代替).
  • 6行目: dvipdfmxを使用する(dvipdfの代替).
  • 7行目: mendexを使用する(makeindexの代替).
  • 8行目: DVIファイルからPDFファイルを作成する.

platexを利用しているのであれば,第3行目と第5行目を変更すればよい.

Latexmkの利用

".latexmkrc" が作成できたら,早速Latexmkを使ってみよう.

                  $ latexmk hoge.tex
                

文書の複雑さによって何度かコンパイルが走り,DVIファイルと目的のPDFファイル,またその他の中間ファイルが出力されるはずだ.
なお,中間ファイルを残すことによって,次回は必要なファイルのみが処理されるため高速である.

リアルタイムなコンパイルとその他のオプション

例えば私の利用している Ubuntu 14.04 でのデフォルトのPDFビューアはEvinceであるから,下のような記述(各自の環境によって異なる)を ".latexmkrc" に追加して,

                  $pdf_previewer = 'start evince %O %S';
                

ターミナルから

                  $ latexmk -pvc hoge.tex
                

とすると,ソースファイルの変更をリアルタイムで検出しコンパイルが行われ,Evinceの表示に反映される.

また,以下にその他のオプションを用いた使い方の一部を示しておく.

                  $ latexmk -gg hoge.tex  # 中間ファイルを片付けてからコンパイルする(Super go mode).
                  $ latexmk -c hoge.tex  # 中間ファイルを削除する.
                  $ latexmk -C hoge.tex  # 中間ファイルおよび最終生成ファイルを削除する.