【TeX】latexmkとは

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文書のビルドプロセス全体を自動化し、開発効率を大幅に向上させるツールです。特に複雑な文書や継続的な編集作業において、その真価を発揮します。

← ITQ Lab トップに戻る