pdfLaTeX・XeLaTeX・LuaLaTeX・upLaTeX——どれを使えばよいのか。このページは迷ったときの実践的な判断指針です。まず結論(おすすめ)を示し、次に選択を左右する要素を解き、最後に比較表と乗り換え時の注意点をまとめます。
まずは結論
細かい話に入る前に、目的別の第一候補を挙げます。多くの場合、これで十分です。「エンジン(処理プログラム)」と「フォーマット(命令体系の LaTeX)」を組み合わせた名前 であることは「LaTeX フォーマット」のページで扱いました。ここでは実際に打ち込むコマンド名(pdflatex など)で示します。
- 欧文(英語・ヨーロッパ言語)で、最も素直に・パッケージ互換性を最大にしたい → pdfLaTeX(
pdflatex)。LaTeX の事実上の標準で、解説も既存資産も最も豊富です。 - OS のシステムフォント(OpenType)を使いたい・Unicode で多言語を扱いたい・できるだけ単純に → XeLaTeX(
xelatex)。fontspecで日本語以外の多言語が手軽です。 - システムフォント+Unicode に加えて、プログラマブルな細かい制御や将来性が欲しい → LuaLaTeX(
lualatex)。Lua で組版に介入でき、LaTeX 開発陣も将来の標準と位置づけています。 - 日本語 → upLaTeX(
uplatex)が王道で安全な選択。LuaLaTeX + luatexja は Unicode ネイティブで現代的(ただし遅め)。クラスjlreqはどちらでも使えます。
ひとことで言えば、欧文は pdfLaTeX、システムフォントや Unicode が要るなら XeLaTeX か LuaLaTeX、日本語は upLaTeX か LuaLaTeX。新規プロジェクトでとくに事情がなければ、欧文は pdfLaTeX、日本語は upLaTeX から始めるのが堅実です。「将来も含めて Unicode で統一したい」なら LuaLaTeX を選ぶ価値があります。
選択を左右する要素
「結論」が当てはまらない場合や理由を知りたい場合のために、判断軸を一つずつ見ていきます。多くは フォントと文字コードの扱い に行き着きます。
フォント。 pdfTeX は伝統的な TeX のフォント方式で、TFM(TeX Font Metric)と Type1/PK のフォントを使います。OS にインストールされた一般のフォントをそのまま指定することはできません。対して XeTeX と LuaTeX は システムにある TrueType / OpenType フォントを直接使える のが最大の違いで、fontspec パッケージで \setmainfont{Times New Roman} のように名前で指定します。fontspec は XeTeX か LuaTeX が必須 で、pdfLaTeX では動きません。
Unicode 入力。 XeTeX・LuaTeX は内部が Unicode ネイティブ で、ソースの UTF-8 をそのまま扱えます。pdfTeX も、2018 年以降の LaTeX では UTF-8 が既定の入力エンコーディングになり \usepackage[utf8]{inputenc} は不要になりましたが、内部では結局 8 ビットのフォントエンコーディング(T1 など)に対応付ける ため、扱える文字は使う fontenc/フォント次第で、任意の Unicode 文字や CJK をそのまま打てるわけではありません。多言語・記号を気兼ねなく直接入力したいなら XeTeX/LuaTeX が有利です。
パッケージ互換性。 ここは見落としがちな実務上の落とし穴です。一部のパッケージは特定エンジン専用です。たとえば fontspec・unicode-math は XeTeX/LuaTeX 専用。逆に pstricks は DVI を経由する pdfLaTeX や XeLaTeX では使えますが、LuaLaTeX では原則使えません。microtype の一部機能(後述)も pdfTeX/LuaTeX 寄りです。古い解説どおりに書いたソースが新しいエンジンで通らない、という逆向きの非互換も起こります。手持ちのテンプレートや学会クラスが要求するエンジン を最初に確認するのが鉄則です。
速度。 体感差ははっきりあります。pdfTeX が最速、XeTeX が中間、LuaTeX が最も遅い のが一般的な順序です。LuaTeX は Lua VM の初期化や HarfBuzz によるフォントシェーピングのぶん重く、フォントを多用する大きな文書では pdfLaTeX より 3 倍以上遅くなることもあります(単純な文書なら差は小さい)。何百回もコンパイルを繰り返す執筆中は、この差が地味に効いてきます。
マイクロタイポグラフィ。 microtype パッケージによる 文字のはみ出し組み(protrusion) と フォント拡張(font expansion) は、欧文の見た目を一段引き上げます。ここはエンジン差が大きく、protrusion は三者とも対応しますが、font expansion は pdfTeX と LuaTeX のみで XeTeX は非対応。さらに字間・カーニングの微調整は pdfTeX のみ、リガチャの無効化は pdfTeX/LuaTeX、文字間隔(letterspacing)は三者対応です。欧文の最高の仕上がりを求めるなら pdfLaTeX または LuaLaTeX が無難です。
グラフィック・PDF 機能とプログラマビリティ。 いずれのエンジンも graphicx で PNG・JPEG・PDF を取り込め、\includegraphics の使い勝手はほぼ共通です(EPS は pdfLaTeX が自動変換)。LuaTeX の固有の強みは Lua による制御 で、組版の途中処理に手を入れたり、外部データを読み込んで表を生成したりと、マクロでは難しい処理が書けます。fontspec・unicode-math を含む現代的なパッケージ群との相性もよく、これが「将来性」と言われるゆえんです。
CJK・日本語という特別な事情。 日本語の縦組み・禁則・和欧文間スペースなどを正しく組むには、専用の仕組みが要ります。長年の定番は pTeX 系エンジン(uplatex)で、日本語用の JFM(和文フォントメトリック) を使い、安定して速いのが利点。一方 LuaLaTeX + luatexja はすべてを Unicode で扱う現代的な方式で、システムフォントを自由に使えますが、前述のとおり遅めです。クラス jlreq(日本語組版処理の要件に基づく)は platex/uplatex/lualatex のいずれでも動き、エンジンを自動判別します。詳しくは日本語のページに譲ります。
比較表
主要な 4 つを、選択を左右する軸で並べます。コマンド名が左端の列です。microtype は protrusion/expansion を分けて示しました(X は非対応)。
| コマンド | Unicode・システムフォント | microtype | 速度 | 主な用途 |
|---|---|---|---|---|
pdflatex | 不可(TFM/Type1、UTF-8 入力は可だが 8 ビット対応付け) | protrusion ◯ / expansion ◯ | 最速 | 欧文の標準。最大の互換性 |
xelatex | 可(fontspec で OpenType を直接) | protrusion ◯ / expansion ✕ | 中間 | 多言語・OpenType を手軽に |
lualatex | 可(fontspec + Lua で制御) | protrusion ◯ / expansion ◯ | 最も遅い | 現代的・将来性。日本語は luatexja |
uplatex | 和文は JFM(DVI 経由)。UTF-8 入力可 | 欧文部分のみ限定的 | 速い | 日本語論文の定番・安定 |
表はあくまで目安です。たとえば pdfLaTeX も \usepackage[T1]{fontenc} と適切な欧文フォントパッケージを併せれば多くのヨーロッパ言語を美しく組めますし、XeLaTeX でも microtype の protrusion だけは効きます。「できる/できない」の二択ではなく、手間と仕上がりのバランス で読んでください。
乗り換え時の注意点
エンジンを途中で替えると、同じソースでも結果が変わる場面があります。実際にハマりやすい点を挙げます。
フォント/エンコーディングの設定が変わる。 pdfLaTeX 向けの定番だった \usepackage[utf8]{inputenc} と \usepackage[T1]{fontenc} は、XeLaTeX/LuaLaTeX では不要かつ基本的に書きません(内部 Unicode のため)。代わりに fontspec で \setmainfont などを使います。pdfLaTeX 用のプリアンブルをそのまま XeLaTeX に持っていくと、警告やフォント関連のエラーが出ることがあります。
% pdfLaTeX 向け(旧来)/ for pdfLaTeX (traditional)
% \usepackage[utf8]{inputenc}
% \usepackage[T1]{fontenc}
% XeLaTeX / LuaLaTeX 向け / for XeLaTeX / LuaLaTeX
\usepackage{fontspec}
\setmainfont{TeX Gyre Termes} % OS / TeX のフォントを名前で指定microtype の効き方が違う。** 同じ \usepackage{microtype} でも、XeLaTeX では font expansion が無効になるなど、得られる効果がエンジンで変わります。pdfLaTeX で詰めた組版を XeLaTeX に移すと、行長や改行位置がわずかに変わることがあります。
パッケージの可否が変わる。 乗り換え先で使えなくなる(または初めて使える)パッケージがあります。pstricks 中心の図版を LuaLaTeX に持ち込むと動きません(pstricks は LuaLaTeX 非対応)。逆に fontspec・unicode-math は pdfLaTeX では使えません。学会・出版社のテンプレートは 想定エンジンが決まっている ことが多いので、まずそれに従うのが安全です。
日本語は和文フォント設定ごと変わる。 upLaTeX(pTeX 系)と LuaLaTeX + luatexja では、和文フォントの指定方法も埋め込みの仕組みも別物です。日本語文書のエンジン移行は、欧文より影響が大きいと考えておきましょう。具体的なコマンドの対応は「コンパイルコマンド」のページを参照してください。