简单的问题,可能重复但找不到。
我看到一些人(特别是新手)写类似的东西
\textbf {text} %or
\frac {1} {2}
命令和参数之间的空格看起来不太好,但无论如何编译时都没有错误。
我想,这样的编码方式肯定有缺点。但是哪个缺点呢?
更新
就在这时我看到了这个:
\overline T
为什么这个程序没有任何错误?看到这个,我突然想到了指数和指数,它们在没有花括号的情况下也能正常工作x_a^2
因此我猜这(完全)是不加批判的。
答案1
在许多地方,这些空间不会造成危害:
- 命令名称(由字母组成)后的空格将被忽略,视为“命令名称结束”)。例如:中的空格
\textbf {text}
。 - TeX 拒绝将空格作为未分隔的参数,除非它被括号括起来。例如:
\frac {1} {2}
- LaTeX 使用 来
\@ifnextchar
表示可选的星号和方括号中的可选参数。然后 会忽略空格\@ifnextchar
。示例:\\ * [2ex]
或\\ [2ex]
(空格也可以来自换行符)。因此,如果不应被视为 的可选参数,则需要\\\relax [2ex]
或之类的东西。\\{} [2ex]
[2ex]
\\
空格可以增强可读性,但是选择哪种编码风格也是个人喜好问题。
需要注意的是:
- 未限定的参数。
- 空间的不同 catcode,特别是当命令切换到某种逐字模式时。
参数标记/组
如果参数仅由一个标记组成,则通常可以删除花括号:
\overline{T} = \overline T
。但同样需要小心。有时花括号看起来像参数括号,但实际上不是:
\detokenize\foo
将不起作用,这里需要括号:
\detokenize{\foo}
结束的花括号必须明确给出,但开始的花括号也可以隐式给出:
\detokenize\bgroup\foo}
宏也可以这样定义:要求参数花括号,通常在
#
参数文本末尾使用。然后,使用此宏时,后面必须有一个花括号。示例为\textcolor
:\def\textcolor#1#{\@textcolor{#1}} \def\@textcolor#1#2#3{\protect\leavevmode{\color#1{#2}#3}}
带有彩色文本的参数必须有参数括号。这是代价。好处是将可选的颜色模式参数传递给相应
\color
命令的有效实现。
答案2
在你给出的例子中,只有这个例子有所不同:
\textbf {text} %or
zzz
在注释前加一个空格会引入一个空格,上面的内容将排版为文本響
与之比较
\textbf {text}%or
zzz
排版为文本響