XeTeX(ゼットテック/ザイテック)は、UTF-8 をそのまま読み込み、OS にインストール済みのフォントを直接使える TeX エンジンです。TFM やマップファイルの設定なしに、fontspec パッケージで「このフォントを使う」と書くだけで OpenType フォントが使えます。作者は Jonathan Kew。xelatex として呼び出すのが一般的です。
XeTeX とは
古典的な TeX や pdfTeX では、フォントを使うには TFM(TeX Font Metrics) という寸法ファイルを用意し、.map ファイルで実体のフォントへ対応づける、という手間が必要でした。XeTeX はこの手間を取り払い、OS が知っているフォント(OpenType / TrueType、macOS では AAT も)をそのまま指名して使える ようにしたエンジンです。入力ファイルは既定で UTF-8 として解釈され、日本語・ギリシャ文字・アクセント付き文字などを生のまま書けます。
もともと Jonathan Kew が SIL International のために、当時の Mac の組版技術 AAT(Apple Advanced Typography) を使う形で書き始めたもので、のちに Windows・Linux でも動く クロスプラットフォーム なエンジンになりました。内部には拡張機能集 e-TeX を含んでおり、現代の LaTeX が前提とする機能はひととおり揃っています。
名前の Xe は、TeX の末尾の X(ギリシャ文字 χ)を反転させた発想で、「テックの逆」を表す洒落です。慣習的に英語では「ズィー/ゼ・テック」のように読まれますが、読み方は揺れがあります。
最小の例
次が、xelatex でコンパイルできる最小の文書です。fontspec を読み込み、\setmainfont で本文フォントを フォント名そのまま 指定します。Latin Modern や TeX Gyre などの同梱フォントなら追加インストールなしで動きますが、Hiragino Mincho ProN のように OS のフォントも同じ書き方で使えます。
\documentclass{article}
\usepackage{fontspec}
\setmainfont{TeX Gyre Termes}
\begin{document}
Hello, \XeTeX! こんにちは、世界。
\[ E = mc^2 \]
\end{document}ポイントは、**inputenc や fontenc を読み込む必要がない** ことです。UTF-8 入力と Unicode フォントが前提なので、古典的な pdfLaTeX で必要だった文字コード回りのおまじないが消えます。コンパイルは xelatex document.tex の一発(相互参照があれば 2 回)です。
フォント — fontspec が主役
XeTeX のフォント機能は、実質 **fontspec パッケージ** を通して使います。本文・サンセリフ・等幅をそれぞれ次のように設定し、特定の用途のために新しいフォントファミリを起こすこともできます。
\usepackage{fontspec}
\setmainfont{TeX Gyre Pagella}
\setsansfont{TeX Gyre Heros}
\setmonofont{TeX Gyre Cursor}
\newfontfamily\headingfont{TeX Gyre Adventor}さらに fontspec は、OpenType フォントが内部に持つ OpenType 機能 を引き出せます。たとえばオプションでヒストリカルな合字、スモールキャピタル、オールドスタイル数字(古典数字) などを切り替えられます。フォント側に未対応の機能は、当然ながら効きません。
\setmainfont{TeX Gyre Pagella}[
Ligatures = {Common, Historic},
Numbers = OldStyle,
SmallCapsFeatures = {Letters = SmallCaps},
]
% 生の OpenType / Graphite タグを直接指定:
\newfontfamily\swashfont{EB Garamond}[RawFeature = {+swsh}]高度な指定では、Renderer(HarfBuzz / AAT / Graphite の描画系を選ぶ)や RawFeature(フォントの生のフィーチャタグを直接渡す)といったオプションも使えます。入力エンコーディングを途中で切り替えたいときは、エンジン組み込みの命令 \XeTeXinputencoding も用意されています。数式に Unicode フォント(STIX Two Math、Latin Modern Math など)を使いたい場合は、**unicode-math パッケージ** と組み合わせます。
パイプライン — XDV から PDF へ
pdfTeX が PDF を直接書き出すのに対し、XeTeX は 2 段構え です。まずエンジンが XDV(拡張 DVI。XeTeX DeVice-independent) という中間ファイルを出力し、それを同梱の **xdvipdfmx** ドライバが PDF に変換します。利用者から見れば xelatex の一回の実行で完結しますが、内部ではこの 2 段階が走っています(バージョン 0.997 以降、全プラットフォームで xdvipdfmx が既定ドライバ)。
この設計は、**\special やドライバ依存のオプション、図版の取り込み** に影響します。実際の PDF 化を担うのは xdvipdfmx なので、graphicx などでドライバを明示するときは xetex(= xdvipdfmx)を指す指定になります。多くのパッケージは XeTeX を自動検出するため、ふだんは意識せずに済みます。
多言語と複雑な文字体系
XeTeX が広く使われる理由のひとつが、右横書き(RTL)と複雑な文字体系への強さ です。現代の XeTeX は HarfBuzz(バージョン 0.9999、2013 年に従来の ICU LayoutEngine から移行)でグリフを整形(シェーピング)し、アラビア文字の連結や、合字の多い文字体系を正しく組めます。
言語の切り替えには、XeTeX / LuaTeX 時代の **polyglossia パッケージ**(古典的な babel の置き換え)を使います。RTL の組版は bidi パッケージが受け持ち、polyglossia はアラビア語・ヘブライ語などを要求すると自動的に bidi を読み込みます。中国語・韓国語・日本語(CJK)も **xeCJK で扱えます — ただし日本語に関しては、縦組みや和文の細かな組版規則のために LuaTeX-ja(luatexja)や upLaTeX** を選ぶ人も多いのが実情です。
LuaTeX との違い
XeTeX と LuaTeX は、どちらも「Unicode 入力+システムフォント」という現代的な土台を共有しますが、性格が違います。XeTeX は単純で速い —「とにかく OS のフォントを Unicode で使いたい」という用途に向き、長年使われて 安定・成熟 しています。一方 LuaTeX は組版エンジンに Lua 言語を組み込み、低水準のフックを通じて挙動を細かくプログラムできます。
裏を返せば、XeTeX は Lua を実行できず、低水準のフックも少なめ です。新しいフォント技術や組版機構の開発は LuaTeX 側に集まる傾向があります。「手軽さ・安定」なら XeTeX、「プログラマビリティ・将来性」なら LuaTeX、というのが大まかな住み分けです。
| 観点 | XeTeX | LuaTeX |
|---|---|---|
Unicode 入力 | 対応(UTF-8 既定) | 対応(UTF-8 既定) |
システムフォント | fontspec で直接 | fontspec で直接 |
シェーピング | HarfBuzz / AAT / Graphite | HarfBuzz(luaotfload) |
PDF 化 | XDV → xdvipdfmx(2 段) | 直接出力 |
スクリプト言語 | なし | Lua 組み込み |
性格 | 単純・安定・成熟 | プログラマブル・発展中 |
こんなときに XeTeX
- OS のフォントをそのまま使いたい。 OpenType / TrueType をフォント名で指名するだけ。
- Unicode をそのまま書きたい。 UTF-8 入力が既定で、文字コード回りの設定が不要。
- 多言語・RTL を組みたい。 polyglossia + bidi でアラビア語・ヘブライ語などに強い。
- 手早く・確実に。 設定が少なく、長年使われてきた安定したエンジン。
- Lua による作り込みが要るなら LuaTeX、和文の精密な組版なら upLaTeX / luatexja を検討。