我已阅读
但我目前使用的替代方案没有被提及:
\newcommand{\arnold}{Arnold Schwarzenegger{}}
这当然比在调用命令后添加更少的输入,也更不容易出错{}
。到目前为止,我还没有遇到任何问题;相反,我注意到,在一些\xspace
插入不需要的空格的复杂情况下,{}
一切都会好起来。
所以我只是想知道为什么显然没有其他人使用它,以及它是否会导致我不知道的问题。
编辑:在评论之后,我意识到我总是使用这种方法与带有参数的命令,所以我的例子应该是
\newcommand{\arnold}[1]{Arnold #1 Schwarzenegger}
这将教会我始终检查我的示例,无论它们看起来与我的代码有多么相似。
因此,实际上是参数而不是 {} 导致了正确的间距。如果有人能向我解释为什么参数会产生影响,我会非常高兴。
答案1
问题是为什么源中的空格不会在输出中产生空格。后面的空格\arnold
用于结束命令名称,并且没有被标记,因此不会产生任何输出。因此在无参数形式中
\arnold text
扩展为
Arnold Schwarzenegger{}text
它将排版为“Arnold Schwarzeneggertext”,但{}
没有任何用处。
相反,在带有参数的形式中,后面的空格仍然\arnold
没有被标记,因此
\arnold {} text
和
\arnold{} text
解析方式相同,均扩展为
Arnold␣␣Schwarzenegger␣text
因此,参数后的空格仅被视为普通的单词空格,但您会在 Arnold 和 Schwarzenegger 之间得到两个空格标记空格。