latexmkは、LaTeX文書のビルドプロセスを自動化するPerlスクリプトです。複雑なLaTeX文書の依存関係を管理し、必要な回数だけコンパイルを実行してくれます。
1. latexmkの基本的な仕組み
1.1. 依存関係の自動検出
document.tex
├── 参照している画像ファイル
├── \input や \include で読み込まれるファイル
├── 参考文献ファイル (.bib)
├── 索引ファイル
└── その他の依存ファイル
latexmkは文書を解析して、これらの依存関係を自動的に検出します。
1.2. ビルドサイクルの自動化
LaTeXでは、参照や目次、参考文献を正しく表示するために複数回のコンパイルが必要です:
第1回: pdflatex document.tex → 基本的な組版、.aux ファイル生成
第2回: bibtex document → 参考文献処理(必要な場合)
第3回: pdflatex document.tex → 参考文献の参照を解決
第4回: pdflatex document.tex → 相互参照、ページ番号を確定
latexmkは、ファイルの変更状況を監視して、必要な回数だけ自動的にコンパイルを実行します。
2. latexmkの動作メカニズム
2.1. ファイルタイムスタンプの監視
perl
# .latexmkrcでの設定例
$max_repeat = 5; # 最大5回まで再コンパイル
latexmkは以下をチェックします:
- ソースファイルの最終更新時間
- 生成されたファイルの更新時間
.aux、.toc、.lofなどの補助ファイルの内容変化
2.2. 処理の流れ
latexmkの処理フロー
flowchart TD
A[latexmk 開始] --> B[ソースファイル解析]
B --> C[依存ファイル検出]
C --> D[第1回コンパイル実行]
D --> E[補助ファイル変化チェック]
E --> F{変化あり?}
F -->|Yes| G[再コンパイル実行]
F -->|No| H[ビルド完了]
G --> I[最大回数チェック]
I --> J{上限到達?}
J -->|No| E
J -->|Yes| K[警告出力してビルド完了]
style A fill:#e1f5fe
style H fill:#c8e6c9
style K fill:#ffecb3
latexmk処理フロー解説
1. 初期解析フェーズ
- メインの
.texファイルを読み込み \input、\include、\usepackageを解析- 画像ファイル、参考文献ファイルを検出
2. コンパイル実行フェーズ
- 指定されたエンジン(pdflatex, lualatex, xelatex等)でコンパイル
- ログを解析してエラー・警告を検出
- 補助ファイル(
.aux,.toc,.bbl等)の変化を監視
3. 依存関係チェックフェーズ
- 補助ファイルの内容が前回から変化したかチェック
- 未解決の相互参照があるかチェック
- 参考文献処理が必要かチェック
4. 継続判定フェーズ
- 変化があれば再コンパイルを実行
- 最大試行回数に達したら終了
- すべてが安定したら終了
3. .latexmkrcによる設定カスタマイズ
3.1. エンジン指定
perl
# PDF生成方法の指定
$pdf_mode = 1; # pdflatex使用
$pdf_mode = 4; # lualatex使用
$pdf_mode = 5; # xelatex使用
# 個別コマンドの設定
$lualatex = 'lualatex %O -synctex=1 -interaction=nonstopmode %S';
3.2. 依存関係の追加設定
perl
# カスタム依存関係の追加
add_cus_dep('glo', 'gls', 0, 'run_makeglossaries');
sub run_makeglossaries {
system("makeglossaries $_[0]");
}
3.3. 出力制御
perl
$out_dir = 'build'; # 出力ディレクトリ
$aux_dir = 'build'; # 補助ファイルディレクトリ
$clean_ext = 'synctex.gz'; # 追加削除対象
4. latexmkの利点
4.1. 自動化
- 手動で何回コンパイルすべきか考える必要がない
- 参考文献、索引、用語集なども自動処理
4.2. 効率性
- 不要なコンパイルを避ける
- 変更されたファイルのみを対象とする
4.3. 一貫性
- プロジェクト全体で統一されたビルドプロセス
- チーム開発での環境統一
5. 実行モード
5.1. 単発実行
bash
latexmk document.tex
5.2. 継続監視モード
bash
latexmk -pvc document.tex
# ファイル変更を監視し、自動で再コンパイル
5.3. クリーンアップ
bash
latexmk -c # 補助ファイル削除
latexmk -C # PDFも含めて削除
このように、latexmkはLaTeX文書のビルドプロセス全体を自動化し、開発効率を大幅に向上させるツールです。特に複雑な文書や継続的な編集作業において、その真価を発揮します。