
En pdfTeX o XeTeX, el siguiente código se ejecuta a través de caracteres activos y eventualmente produce un error como Invalid code (1114112)
(pero con 256 en pdfTeX).
\catcode`*=13 % active
\count0=32
\def\step{%
\advance\count0 by 1
\lccode`*=\count0
\lowercase{\ifx\undefined*\else\message{\string*}\fi}%
\step
}
\step
En LuaTeX se queda sin memoria. Supongo que los caracteres activos, como las secuencias de control, se agregan a la tabla hash. Me gustaría un análogo de \ifcsname
caracteres activos: que no agregue la secuencia de control a la tabla hash.
Respuesta1
El manual dice
Los caracteres activos se implementan internamente como un tipo especial de secuencias de control de varias letras que utilizan un prefijo que de otro modo sería imposible de obtener.
Hurgar en las fuentes sugiere que este prefijo es U+FFFF = 239,191,191 como UTF-8, así que creo que puedes hacer:
`\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 produce
active char [^L]
active char [^M]
active char [^Z]
active char [ ]
active char [']
active char [_]
active char [~]
active char [∞]
Supongo que esto solo informará caracteres que alguna vez hayan tenido una definición activa; si \let
el carácter es indefinido, su original lo mostrará como indefinido, pero esto mostraría la entrada hash.