\char 在数学模式下如何处理?

\char 在数学模式下如何处理?

以下示例生成

在此处输入图片描述

${\rm\char"5}$
\end

为什么它没有产生下面的结果呢?

在此处输入图片描述

答案1

TeXbook 第 289 页解释了如何\char〈8-bit number〉形成 〈character〉,并且 〈character〉 是 〈math symbol〉 的一个特例。第 291 页解释了在数学模式中找到的 〈math symbol〉 的作用,但让我们回到第 289 页关于 〈character〉 的内容:

当 TeX 处于数学模式或显示数学模式时,〈character〉 命令具有额外的意义:它指定一个介于 0 和 32767 = 2 15 − 1 之间的数字。这是通过用字符\mathcode值替换字符号来实现的。但是,如果该\mathcode值为32768 =  "8000,则 〈character〉 将被具有原始字符代码(0 到 255)的活动字符标记替换;TeX 会忘记原始的 〈character〉 并根据第 20 章的规则扩展这个活动字符。

\char〈8-bit number〉因此,在数学模式下查找时,重要的是\mathcode指定字符的 。 在您的例子中,字符是数字 5,即`\^^E。 plain.tex 的第 59 行显示:

\mathcode`\^^E="023A % \lnot

因此\char"5在数学模式下是一个带有 的 〈数学符号〉\mathcode "023A。它指定类别 0(普通,参见 TeXbook 第 154 页)、系列 2 和"3A相应字体中的位置。

所讨论的字体是这样的\textfont2,因为你\rm在这里什么都不做,AFAICT:

\rm:
macro:->\fam \z@ \tenrm 

\fam对第 7 类(变量)的符号有影响,但此处的符号属于第 0 类;此外,据\tenrm我所知,它会影响文本字体,并且对数学模式没有影响(当然,除非您暂时使用美元符号内的命令离开数学模式\hbox)。

您可能会问这是什么字体:

\tracingonline=1
\showthe\textfont2

输出:

> \tensy .
l.3 \showthe\textfont2

并确认了可以看到的内容\tracingoutput=1

Completed box being shipped out [1]
\vbox(667.20255+0.0)x469.75499

(...)

.\vbox(643.20255+0.0)x469.75499, glue set 633.20255fill
..\glue(\topskip) 5.69446
..\hbox(4.30554+0.0)x469.75499, glue set 443.0883fil
...\hbox(0.0+0.0)x20.0
...\mathon
...\tensy :
...\mathoff

(...)

:确实有 ASCII 码"3A。因此,输出中得到的字符位于"3A字体的位置\tensy。TeXbook 第 350 页 (plain.tex) 声明:

\font\tensy=cmsy10

您可以通过(此处第 33 页)验证字体的texdoc encguide字符确实是我们在屏幕截图上看到的。"3Acmsy10\lnot

注意:这与问题没有直接关系,但由于问题的关键是,\mathcode我从 TeXbook 中引用的段落解释了在\mathcode等于的特殊情况下会发生什么"8000,我将抓住机会,向我们亲爱的读者指出这一点答案特殊"8000情况得到了充分利用(参见\__hs_cls_activate_comma:其回答中的功能)。

相关内容