为什么 \textbf\& 和 \textbf\"o 的行为不同

为什么 \textbf\& 和 \textbf\"o 的行为不同

我知道这样编写 latex 不是一个好习惯,但只是想知道为什么\textbf\&与 相同\textbf{\&},而 却\textbf\"o与 不一样\textbf{\"o}

答案1

其他人已经回答了你的大部分问题,所以我将限制为什么你没有得到错误

  \textbf\"o

值得去

\textbf{hmmmm}

{\tracingmacros2 aaa \textbf\"o bbb}

第一个是在打开跟踪之前确保设置了粗体字体,第二个是在打开跟踪设置后,查看日志文件,您将看到宏扩展:

在检查了要使用哪种字体设置来获取重音(默认情况下为 OT1)之后,TeX 最终得到:

\OT1\" #1->\@text@composite \OT1\" #1\@empty \@text@composite {\add@accent {127}{#1}}
#1<-\check@icr 

因此,的参数\"\check@icrLaTeX 添加到所有命令末尾的标记,\text__以检查以下文本的斜体斜率,看是否需要斜体校正。

因此,为什么这不会产生错误的答案基本上只是运气(或者运气不好,取决于你的观点)\"没有得到错误,因为它有一个参数,即使不是你想要的那个,并且\check@icr因为它被设计为向前看,无论之后发生什么,它\textbf都是相当防御性的,并且通常避免犯错误,如果它没有找到什么,它就不会插入斜体更正,所以即使它在完全错误的地方被扩展,在重音命令里面它只是决定不插入斜体更正并且事情继续进行......

答案2

\&是一个标记,而\"o是两个标记。如果您不使用括号来分隔参数,\textbf则只会影响它找到的下一个标记。

答案3

扩展 Gonzalo 的正确答案。

TeX 操作 token 时,会逐个扫描它们(在正常操作中)。有\textbf\"o三个 token

\textbf  \"  o

TeX 的语法规则规定,当命令带有参数( 的情况就是如此\textbf)时,该参数的确定方式如下:

  • 如果下一个标记是不是一个左括号{,该标记是参数
  • 如果下一个标记是一个开括号,{则参数就是从上到下与其平衡的所有{内容}

因此,\textbf\&参数为\&\textbf\"o参数为\"。这两个调用分别相当于\textbf{\&}\textbf{\"}o

另一方面,在\textbf{\"{o}}论点中是\"{o}(因为内部括号相互平衡)。

始终对带有参数的命令使用括号(除非您属于应该知道自己在做什么的忍者程序员类别),这样就没问题了。

答案4

\&在 LaTeX 中是特殊用途的。如果你使用\textbf它,它将只标记 1 个字符。所以不要这样使用。使用\textbf{text}

相关内容