Latex 中的大多数命令都是在命令后面的括号内用参数编写的:\command{arguments}
。但文本格式化选项,如\em
或\scriptsize
通常写成里面括号,如{\em some italicised text}
。为什么会这样?这些命令有什么不同?我之所以特别问这个问题,是因为它似乎使标准化(LaTeX 确实急需标准化)变得更加困难。
答案1
那里是标准。至于它是否合理,则见仁见智,但自 LaTeX2e 发布以来,它就一直存在。
字体宽高更改命令有两种形式:行动和宣言
同样适用于诸如“强调”之类的抽象指令
大小改变命令只有声明形式。
让我回顾一下这三点。
字体宽高更改命令
改变字体外观的声明形式由简要表示目的的前缀和表示改变的属性的后缀组成:
\sffamily
\itshape
\bfseries
“动作形式”是一个带参数的命令;所有此类内核定义的命令都有一个前缀text
和后缀,对应于类似的声明:
\textsf{words}
\textit{words}
\textbf{words}
根本的区别在于,声明的范围直到发布该声明的组的末尾(或撤销声明)。
两个重要的命令是\textnormal
(动作)和\normalfont
(声明),它们指示 LaTeX 使用文档启动时的当前字体。
摘要指令
我所说的“抽象指令”\emph
是\em
指通常通过斜体表示来表现,但不应依赖于此,因为效果可以通过文档类重新定义。
形式\emph
为动作:\emph{words}
,而\em
为声明。后者在定义环境时很有用。
尺寸改变命令
改变大小的命令只有声明形式,因为很少需要将几个字设置为较小或较大的尺寸。例子
\footnotesize
\small
\normalsize
\large
它们的作用范围以发布它们的组(通常是环境)为终点。如果必须以不同的大小排版段落,请务必记住用\par
或空行明确标记结尾。通常,发布它们的环境会处理此事。
答案2
正如@egreg 所解释的那样,部分原因在于它就是这样的(在 latex2.09 和 plain tex 中也是如此)。
除了语法选择之外,还有效率方面的考虑。作为 switch,你可以\large
在文档的开头进行操作,整个文档就会变大(这是一个任务就像语法是
\setlength\currentsize{1in}
另一方面,如果语法\large{.....}
是整个文件必须被解析为争论这会对 TeX 的内存需求产生影响(并且在早期可能仅仅因为这个原因而无法实现),也意味着\verb
其他 catcode 更改功能不能在这样的命令范围内使用。
如果你不喜欢赋值/切换模型并且更喜欢使用不同的语法,那么 LaTeX 确实提供了一种看起来更“像 LaTeX”的替代方案,并且不会出现解析大量宏参数的问题:
\begin{large}
....
\end{large}
答案3
除了已经给出的非常好的答案之外:动作形式(例如\emph{...}
)可能比声明形式()做得更多。例如,{\em ...}
在自动斜体校正的情况下。\emph