
No pdfTeX ou XeTeX o código a seguir passa por caracteres ativos e eventualmente produz um erro como Invalid code (1114112)
(mas com 256 no pdfTeX).
\catcode`*=13 % active
\count0=32
\def\step{%
\advance\count0 by 1
\lccode`*=\count0
\lowercase{\ifx\undefined*\else\message{\string*}\fi}%
\step
}
\step
No LuaTeX fica sem memória. Meu palpite é que caracteres ativos, como sequências de controle, são adicionados à tabela hash. Eu gostaria de um análogo \ifcsname
para caracteres ativos: que não adicione a sequência de controle à tabela hash.
Responder1
O manual diz
Os caracteres ativos são implementados internamente como um tipo especial de sequência de controle de múltiplas letras que usa um prefixo que de outra forma seria impossível de obter.
Pesquisar as fontes sugere que esse prefixo é U+FFFF = 239.191.191 como UTF-8, então acho que você pode fazer:
`\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
que produz
active char [^L]
active char [^M]
active char [^Z]
active char [ ]
active char [']
active char [_]
active char [~]
active char [∞]
Acho que isso reportará apenas caracteres que já tiveram uma definição ativa; se você \let
usar o caractere para indefinir, seu original o mostrará como indefinido, mas isso mostraria a entrada de hash.