マクロツイーター

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

LuaTeX や LaTeX や LuaLaTeX が新しくなってアレ(2)

前回の続き)
LaTeX が変わった話

以前に「LaTeX のメンテナンスのポリシーが大きく変わった」という話を伝えた。新しい方針では、拡張エンジンに対する最も基本的なサポートを(これまでは第三者のパッケージで行っていたのに対して)カーネルで提供することになった。

  • 最新(2015-10-01)の更新では、LuaTeX 拡張機能についてのサポートがカーネルに入った。LuaTeX の拡張機能のサポートは従来は luatexbase というパッケージが行っていたが、カーネルのコードはこれを元にして実装されているようである。(ただしインタフェースは全く同一ではない。)
  • 新しいカーネルと同時に新しい版の luatexbase もリリースされていて、そこでは新しいカーネルの機能を用いて従来の luatexbase のインタフェースを実装している(つまり互換レイヤーを成している)。
  • 従って、luatexbase を利用したパッケージは新しい LaTeX でそのまま動作することが期待できる。

その他の大きな変更としては、「LuaTeX 特有のプリミティブの名前の扱い」についてである。

  • 従来は、各種パッケージで出現する制御綴との衝突を避けるため、LuaTeX 特有(pdfTeX にはない)の拡張プリミティブについて「名前に luatex を付ける(例えば、\luaescapestring プリミティブは \luatexluaescapestring という制御綴で定義する)」という規則にしていた。
  • しかし、この措置による開発者の混乱が大きかったようで、新しい版では本来の名前(\luaescapestring 等)で(のみ)定義されるようになる。
  • この変更は当然、互換性を崩すものとなっている。しかも、前回に述べた LuaTeX エンジンのプリミティブ名変更とは異なり、こちらは LaTeX カーネルやパッケージの更新なので通常通り数日内に TeX Live に反映されることになる。従って、直近ではこちらの変更の方が影響(パッケージの動作不良の発生など)が大きいのではないかと思われる。
  • ただし、\luaescapestring\latelua などの数個のプリミティブに関しては、更新後の luatexbase において luatex 付の制御綴を定義して互換性を確保している。この“数個”の選択については、恐らく実際の luatexbase の使用状況を観察した上で決められたのだと思う。
  • つまり、luatexbase パッケージを内部で読み込むパッケージについては、恐らく影響は(ほとんど)ないのだと思う。
  • 先日の記事luacode パッケージを使用したコードを掲載したが、luacode パッケージは(luatexbase を利用するため)新しい LaTeX で正常に動作している。
  • 一方で、luatexbase を利用しないパッケージでは不具合が出るかもしれない。特に、expl3 を利用したものは怪しそうである。先日の TeX Forum で報告された不具合も expl3 が原因…?

今回の LaTeX の変更に関する詳細は「LaTeX News」の Issue 23(現在の最新号)に書かれている。コマンド「texdoc ltnews」を実行すると、過去の「LaTeX News」を総集した PDF 文書が開くので、詳細はそちらを見てほしい。