关于 TeXbook 练习 17.22 的问题

关于 TeXbook 练习 17.22 的问题

本练习的答案中下列句子的含义是什么?

另一方面,\left如果后面的字符是左括号,则会出错。因此,最好为所有分隔符指定控制序列名称。

以下是一个例子:

\tracingmacros=1
\tracingonline=1
$\bigl{\delimiter"426830A}$
\tracingmacros=0
\end

据我所知,“\left如果以下字符是左括号,则会失败”部分指的是 中的括号\bigl{\delimiter"426830A}。但这毫无意义,因为括号被剥离了:

#1<-\delimiter "426830A

因此,关于“所有定界符都有控制序列名称”的部分令人困惑,因为{\delimiter...}它工作得完全正常。

答案1

这句话并没有提到

$\bigl{\delimiter"426830A}$

这完全没问题,因为\bigl这是一个接受参数的宏,因此会去掉括号。相反,它引用的是这样的(虚构的)构造

$\left{\delimiter"426830A}\right.$

这样做是行不通的,因为\left需要直接使用分隔符,而不需要括号。

另一方面,这是可行的

$\left\delimiter"426830A\right.$

但使用此语法,这将变成错误

$\bigl\delimiter"426830A$

这就是为什么 Knuth 建议为分隔符定义一个宏,在这种情况下

\def\langle{\delimiter"426830A }

因为以下两个方法都可以完美运行

$\bigl\langle$
$\left\langle\right.$

相关内容