pdflatex・lualatex・platex… コマンド名が似ていて混乱しがちですが、その正体は 「フォーマット」と「エンジン」の組み合わせ です。フォーマットはあらかじめコンパイルしておいたマクロの集まり、エンジンはそれを実際に動かすプログラム。LaTeX はフォーマットの一つで、いくつものエンジンの上で走ります。このページでは LaTeX2e・pLaTeX/upLaTeX・LuaLaTeX・XeLaTeX を、その軸で整理します。
フォーマットとエンジン
エンジン とは、.tex ファイルを読んで組版する実行プログラムそのものです(TeX, pdfTeX, XeTeX, LuaTeX, e-pTeX など)。一方 フォーマット(format) とは、\documentclass や \section といった膨大なマクロをあらかじめ読み込み、**プリコンパイルして一つにまとめた状態(.fmt というダンプファイル)** を指します。エンジンは起動時にこの .fmt を一瞬で読み込むことで、毎回マクロを定義し直す手間を省いています。
つまり 「LaTeX」はフォーマットの名前 であって、エンジンの名前ではありません。同じ LaTeX フォーマットを別々のエンジンの上で走らせることができ、あなたが打つ コマンド名は「エンジン+フォーマット」の組み合わせを符号化 したものなのです。たとえば pdflatex は「pdfTeX エンジン+LaTeX フォーマット」、lualatex は「LuaTeX エンジン+LaTeX フォーマット」を意味します。
フォーマットは LaTeX だけではありません。クヌース自身が作った素の plain TeX、ConTeXt なども別のフォーマットです。本ページではもっとも広く使われている LaTeX フォーマットに絞り、それを載せる代表的なエンジンごとに見ていきます。
LaTeX(2e)
今日「LaTeX」と言えば、ほぼ例外なく LaTeX2e(ラテフ・ツーイー)を指します。レスリー・ランポートが作った LaTeX のマクロ体系を、LaTeX プロジェクト が引き継いで保守している現行版で、1994 年 に登場しました。それ以前の LaTeX 2.09 からの「小さな改訂」のつもりで 2e と名付けられ、本命の LaTeX3 への中継ぎとされていました。
ところがその LaTeX3 は単独の新カーネルとしては結実せず、その成果は expl3(LaTeX3 プログラミング層) という形で LaTeX2e の上に積み上げられました。expl3 は 2020 年以降カーネルに標準で読み込まれ、新機能の実装にも内部で広く使われています。結果として、私たちが日々使うのはあくまで LaTeX2e でありながら、その中身は LaTeX3 の技術で着実に近代化され続けています。
LaTeX2e のカーネルは、現在 年 2 回(おおむね 6 月と 11 月) の定期リリースで更新されています。文書の書き方は一貫していて、冒頭で \documentclass により文書クラスを選び、\begin{document} までの プリアンブル でパッケージ読み込みや設定を行い、本文を書く——という「クラス+プリアンブル」モデルが基本です。
このフォーマットを pdfTeX エンジン の上で走らせるのが、もっとも古典的で標準的な組み合わせです。同じ pdfTeX でも出力先で 2 つのコマンドに分かれます。latex は pdfTeX を DVI モード で動かして中間形式の DVI を出力し(後で別ツールで PDF へ変換)、pdflatex は pdfTeX が PDF を直接 出力します。今日の欧文中心の文書では pdflatex が事実上の定番です。
pLaTeX / upLaTeX
pLaTeX(ピー・ラテフ)と upLaTeX(ユーピー・ラテフ)は、日本語組版に特化したエンジンの上に LaTeX フォーマットを載せたものです。縦組み・ルビ・和文の行組版といった日本語固有の処理は、アスキー社が拡張した pTeX 系のエンジンが受け持ちます。platex は e-pTeX エンジン、uplatex は内部 Unicode 対応の e-upTeX エンジンの上で走ります。
この系統は 必ず DVI を出力 し、和文を含む DVI を **dvipdfmx** で PDF へ変換する、という二段構えが基本です(uplatex file.tex のあとに dvipdfmx file.dvi)。upmendex を併用すれば日本語の索引も作れます。文書クラスは奥村晴彦氏による jsarticle/jsbook(pLaTeX 用)、その Unicode 版 ujarticle など、そして近年の JIS X 4051 準拠の **jlreq** がよく使われます。
platex と uplatex の違いは、内部の文字の扱いです。旧来の platex は内部コードに制約があり外字や多言語に弱い一方、uplatex は内部を Unicode 化しており、ハングルやキリル文字を含む和文混在文書に強いのが利点です(なお 2023 年以降 platex は後方互換を保ったまま実行エンジンを e-upTeX へ移行しています)。新規の日本語論文では uplatex が標準的な選択肢です。
いつ使うか——日本の学会・出版社が pLaTeX 用のクラスファイルやスタイルを配っている とき、あるいは縦組みなど pTeX 系の成熟した和文組版に頼りたいときは、pLaTeX/upLaTeX が手堅い選択です。逆に OS のフォントをそのまま使いたい、Unicode をそのまま流し込みたいなら、後述の LuaLaTeX-ja が向きます。
LuaLaTeX
LuaLaTeX は、LuaTeX エンジン の上に LaTeX フォーマットを載せたものです。コマンドは lualatex。LuaTeX は pdfTeX を発展させたエンジンで、入力を Unicode で直接扱い、OS にインストールされた OpenType / TrueType のシステムフォント を fontspec パッケージで読み込めます。出力は中間形式を経ずに PDF を直接 生成します。
名前のとおり最大の特徴は、組版エンジンに Lua スクリプト言語が組み込まれている ことです。\directlua{...} で TeX の内部に踏み込んだ処理を Lua で書け、従来は困難だった拡張がしやすくなりました。日本語組版は **luatexja** パッケージが担い、pLaTeX に匹敵する品質の和文組版を、システムフォントと Unicode のまま実現します。
こうした近代性から、LaTeX チームも現代的なエンジンとして LuaLaTeX を推す 流れにあり、新規プロジェクトの既定として勧められることが増えています。難点は処理速度で、pdflatex や xelatex に比べてコンパイルが重め(XeLaTeX のおよそ 2 倍かかることもある)です。日本語・多言語・凝ったフォント運用・プログラム的な組版を一台でこなしたいなら、まず候補に挙がるエンジンです。
XeLaTeX
XeLaTeX(ゼットラテフ/ジーラテフ)は、XeTeX エンジン の上に LaTeX フォーマットを載せたものです。コマンドは xelatex。LuaLaTeX と同じく Unicode 入力 と、fontspec による システムフォントの直接利用 に対応します。出力は、内部に組み込まれた **xdvipdfmx(dvipdfmx 由来のドライバ)を通じて PDF** を生成します。
XeLaTeX の持ち味は シンプルさ です。「とにかく手元の OS フォントをそのまま使いたい」という用途では、LuaLaTeX より設定が軽く、コンパイルも速い傾向があります。非ラテン文字のフォント名(たとえば日本語名のフォント)を名前で指定できるのも XeLaTeX の利点です。一方で、Lua のような深いプログラマビリティは持たず、近年の機能拡張の主軸は LuaTeX 側に移りつつあります。
コマンド早見表
同じ LaTeX フォーマットでも、コマンド名によって背後のエンジン・出力形式・フォントの扱いが変わります。次の表で、いちばん左の コマンド名 から右へたどってください。
| コマンド | エンジン | 出力 | Unicode・システムフォント |
|---|---|---|---|
latex | pdfTeX(DVI モード) | DVI → 要変換 | ×(要 inputenc 等) |
pdflatex | pdfTeX | PDF(直接) | ×(要 inputenc 等) |
platex | e-pTeX | DVI → dvipdfmx | 日本語可・従来フォント |
uplatex | e-upTeX | DVI → dvipdfmx | 内部 Unicode・従来フォント |
lualatex | LuaTeX | PDF(直接) | ○ fontspec / luatexja |
xelatex | XeTeX | PDF(xdvipdfmx 経由) | ○ fontspec |
実際のコマンド操作で見ると、PDF を直接吐くエンジンは 1 コマンドで完結し、DVI 経由のものは変換を 1 段はさみます。
# pdfTeX: PDF を直接出力 / emits PDF directly
$ pdflatex main.tex # → main.pdf
# LuaTeX: PDF を直接出力 / emits PDF directly
$ lualatex main.tex # → main.pdf
# upLaTeX: DVI を出力し、dvipdfmx で PDF へ変換
# upLaTeX emits DVI, then dvipdfmx converts to PDF
$ uplatex main.tex # → main.dvi
$ dvipdfmx main.dvi # → main.pdfどれを選ぶか
おおまかな指針は次のとおりです。詳しい判断基準(速度・パッケージ互換・日本語事情など)は「エンジンの選び方」のページで掘り下げます。
- 欧文中心で手早く →
pdflatex。最も枯れていて、対応パッケージも最大。 - 日本語の論文・既存のクラス指定 →
uplatex(必要に応じてplatex)。DVI →dvipdfmx。 - 現代的に一台で何でも・日本語も →
lualatex。Unicode+システムフォント+luatexja。 - システムフォントを手軽に使いたい →
xelatex。設定が軽く、コンパイルも速め。