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
),这使得它很难正确处理。