\delimiter 如何工作?它如何将其参数转换为字符?为什么?

\delimiter 如何工作?它如何将其参数转换为字符?为什么?

研究 的定义\lvert(这让我终于明白了 \o/ 的含义\@xp\@gobble和工作原理),我发现了该\delimiter命令,其数字参数前进了 0x1000000… 所以如果我理解清楚了分隔符会根据其数字参数转换为一个字符… 这取决于我们是否处于数学模式中… 那么这个数字是如何转换成某个东西的(转换表在哪里?),它与数学模式有何关系,以及这个前进了 0x1000000 意味着什么/暗示什么?最后, 的目的是什么\delimiter

答案1

\vert在 latex 中定义为

\DeclareMathDelimiter{\vert}
   {\mathord}{symbols}{"6A}{largesymbols}{"0C}

这说明它是一个普通的分隔符(不打开也不关闭),其自然大小取自符号字体(起始于)十六进制 6A 的位置,而较大的尺寸取自大符号字体(起始于)十六进制 0C 的位置。

我们可以看看相同的普通 TeX 定义。

\def\vert{\delimiter"26A30C }

它更紧凑,但可读性可能较差。

\delimiter是一个包含位代码的数字,我们可以通过拆分十六进制数字来解码

0(未显示)=\mathord

2 = 符号字体

6A = 符号字体插槽

3 = 扩展(大符号)字体

0C = 大符号字体插槽。

amsmath定义lvert为“开放”版本,vert可以是

\DeclareMathDelimiter{\lvert}
   {\mathopen}{symbols}{"6A}{largesymbols}{"0C}

但为了允许可能不同的字体编码,它使用原始语法并仅添加“4000000,因此前导十六进制数字是 4 而不是 0,表示 mathopen。

与数学字体相关的 tfm 字体指标指定了分隔符如何拉伸,从指定的插槽开始,指标将一系列较大的字形链接在一起,最后通过堆叠顶部底部(可能是中间,对于{)和可重复的段来构建任意大的字符。

要查看度量信息,请以纯文本版本为例,3\fam3定义为

\textfont3=\tenex

其中 fam3\tenex定义为

\font\tenex=cmex10 % math extension

所以我们可以看看cmex10使用该命令的指标

 tftopl cmex10.tfm > cmex10.pl

属性.pl列表是字体度量的可读形式。

十六进制 OC 是八进制 12,在 pl 文件中你会看到

(CHARACTER O 12
   (CHARWD R 0.472224)
   (CHARHT R 0.039999)
   (CHARDP R 1.160013)
   (NEXTLARGER O 104)
   )

它告诉您,除了通常的高度、深度和宽度之外,该字符还是实现可扩展定界符的字符串的一部分,如果该字符太小,请尝试使用八进制字符 104。

相关内容