当我编译以下文档时,没有出现任何错误
\documentclass{article}
\newcommand{\foo}{foo}
\begin{document}
Why is \foo{ indifferent about its closing brace?
\end{document}
但没有}
for \foo
。使用\newcommand*
没有区别。文档的编译结果与存在右括号时相同。
答案1
\foo
定义时没有参数,因此 TeX 不会查找任何参数。通常,{}<space>
用于“终止”没有参数的宏的控制序列(例如\foo{}<space>
:),从而产生宏的扩展加上尾随空格,但这绝不是必需的,并且\foo\<space>
完成相同的操作。
从那时起,由于括号没有用于分隔参数,因此{
进入一个组,该组在日志文件中报告:
### simple group (level 1) entered at line 6 ({)
然后,文档在组关闭之前结束(这不是错误),这也在日志文件中报告:
(\end occurred inside a group at level 1)
由于某种原因,此处的内联代码片段中未显示尾随空格,因此我将其标记为 ,<space>
因为它们对于当前的讨论很重要。当然,在实际代码中,<space>
是一个空格字符。