LuaTeX-Analogon von \ifcsname für aktive Zeichen

LuaTeX-Analogon von \ifcsname für aktive Zeichen

In pdfTeX oder XeTeX durchläuft der folgende Code die aktiven Zeichen und erzeugt schließlich einen Fehler wie Invalid code (1114112)(aber mit 256 in pdfTeX).

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

In LuaTeX geht der Speicher aus. Ich vermute, dass aktive Zeichen, wie Steuersequenzen, zur Hash-Tabelle hinzugefügt werden. Ich hätte gerne ein Analogon für \ifcsnameaktive Zeichen: das die Steuersequenz nicht zur Hash-Tabelle hinzufügt.

Antwort1

Im Handbuch steht

Aktive Zeichen werden intern als spezieller Typ von Steuersequenzen mit mehreren Buchstaben implementiert, der ein Präfix verwendet, das anderweitig nicht zu erhalten ist.

Das Stöbern in den Quellen lässt darauf schließen, dass dieses Präfix als UTF-8 U+FFFF = 239,191,191 ist. Ich denke also, Sie können Folgendes tun:

`\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

das erzeugt

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

Dadurch werden vermutlich nur Zeichen gemeldet, die jemals eine aktive Definition hatten. Wenn Sie \letdas Zeichen auf „undefiniert“ setzen, wird es in Ihrem Original als „undefiniert“ angezeigt, hier würde jedoch der Hash-Eintrag angezeigt.

verwandte Informationen