활성 문자에 대한 \ifcsname의 LuaTeX 아날로그

활성 문자에 대한 \ifcsname의 LuaTeX 아날로그

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

설명서에 따르면

활성 문자는 다른 방법으로는 얻을 수 없는 접두사를 사용하는 특수한 유형의 다중 문자 제어 시퀀스로 내부적으로 구현됩니다.

소스를 살펴보면 이 접두사가 UTF-8의 U+FFFF = 239,191,191임을 알 수 있으므로 다음과 같이 할 수 있다고 생각합니다.

`\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않은 문자는 원본이 정의되지 않은 것으로 표시되지만 해시 항목이 표시됩니다.

관련 정보