エンジン・フォーマットの選び方

pdfLaTeX・XeLaTeX・LuaLaTeX・upLaTeX——どれを使えばよいのか。このページは迷ったときの実践的な判断指針です。まず結論(おすすめ)を示し、次に選択を左右する要素を解き、最後に比較表と乗り換え時の注意点をまとめます。

まずは結論

細かい話に入る前に、目的別の第一候補を挙げます。多くの場合、これで十分です。「エンジン(処理プログラム)」と「フォーマット(命令体系の LaTeX)」を組み合わせた名前 であることは「LaTeX フォーマット」のページで扱いました。ここでは実際に打ち込むコマンド名(pdflatex など)で示します。

  • 欧文(英語・ヨーロッパ言語)で、最も素直に・パッケージ互換性を最大にしたいpdfLaTeXpdflatex)。LaTeX の事実上の標準で、解説も既存資産も最も豊富です。
  • OS のシステムフォント(OpenType)を使いたい・Unicode で多言語を扱いたい・できるだけ単純にXeLaTeXxelatex)。fontspec で日本語以外の多言語が手軽です。
  • システムフォント+Unicode に加えて、プログラマブルな細かい制御や将来性が欲しいLuaLaTeXlualatex)。Lua で組版に介入でき、LaTeX 開発陣も将来の標準と位置づけています。
  • 日本語upLaTeXuplatex)が王道で安全な選択。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} のように名前で指定します。fontspecXeTeX か LuaTeX が必須 で、pdfLaTeX では動きません。

Unicode 入力。 XeTeX・LuaTeX は内部が Unicode ネイティブ で、ソースの UTF-8 をそのまま扱えます。pdfTeX も、2018 年以降の LaTeX では UTF-8 が既定の入力エンコーディングになり \usepackage[utf8]{inputenc} は不要になりましたが、内部では結局 8 ビットのフォントエンコーディング(T1 など)に対応付ける ため、扱える文字は使う fontenc/フォント次第で、任意の Unicode 文字や CJK をそのまま打てるわけではありません。多言語・記号を気兼ねなく直接入力したいなら XeTeX/LuaTeX が有利です。

パッケージ互換性。 ここは見落としがちな実務上の落とし穴です。一部のパッケージは特定エンジン専用です。たとえば fontspecunicode-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 による制御 で、組版の途中処理に手を入れたり、外部データを読み込んで表を生成したりと、マクロでは難しい処理が書けます。fontspecunicode-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 に持っていくと、警告やフォント関連のエラーが出ることがあります。

latex
% 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 非対応)。逆に fontspecunicode-math は pdfLaTeX では使えません。学会・出版社のテンプレートは 想定エンジンが決まっている ことが多いので、まずそれに従うのが安全です。

日本語は和文フォント設定ごと変わる。 upLaTeX(pTeX 系)と LuaLaTeX + luatexja では、和文フォントの指定方法も埋め込みの仕組みも別物です。日本語文書のエンジン移行は、欧文より影響が大きいと考えておきましょう。具体的なコマンドの対応は「コンパイルコマンド」のページを参照してください。