
在 pdfTeX 或 XeTeX 中,以下程式碼運行活動字元並最終產生錯誤,例如Invalid code (1114112)
(但在 pdfTeX 中為 256)。
\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
未定義的字符,您的原始字符將顯示為未定義,但這將顯示哈希條目。