半年前あたりから LuaTeX が“リストラ”を進めていて、大きな仕様変更が続いている。
- バージョン 0.81 において、プリミティブの名称に関する整理が行われた。この結果、pdfTeX との(プリミティブ名に関する)互換性が劣化した。
- バージョン 0.85 において、プリミティブの名称に関して根本的な方針の転換が行われた。この結果、pdfTeX との(プリミティブ名に関する)互換性がほぼ失われた。またこの変更のため 2015/10/01 版(当時の最新)の LaTeX は 0.85 版以降の LuaTeX では正常に動作しない状態になっていた。(最近のリリースにおいて対応が行われた。)これについて解説することを目的とした日本語の記事は見当たらないが、例えば次の記事で様子が少し触れられている。 これに加えて、出力ストリームの個数が従来の 16(元祖 TeX と同じ)から 128 まで拡張された(つまり、
\write127
まで可能)。この影響で、「\write18
でシェル実行を行う」という(ほぼ全てのエンジンに備わっている)文法が廃止された。
すなわち、この版の LuaTeX は pdfTeX と比較すると機能的には上位互換であるが、ソース記述としては違うことになる。つまり、同じことをするのに違うコードを書く必要がある。
0.86 版以降の変更は比較的小規模(または“多くのユーザには影響しない”)ものがほとんどであるが、その中でただ一つ、「LuaLaTeX で日本語している」人にとって大きな影響をもつ点が存在する。
PDF 出力時の \mag のサポートが
0.87 版で廃止された。
例えば、次のような単純な文書で試してみる。
% plain TeX文書, 文字コードはUTF-8 \mag=2000 % ページを2倍に拡大 \font\bigfont=cmr10 at 100pt \parindent=0pt \bigfont Hello\vfill Lua{\TeX}!\eject\bye
これを LuaTeX の 0.85 版と 0.89 版(現在の最新)を用いてコンパイルすると結果は以下のようになる。*1なお、0.85 版での出力は pdfTeX での出力と一致する。最新版では、\mag
がアレになっていることが判る。
これも一種の「pdfTeX との互換が失われた」事例といえるが、これまで挙げたものと異なり、「機能そのものが失われている」ため、より厄介な問題といえるだろう。
そしてこれ日本語文書作成者によって特に影響が大きい問題である。何故かというと、LuaLaTeX で日本語文書を作成しているユーザはそのほとんどが ltjsナントカ クラスを使っているはずである。ところが、(よく知られているように)jsナントカ クラスはレイアウト設定のために mag
設定を利用していて、これは ltjsナントカ でもそのまま引き継がれている。今はまだ LuaTeX-ja そのものが新しい LuaTeX に対応できていないので表面化していないが、対応したとしても、肝心の ltjsナントカ クラスは LuaTeX 0.87 以降では正常に機能しないはずである。