Аналог \ifcsname в LuaTeX для активных символов

Аналог \ifcsname в LuaTeX для активных символов

В pdfTeX или XeTeX следующий код проходит по активным символам и в конечном итоге выдает ошибку, например Invalid code (1114112)(но с кодом 256 в pdfTeX).

\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

В руководстве говорится:

Активные символы внутренне реализованы как особый тип многобуквенных управляющих последовательностей, использующих префикс, который невозможно получить иным способом.

Покопавшись в источниках, можно предположить, что этот префикс — U+FFFF = 239,191,191 в кодировке UTF-8, поэтому я думаю, что можно сделать следующее:

`\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символ неопределенным, ваш оригинал будет отображаться как неопределенный, но это покажет запись хеша.

Связанный контент