マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

luatexbase と luatex と fontspec と

前の記事で「fontspec を読み込んだ時点で luatexbase と luatex が衝突するので、カテゴリコードテーブルの機能が事実上使えなくなる」という話をしたが、よく調べてみると、その fontspec 自身がカテゴリコードテーブルを使っていることが判明した。

[fontspec.lua;35 行目]


function fontspec.sprint (...) tex.sprint(luatexbase.catcodetables['latex-package'], ...) end

じゃあ何故これで正常に動作するのかというと、luatex より後で luatexbase の方を読み込んでいるからのように思われる。例えば、fontspec より前に「luatexbase を内部で読み込むパッケージ」を読み込むと、luatex と luatexbase の読み込む順番が変わり、結果的に、前の記事で述べた現象と全く同じことが起きてエラーになる。

[test.tex]


% 文字コードUTF-8
\documentclass{article}
\usepackage{luaotfload} % これは luatexbase を内部で読み込む
\usepackage{fontspec}
\setmainfont[Script=CJK]{ipaexm.ttf}
\begin{document}
これは fontspec の実験です。
\end{document}

[lualatex test の実行結果]


! LaTeX Error: Missing \begin{document}.

See the LaTeX manual or LaTeX Companion for explanation.
Type H for immediate help.
...

l.5 \setmainfont{ipaexm.ttf}

?

つまり、fontspec は制御綴を TeX に出すために fontspec.sprint() を呼ぶが、実際には普通の文字として書き込まれるため、「プレアンブルに文章がある」というエラーが起こっている。