如何测试 (e-)upTeX 中宏是否在 \csname ... \endcsname 之间扩展?

如何测试 (e-)upTeX 中宏是否在 \csname ... \endcsname 之间扩展?

pdfTeX 在 e-TeX 的基础上增加了一些新的基元,包括\ifincsname。当此基元在 一对 之间扩展时\csname ... \endcsname,扩展的结果将为true,否则false将为 结果。

作为 pdfTeX 的继承者,LuaTeX 保留了 pdfTeX\ifincsname的原语;就 XeTeX 而言,它\ifincsname也实现了该原语。然而,在 (e-)upTeX(以及 ApTeX)中,没有一个原语与 pdfTeX 的 同名或等同\ifincsname

\csname ...\endcsname因此,问题来了:在 (e-)upTeX 中,如何实现一个宏来定义一个宏是否在之间扩展。

答案1

简短的回答是:你不能。

TeX90/e-TeX 基元无法判断扩展是否发生在 内部\csname。有人可能会想到设置一些标志,并用宏替换“实际” \csname,但这会破坏可扩展性。

值得注意的是,\ifincsname要正确处理这一点很棘手:存在各种尴尬的边缘情况(例如嵌套\ifcsname),这使得它很难正确处理。

相关内容