Knuth 的 TeXbook 练习 17.21:一个(已知)错误?

Knuth 的 TeXbook 练习 17.21:一个(已知)错误?

练习 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 的整个意义就会受到质疑。

我期望得到的答案是以下之一:

  1. 不,是的不是错误TeXbook: 它是他们错了,因为……
  2. 是的,严格来说一个错误,但它是众所周知的并且被忽略了(因此,它没有被纠正)因为......
  3. 是的,这是一个错误,我以前从未听说过(而且我很确定我所说的话)。

第二次添加

我还想提一下,但是我忘了,第 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

由于缺乏相反的证据,并且考虑到已发布的评论,我假设这是一个真正的错误,但不知何故直到现在才被仔细审查,我将继续提交错误报告。不幸的是,我想不出任何可以建议的更正:我再说一遍,以我的拙见,整个练习都失去了意义。

相关内容