最新の TeX Live では LuaLaTeX で bxjsarticle できるらしい。
\documentclass[lualatex,ja=standard]{bxjsarticle} \begin{document} $a + b = c$ \end{document}
つまり、expl3 が改訂されてコレが解決したということ。
- bxjsarticleでエラー (TeX Forum)
以下はこのスレッドの某 ZR 氏の返信およびアレの内容を前提とする。
何が変わったか
\etex_ifdefined:D \luatexsuppressfontnotfounderror \tex_let:D \luatex_alignmark:D \luatexalignmark \tex_let:D \luatex_aligntab:D \luatexaligntab \tex_let:D \luatex_attribute:D \luatexattribute \tex_let:D \luatex_attributedef:D \luatexattributedef ...... \tex_fi:D
要するに、「luatex 付の制御綴が定義されているか」の判定に用いるプリミティブを \catcodetable
から \suppressfontnotfounderror
に変えたわけである。luatexbase は“\luatexsuppressfontnotfounderror
”は定義しないので、取りあえずこれで luatexbase との衝突は避けられる。
ただこの解決法だと、結局同じ問題を抱え続けているともいえる。つまり、「互換性のために」次のようなコードが実行するパッケージが存在すると、それは再び expl3 の誤動作を引き起こす。
\let\luatexsuppressfontnotfounderror\suppressfontnotfounderror
つまり、LaTeX 用のパッケージでは、このコードは「絶対に書いてはいけない」ということである。
LuaTeX プリミティブする方法
もちろん、「luatex 無し」の方が新しい仕様なので、これから新しいコードを書く場合*1は「luatex 無し」の制御綴方を用いるべきである。だから、上記のような「luatex 有り」の方に向けてコピーするようなコードを書く必要は生じないと思われる。
「luatex 無し」の名前を用いるとなると。古い(2015-10-01 より前の)環境でもそれを使えるようにする必要がある。それをする一番簡単な方法は、次のように Lua の tex.enableprimitives()
関数を利用することである。*2
\directlua{tex.enableprimitives("", % 必要なプリミティブの名前を並べる { "latelua", "luaescapestring", "suppressfontnotfounderror" })}