命令名称和参数括号之间的空格

命令名称和参数括号之间的空格

简单的问题,可能重复但找不到。

我看到一些人(特别是新手)写类似的东西

\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

排版为文本

相关内容