latexmk とは何か ── LaTeX のビルドを自動化する定番ツール
はじめに
LaTeX で文書を組むと、相互参照や目次、参考文献、索引を正しく反映させるために platex や pdflatex を何度も実行し、途中で bibtex や makeindex を挟む必要があります。この「何回まわせばよいのか」「どのツールをどの順で呼ぶのか」を人間が管理するのは面倒で、間違えると ?? のままの参照や古いページ番号が残ります。
latexmk は、この繰り返しを自動化する Perl 製のビルドツールです。TeX Live や MiKTeX に標準で同梱されており、追加インストールなしで使えることがほとんどです。ソースの依存関係を解析し、出力が安定するまで必要な回数だけ組版を繰り返します。
latexmk が解決すること
- 組版回数の自動判定:
.auxファイルの変化を見て、相互参照やページ番号が収束するまで自動で再実行します。 - 補助ツールの呼び出し:
bibtex/biber(文献)、makeindex/mendex(索引)、makeglossaries(用語集)などを、必要になった時だけ適切な順で実行します。 - 依存関係の追跡:
\inputや\includegraphicsで読み込むファイルの更新も検知し、変更があったときだけビルドします。 - 連続ビルド(プレビュー):ソースを保存するたびに自動で組版し直し、PDF ビューアの表示を更新します。
- 中間ファイルの掃除:
.auxや.logなどの生成物をまとめて削除できます。
基本的な使い方
もっとも単純には、ソースのあるディレクトリで次を実行します。
latexmk main.tex
これで出力が安定するまで組版が繰り返され、文献や索引も解決されます。よく使うオプションは次のとおりです。
| コマンド | 動作 |
|---|---|
latexmk -pdf main.tex | pdflatex で PDF を直接生成 |
latexmk -pdfdvi main.tex | DVI 経由で PDF を生成(dvipdfmx を利用) |
latexmk -pvc main.tex | ファイル変更を監視し、保存のたびに自動ビルド |
latexmk -c | 中間ファイルを削除(最終成果物の PDF は残す) |
latexmk -C | 中間ファイルと PDF をすべて削除 |
latexmk -pv main.tex | ビルド後に PDF ビューアを起動 |
日本語(upLaTeX / pLaTeX)で組む場合は、DVI を経由して dvipdfmx で PDF にする経路が一般的です。この経路をコマンドラインで毎回指定するのは煩雑なので、通常は設定ファイルにまとめます。
.latexmkrc による設定
latexmk は起動時に設定ファイル(~/.latexmkrc や、プロジェクト直下の .latexmkrc / latexmkrc)を読み込みます。Perl の構文で、使うエンジンや補助ツールを指定します。日本語文書でよくある upLaTeX + dvipdfmx の例:
# 和文組版:upLaTeX で DVI を作り、dvipdfmx で PDF 化
$latex = 'uplatex %O -synctex=1 -halt-on-error -interaction=nonstopmode %S';
$bibtex = 'upbibtex %O %B';
$biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B';
$makeindex = 'upmendex %O -o %D %S';
$dvipdf = 'dvipdfmx %O -o %D %S';
$pdf_mode = 3; # DVI -> PDF の経路を使う
# プレビューに使う PDF ビューア(環境に合わせて変更)
$pdf_previewer = 'open -a Preview';
プロジェクト直下に .latexmkrc を置いておけば、共同作業者や CI でも latexmk と打つだけで同じ結果が得られます。組版の再現性を確保するうえで、この設定ファイルをリポジトリに含めておくことは実務上とても有効です。
連続ビルド(-pvc)
latexmk -pvc main.tex を実行すると、latexmk は常駐してソースの変更を監視します。エディタで保存するたびに差分を組版し直し、SyncTeX に対応したビューアなら該当箇所へジャンプできます。原稿を書きながらレイアウトを確認する用途に向いています。停止は Ctrl-C です。
クリーンアップ
中間ファイルが増えてくると、稀に古い .aux が原因で組版がおかしくなることがあります。そうしたときは一度きれいにしてから組み直すと確実です。
latexmk -C # PDF も含めて全削除
latexmk -pdf # 作り直し
-c は最終 PDF を残し、-C は PDF も消します。$clean_ext を .latexmkrc に書けば、削除対象の拡張子を追加できます(.synctex.gz や .bbl など)。
エディタ・CI との連携
- VS Code(LaTeX Workshop):既定のレシピが latexmk 前提です。
latexmkrcを置いておけば拡張機能側の設定を最小化できます。 - TeXShop / TeXworks:latexmk を呼ぶタイプセットエンジンを追加して使えます。
- CI:
latexmk一発で文献・索引まで解決できるため、ビルドスクリプトが簡潔になります。TeX Live のコンテナに.latexmkrcを渡すだけで、ローカルと同じ PDF が得られます(TeX Live 入りコンテナと Makefile、GitHub Actions で自動化する)。
関連記事
- TeX Live 入りコンテナと Makefile で LaTeX 文書をコンパイルする —
latexmkを含む環境をコンテナに固定する - LaTeX コンパイルを GitHub Actions で自動化する — push・PR ごとに
latexmkを回す - LaTeX Beamer で発表スライドを作る — スライドも
latexmkで組む - 確率的生成モデルのグラフィカル表現を TikZ で描く — 図を含む文書のビルド
まとめ
latexmk は「LaTeX を何回まわすか」という悩みを肩代わりしてくれるツールです。
latexmkと打つだけで、相互参照・目次・文献・索引まで収束させる.latexmkrcをプロジェクトに置けば、エンジン選択やビルド経路を固定でき、再現性が上がる-pvcで執筆中の自動プレビュー、-c/-Cで後片付け
書籍や学術文書のように参照・索引が多い原稿ほど恩恵が大きく、CI での自動組版とも相性が良いツールです。