数学模式中的“单个字符”或“符号”到底是什么?

数学模式中的“单个字符”或“符号”到底是什么?

至少有三种情况,数学模式中的单个符号会被 TeX 引擎特殊处理:1. 当重音被放置时,2. 当使用以下方式创建数学运算符时\mathop,以及 3. 当重音符号被括号括起来时在每个例子中,TeXbook 都使用不同的词语来代替“单一符号”:

  1. “单个字符”(第 443 页,规则 12),
  2. “一个象征”(第 443 页,规则 13),
  3. “单个 Acc 原子” (第 291 页)。

现在我想知道:这些短语到底是什么意思,例如,什么才算“单个字符”?这三个例子中的意思是否相同?最后:记录在某处到底是什么意思?(我也很乐意参考tex.web。)


看完之后egreg 的这个评论,在我看来,“单个符号”需要是 类型\mathord。为了解释原因,我将使用从数学斜体字体中\mathchar取出字母A,并测试不同的类别:(\mathord类别 0)、\mathop(类别 1)、\mathbin(类别 2)、\mathrel(类别 3)、\mathopen(类别 4)、\mathclose(类别 5)、\mathpunct(类别 6)。

下图显示:1. 重音符号仅对 0 类正确放置;2. \mathop仅对 0 类和 1 类将符号相对于数学轴居中(但对于 1 类,符号已经是类型\mathop);3. 带重音符号的数量周围的括号会导致上标凸起除非该符号属于 0 类。

图像

\documentclass{article}
\begin{document}
1.\ Accent placement:
$
\hat{\mathchar"0141}
\hat{\mathchar"1141}
\hat{\mathchar"2141}
\hat{\mathchar"3141}
\hat{\mathchar"4141}
\hat{\mathchar"5141}
\hat{\mathchar"6141}
$

2.\ Creating a (centered) math operator:
$
\mathop{\mathchar"0141}
\mathop{\mathchar"1141}
\mathop{\mathchar"2141}
\mathop{\mathchar"3141}
\mathop{\mathchar"4141}
\mathop{\mathchar"5141}
\mathop{\mathchar"6141}
$

3.\ Enclosing an accented quantity in braces:
$
{\hat{\mathchar"0141}}^H
{\hat{\mathchar"1141}}^H
{\hat{\mathchar"2141}}^H
{\hat{\mathchar"3141}}^H
{\hat{\mathchar"4141}}^H
{\hat{\mathchar"5141}}^H
{\hat{\mathchar"6141}}^H
$
\end{document}

答案1

这是一个棘手的问题。答案是:1) 和 2) 是相同的,但 3) 是完全不同的东西。换句话说,Don 在写“单个字符”和“符号”时有点马虎。在这两种情况下,他的意思是

<math symbol>  ->  <character> | <math character> 

如 TeXbook 第 289 页的 BNF 符号所述。

要理解行为和示例,必须仔细研究代码和/或文档中的其他各个地方,例如tex.web。理解示例的关键是 TeXbook 中的第 290-291 页。Don 在这里说:

A<math field>用于指定原子的原子核、上标或下标。当 a<math field>为 a时<math symbol>,该符号的 $f$ 和~$a$ 数字将进入原子域。否则<math field>以 开头{,这会导致 \TeX\ 进入新的分组级别并开始新的数学列表;随后<math mode material>以 结尾},此时组结束,生成的数学列表将进入原子域。如果数学列表只是一个没有下标或上标的 Ord 原子,或者是一个原子核为 Ord 的 Acc,则括号会被有效删除。

我们可以通过以下小文档观察这种行为:

\documentclass{article}
\begin{document}
$
A
{A}
{BC}
\hat A
{\hat A}
{\hat {BC}}
\showoutput\showlists
$
\stop

在终端上我们得到:

### math mode entered at line 3
\mathord
.\fam1 A
\mathord
.\fam1 A
\mathord
.\mathord
..\fam1 B
.\mathord
..\fam1 C
\accent\fam0 ^
.\fam1 A
\accent\fam0 ^
.\fam1 A
\accent\fam0 ^
.\mathord
..\fam1 B
.\mathord
..\fam1 C

A{A}产生相同的结果:一个\mathord原子,其原子核为\fam 1 A。但{BC}不同,您会看到里面有额外的 ord 节点。其他三行显示,如果重音是括号内的唯一原子,则重音会“移出”括号。这就是第 291 页上的意思,并回答了问题 3):

单个 Acc 本身就是一个 Acc 原子,例如,\hat{BC}是一个,即使它的原子核内部有 2 个数学符号。

现在来创建数学重音符号或数学运算符:您的示例似乎表明“单个字符”或“符号”仅指 Ord 原子。但事实并非如此,您的示例之所以如此表现,是因为上述行为定义。如果我们通过删除每行中的 来<math field>检查您的示例,例如,\hat

$
{\mathchar"0141}
{\mathchar"1141}
{\mathchar"2141}
{\mathchar"3141}
{\mathchar"4141}
{\mathchar"5141}
{\mathchar"6141}
\showoutput\showlists

我们得到

### math mode entered at line 3
\mathord
.\fam1 A
\mathord
.\mathop
..\fam1 A
\mathord
.\mathbin
..\fam1 A
\mathord
.\mathrel
..\fam1 A
\mathord
.\mathopen
..\fam1 A
\mathord
.\mathclose
..\fam1 A
\mathord
.\mathpunct
..\fam1 A

我们可以看到,除了第一行之外,外层\mathord(即我们的数学域)不仅包含\fam1 A另一个原子,即一个两级结构,而不是一个符号。因此,如果它成为 Acc 原子的原子核,它首先会变成一个盒子,里面可能有一些空间,然后放置重音,这就是差异的原因。

为了证明我的观点,让我们删除示例中的括号,这将给出非常难以阅读但完全有效的代码(因为 single<math symbol>是 的一种可能性,<math field>并且\mathchar是这样的符号,请参阅第 289 页的 BNF 表示法):

$
\hat\mathchar"0141
\hat\mathchar"1141
\hat\mathchar"2141
\hat\mathchar"3141
\hat\mathchar"4141
\hat\mathchar"5141
\hat\mathchar"6141
\showoutput\showlists

现在我们突然发现,事实上任何操作<math symbol>都是可能的,只要它不是括号中更大子公式的一部分,就没有区别。

### math mode entered at line 3
\accent\fam0 ^
.\fam1 A
\accent\fam0 ^
.\fam1 A
\accent\fam0 ^
.\fam1 A
\accent\fam0 ^
.\fam1 A
\accent\fam0 ^
.\fam1 A
\accent\fam0 ^
.\fam1 A
\accent\fam0 ^
.\fam1 A 

当然,如果你尝试生成 ,情况也是如此\mathop。问题是,当你使用{...}里面的东西时,它就变成了一个复杂的结构(一个数学列表),即使你只在里面放了一个原子,除非 --- 这是 TeXbook 上一段中记录的例外 --- 这个单个原子是 Ord 原子或 Acc 原子。

(深呼吸)...感觉有点像 TeXbook p125 :-)

相关内容