研究 的定义\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。