这可能是一个奇怪的问题,但它不知何故困扰着我。
在 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,因为它们可以“正常”地被抓取。