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