如何使用 \newcommand 定义的变量

如何使用 \newcommand 定义的变量

以下哪两个更正确?为什么?有什么区别?两者都产生相同的输出。

另外,- 的正确位置\newcommand在之前\begin{document}还是之后?

以下是 MWE:

\documentclass{article}
\newcommand{\Variable}{World}
\begin{document}
Hello \Variable{}! Welcome!!

Hello \Variable! Welcome!!
\end{document}

答案1

宏 - 更具体地说,是由一个或多个字母-- 通常会吞噬其右侧的任何空格(例外情况是具有单个非字母字符的宏)。这允许宏将下一个字符作为第一个参数,因此\fbox abc与 相同\fbox{a}bc。不幸的是,没有参数的宏也会这样做,因此当您开始使用 LaTeX 时,迟早您会意识到它\LaTeX abc与 相同\LaTeX{}abc

因此,您必须使用“ \Variable{}”或“ \Variable\”(注意第二个反斜杠后的空格)来避免这种情况。如果宏后没有空格,但有一个逗号,您可以简单地写“ ”。另一种选择是在宏定义的末尾\Variable,使用xspace包和包含,这样在大多数情况下都可以很好地工作。\xspace\Variable

可以\newcommand在文档正文、前言中甚至之前(上面\documentclass)使用,但正确的位置是前言,因为通常您不想混淆格式和内容。此外,如果宏定义在文本中间,则更容易犯在宏定义之前使用宏的错误。

答案2

在您展示的上下文中,这两种用法都足够了,因为它们产生相同的结果:

在此处输入图片描述

然而,在稍微不同的背景下 - 使用宏后立即删除标点符号!,结果明显不同:

在此处输入图片描述

\documentclass{article}
\newcommand{\Variable}{World}
\begin{document}
Hello \Variable{} Welcome!!

Hello \Variable Welcome!!
\end{document}

使用时,{}单词间空格会被保留,而使用\Variablewithout时,单词间空格会被吞噬{}。这是由于 TeX 读取输入流以识别宏结束的方式。

哪一个“更正确”?这取决于上下文,因为您可以{}在一些地方使用它 - 结尾的括号 - 但并非总是必要的。

相关内容阅读:


从技术上讲,您可以将 放在\newcommand任何您想要的地方。最好将文档结构与内容分开。因此,习惯上将所有命令定义和文档格式内容作为序言的一部分包括在\documentclass和之间\begin{document}

然而,这仍然只是一种建议,取决于最终用户。有些人可能更倾向于将定义与用法结合在一起(如果文档提供了这种“流程”),而其他人则采用更传统的方式。

相关内容