まともな文書を 1 本仕上げるには、latex を 2 回、その間に biber(文献)や makeindex(索引)……と、複数のコマンドを正しい順序・回数で回す必要があります。これを手で繰り返すのは面倒でミスのもと。そこを自動化するのが ビルドツール です。代表は 3 つ——回数を自動で見極める latexmk、設定を TOML で書く llmk、手順をソースに明示する arara。
なぜビルドツールが要るのか
相互参照や目次を確定させるには 最低 2 回 のコンパイルが要ります(1 回目で番号を .aux に書き、2 回目で本文へ反映)。参考文献があれば途中で biber か bibtex、索引があれば makeindex、用語集ならさらに別のコマンドが挟まり、しかも実行順と回数を間違えると番号がずれます。ビルドツールは、必要なコマンドを 正しい順序・必要なだけ 自動で回し、安定するまで繰り返してくれます。各コマンド単体の役割は「コンパイルコマンド」を参照してください。
latexmk — 自動でやってくれる定番
latexmk(John Collins 作の Perl スクリプト)は事実上の標準で、Overleaf も既定でこれを使います。.aux などの変化を見て 再実行が必要かを自分で判断 し、biber/bibtex や makeindex も適切なタイミングで呼びます。出力が安定するまで自動で回すので、利用者は実質「ビルドして」と言うだけです。
| オプション | 働き |
|---|---|
-pdf | pdflatex で PDF を作る |
-pdflua | lualatex で PDF を作る |
-pdfxe / -xelatex | xelatex で PDF を作る |
-pvc | ファイルを監視し、保存のたびに自動で再ビルド+表示更新 |
-c | 補助ファイル(aux/log など)を掃除。PDF は残す |
-C | PDF も含めて生成物をすべて掃除 |
とりわけ便利なのが -pvc(preview continuously)。ソースを保存するたびに必要な分だけ再ビルドし、ビューアを更新します。
latexmk -pdf -pvc document.tex # 保存のたび自動ビルド / rebuild on every save
latexmk -c # 補助ファイルを掃除 / clean aux files挙動は設定ファイル .latexmkrc(カレントの latexmkrc / .latexmkrc、または ~/.latexmkrc)に書けます。$pdf_mode で出力方式を選び、現在の latexmk では 1 が pdfLaTeX、2 が DVI→dvips→ps2pdf、3 が DVI→dvipdf、4 が LuaLaTeX、5 が XeLaTeX です。日本語なら $latex を uplatex に、$dvipdf を dvipdfmx にし、$pdf_mode = 3 で PDF 化を DVI 変換へ寄せる構成が定番です。
# .latexmkrc
$pdf_mode = 1; # 1 = pdflatex
$pdflatex = 'pdflatex -synctex=1 -interaction=nonstopmode %O %S';llmk — 設定を文書に同梱する
llmk(Light LaTeX Make、Takuto Asakura 氏) は、ビルド手順を TOML で宣言的に 書くツールです。llmk.toml に source(対象ファイル)や使うコマンドを書くか、.tex 内の マジックコメント に埋め込みます。狙いは「環境に依存せず、誰がどこで実行しても同じ結果になる」再現性。設定が文書と一緒に運べるので、共同執筆や配布に向きます。
# llmk.toml
latex = "lualatex"
source = "main.tex"マジックコメントを使う場合は、3 つ以上の + で挟んだ行に TOML を書きます(% !TEX 形式や YaTeX 形式も読めますが、TOML が最優先)。
% +++
% latex = "uplatex"
% dvipdf = "dvipdfmx"
% +++
\documentclass{ujarticle}arara — 手順をソースに明示する
arara(Island of TeX、Paulo Cereda 氏ら) は、ログを解析して回数を推測するのではなく、やることを作者が明示する タイプです。.tex の先頭に ディレクティブ をコメントで並べ、arara document.tex を実行すると、上から順に実行されます(各ステップが成功してはじめて次へ進む)。何が走るかがソースを見れば一目瞭然です。
% arara: pdflatex
% arara: biber
% arara: pdflatex
% arara: pdflatex: { synctex: yes }
\documentclass{article}各ディレクティブは ルール(コマンドの呼び方を定めた YAML ファイル)に対応します。pdflatex というディレクティブは pdflatex ルールに割り当てられ、{ synctex: yes } のようにオプションも渡せます。手順を完全に制御したいときや、特殊な工程を厳密に再現したいときに向きます。
どれを選ぶか
- latexmk — 回数を自動判定。最も普及し、
-pvcの自動プレビューが快適。迷ったらこれ。 - llmk — 設定を TOML で文書に同梱でき、環境に依存せず再現性が高い。共同・配布向き。
- arara — 手順をソースに明示。何が走るか一目瞭然で、工程を厳密に管理したいとき。
いずれも、(u)platex → dvipdfmx を手で順番に打つより安全で速い。まず迷ったら latexmk -pdf -pvc から始め、設定の持ち運びや明示性が欲しくなったら llmk・arara を検討するとよいでしょう。
ビルドツール章のプロジェクト契約
ビルドツールは便利なコマンド名ではなく、共同執筆者やCIとの プロジェクト契約 です。.latexmkrc、llmk.toml、araraディレクティブのどれを選ぶ場合も、「この原稿はどのエンジンで、文献をどのツールで処理し、索引を作り、PDFをどこへ出すか」をファイルとして残します。ビルドツール章のプロジェクト契約を先に書くと、エディタを変えても、PDF提出前に同じ手順を再現できます。
運用では、エディタのボタンも CI も同じ契約を呼ぶようにします。たとえば latexmk -pdf main.tex を人間だけが使い、CI が別の lualatex 直打ちを使っていると、フォントや文献処理の失敗が提出前まで見えません。まずコマンドラインで成功する1手を決め、それをエディタ・監視ビルド・CIへ配るのが安全です。