命令后的 () 或 {}

命令后的 () 或 {}

我想知道为什么有些命令(...)后面跟着“ ”,而其他命令后面跟着“ {...}”。例如,“ \exp(x)”和“ \bar{x}”。

()和是否都{}用于指定它们前面的命令的参数?

还有其他类似的表现吗?

答案1

虽然马丁的回答有很多技术信息,但让我说一些关于你的具体例子。

该命令\bar对其他命令执行某些操作。也就是说,它在其上加了一个横线。因此它需要接受一个参数。在 TeX 中,参数通常用花括号标记。因此,\bar{x}produces\bar{x}\bar{xx}produce \bar{xx}。如果没有给出括号,TeX(或多或少)会将下一个非空白符号作为参数。例如,\bar xagainduces\栏 x\bar(x)produce \bar(x)

另一方面,\exp只是排版\ 表达式和 ,不接受任何参数。(x)之后将完全独立地排版。 因此,TeX 不会将x视为 的参数\exp;即使从语义角度来看,它是指数函数的参数。 这很有用,因为它允许您编写,例如,\exp\colon\mathfrak{g} \to G对于。 还请考虑和都是共同\exp\colon\mathfrak{g} \to G的例子。\sin\sin(x)\罪过 x

答案2

大括号{ }用于普通参数,圆括号( )仅用于图片宏来指定坐标等。另一组括号[ ]用于可选参数。

普通的 LaTeX 宏总是等待括号,括号是普通的参数和分组字符。您不能使用\newcommand和类似的 LaTeX 宏来定义等待括号的新宏。

但是,可以使用较低级别的 plainTeX 宏来定义宏的任意模式\def。这种模式称为参数文本。如果此文本不遵循宏,则会产生错误。语法为\def

\def<macro><parameter text>{<macro content>}

参数文本必须包含所使用的参数#1#2也可以包含一些其他文本,如括号。

等待的宏的一个示例( )是:

\def\myvector(#1,#2){\dosomething{#1}{#2}}

宏随后直接\myvector等待文本,其中存储在中,并将存储在中。(<something>,<something else>)<something>#1<something else>#2

也可以看看这个问题讨论\def和的区别\newcommand

一个重要的区别{ }( )或之间[ ]是:
可以{ }嵌套,但其他的不能。因为{ }由下级系统处理,所以每个{都会增加一个内部计数器,当找到 时,该计数器会减少}。这样,每个{都会与其 匹配}。然而在\myvector上面,第一个)将关闭参数文本,而与 的数量无关(。对于出于同样的原因不能包含的可选参数也是如此[ ]。避免这种情况的一种方法是{ }先用 包围内部文本,然后才能找到其余的参数文本。换句话说,参数文本扫描器将括号中的所有内容作为一个元素,因此它们可以有效地向扫描器隐藏其内容。

例子:

\somemacrowithoptionalargument[ \someother[opt]{...} ]{ ... }

\someother[opt作为可选参数,并将文本标记作为强制参数。正确的编写方式是:

\somemacrowithoptionalargument[ {\someother[opt]{...}} ]{ ... }

相关内容