アクティブ文字の \ifcsname の LuaTeX 類似物

アクティブ文字の \ifcsname の LuaTeX 類似物

pdfTeX または XeTeX では、次のコードはアクティブな文字を実行し、最終的に次のようなエラーを生成しますInvalid code (1114112)(ただし、pdfTeX では 256 です)。

\catcode`*=13 % active
\count0=32
\def\step{%
  \advance\count0 by 1
  \lccode`*=\count0
  \lowercase{\ifx\undefined*\else\message{\string*}\fi}%
  \step
}
\step

LuaTeX ではメモリ不足になります。私の推測では、制御シーケンスなどのアクティブ文字がハッシュ テーブルに追加されます。\ifcsnameアクティブ文字に対して、制御シーケンスをハッシュ テーブルに追加しない の類似物が欲しいです。

答え1

マニュアルにはこう書いてある

アクティブ文字は、他の方法では取得できないプレフィックスを使用する特殊なタイプの複数文字制御シーケンスとして内部的に実装されています。

ソースを調べてみると、このプレフィックスは UTF-8 では U+FFFF = 239,191,191 であることがわかったので、次のようにすればよいと思います。

`\catcode`∞=\active
\def∞{and beyond}

\directlua{
for i,v in pairs (tex.hashtokens()) do
if 
(
string.byte(v,1,1)==239 and
string.byte(v,2,2)==191 and
string.byte(v,3,3)==191 
)
then
texio.write_nl('active char [' ..string.sub(v,4) ..']')
end
end
}


\bye

生成する

active char [^L]
active char [^M]
active char [^Z]
active char [ ]
active char [']
active char [_]
active char [~]
active char [∞]

これは、アクティブな定義があった文字のみを報告すると思われます。\let文字を未定義にすると、元の文字は未定義として表示されますが、これによりハッシュ エントリが表示されます。

関連情報