为什么 \exp_after:wN 被命名为 \exp_after:wN?

为什么 \exp_after:wN 被命名为 \exp_after:wN?

这可能是一个奇怪的问题,但它不知何故困扰着我。

在 expl3 中,我们发现一个名为的命令\exp_after:wN,它是 TeX 的别名\expandafter。根据 expl3 命名方案,冒号后面的所有内容都是命令的签名。

在这种情况下,我们有wN。其中N代表普通的单个标记和w“奇怪”/不寻常的参数,例如分隔参数。按照该签名,的参数\exp_after:wN应该是“奇怪的东西”,后跟单个标记。

然而,\expandafter的参数似乎与此完全相反,即第一个参数必须是一个单独的标记,其后跟有“某些东西”,可能会触发一长串吸收标记。

那为什么不\exp_after:wN\exp_after:Nw呢?

答案1

\expandafter语跳过一个标记即使它的类别代码是 1 或 2(所以{/}通常)。从expl3术语上讲,N-type 参数是单个标记,无需任何特殊技巧即可抓取:如果您这样做

\cs_set_protected:Npn \foo:N #1 { \cs_show:N #1 }

你会不是得到正确的结果\foo:N { \baz }(它将显示\baz不是{)。因此,的第一个参数\exp_after:wN是“奇怪的”:它可能是一个N-type 参数,{或者}(使用一些技巧,它也可以是一个空格)。

最初,团队将其重命名\expandafter\exp_after:NN,但随着我们收紧命名,我们意识到第一个参数不是严格意义上的N-type,因此调整为w。后来,我们得出结论,一旦您有一个w-type 参数,就不太希望在签名中显示其他参数:w意味着“很奇怪,所以文档”。然而,我们只得出结论 \exp_after:wN已经确立。总而言之,对于这种情况,我们更倾向于稳定,因此不会再重命名(改为\exp_after:w)。


顺便说一句,值得注意的是第二参数\exp_after:wN确实必须是N-type。这个想法是扩展一个标记,这意味着第二个参数必须是可扩展的。这意味着它要么是一个宏,要么是一个活动字符:它们都是N-type,因为它们可以“正常”地被抓取。

相关内容