为了在字符串化之前扩展可扩展标记,我有时会将\csname..\endcsname
-expansion 与\string
as结合起来
\chardef\stopromannumeral=`\^^00
\edef\gobbleToPrefix{%
\def\noexpand\gobbleToPrefix##1\string X\string Y{\stopromannumeral}%
}%
\gobbleToPrefix
...
\def\macroA#1{%
...
\expandafter\macroB\expandafter{%
\romannumeral
\expandafter\expandafter
\expandafter \gobbleToPrefix
\expandafter\string
\csname XY#1\endcsname
}%
...
}%
% A macro where the argument must be a string of catcode-12-characters
% and catcode-10-spaces:
\def\macroB#1{%
<replacement text where #1 occurs as placeholder for a string>
}%
如果\macroA
#1 包含不应该发生的事情,那么\csname..\endcsname
您会收到错误消息,这对于不熟悉 TeX 的人来说很难理解。
有没有什么技巧可以检测出\csname..\endcsname
东西是否出错了,如果是的话,是否提供额外的消息来解释这个问题?