练习 17.21TeXbook提出有关以下的问题\delcode
:
附录 B 定义了
\delcode‘<
尖括号的简写形式。你认为为什么附录 B 没有进一步定义\delcode‘{
?
(引自该来源)。答案的第一句话是:
如果
\delcode‘{
设置为某些非负分隔符代码,则当您写下类似“ ”的内容时不会收到任何错误消息\left{
。
但事实并非如此,至少在{
保留其通常的 的情况下\catcode
。事实上,第 26 章中的语法规则解释了\left
必须跟<delim>
,它可以是
<filler>\delimiter<27-bit number>
,<filler><letter>
, 或者<filler><otherchar>
。
现在,让我们先不考虑第一种选择,第 24 章中非正式地描述了<letter>
和,更准确地说,在第 283 页的语法之后,它们是“第 11 类和第 12 类的显式或隐式字符标记”(分别是):因此,肯定不是第 1 类的。实际上,如果你尝试使用纯 TeX 代码<otherchar>
<horizontal command>
{
\delcode`{="266308
\delcode`}="267309
Text before.
$$f(x)=\left{x+1\over x-1\right}+x$$
Text after.
\bye
您确实会收到错误消息(并且使用 LaTeX 时情况也不会改变)。
我一直在思考这种不一致之处,正如你所理解的,这让我感到困惑,尤其是 2014 年版的TeXbook重现了我上面引用的相同措辞。我应该怎么想?一个不正确的陈述竟然从迄今为止的所有修订和错误报告中溜走了?一个作者决定忽略的小问题,不重要,众所周知的问题?在 Google 上搜索“TeXbook 练习 17.21”或在此网站上搜索“17.21”都没有找到任何结果。请帮忙。
添加
有些评论认为我根本不应该问这个问题。但请理解,我们在这里谈论的是概念性的错误可能被隐藏了三十多年。在我看来,如果我是对的,那么练习 17.21 的整个意义就会受到质疑。
我期望得到的答案是以下之一:
- 不,是的不是错误TeXbook: 它是你他们错了,因为……
- 是的,严格来说是一个错误,但它是众所周知的并且被忽略了(因此,它没有被纠正)因为......
- 是的,这是一个错误,我以前从未听说过(而且我很确定我所说的话)。
第二次添加
我还想提一下,但是我忘了,第 345 页第 13 行所作的评论,这更令人好奇:看来 Knuth 确实考虑的是第{
12 类字符。
第三次添加
关于 Arthur Reutenauer 提到的第 131 行的评论plain.tex
,内容如下
% N.B. { and } should NOT get delcodes; otherwise parameter grouping fails!
以下示例代码
%&plain
\delcode`{="266308
\delcode`}="267309
\def\test#1{This is the argument: ``#1''.}
\def\mathtest#1{#1^{2}}
Text before, including a test. \test{My argument}
$$f(x)=\left\{\mathtest{x}+1\over \mathtest{x}-1\right\}+x$$
Text after.
\bye
\delcode
确认当这些字符确实得到s 时(即使在数学模式下),第 1 类和第 2 类括号的参数界定功能不受影响。
答案1
由于缺乏相反的证据,并且考虑到已发布的评论,我假设这是一个真正的错误,但不知何故直到现在才被仔细审查,我将继续提交错误报告。不幸的是,我想不出任何可以建议的更正:我再说一遍,以我的拙见,整个练习都失去了意义。