这不是一个实际问题,而是一个好奇的问题。我意识到,如果我想定义自己的符号,实际上,我会使用\newcommand
或类似的东西,并且可以通过叠加现有字符或使用 TikZ/PGF 或任何其他合理的方式来定义宏。我知道 TeX 本身是在 Unicode 之前很久开发的,因此 TeX 的基本符号是由 TeX 本身以某种方式定义的,而不是从 Unicode 代码点借用的。我想知道的是,TeX 如何定义/表示它使用的基本符号,哪些不是 ASCII 字符?它是否使用自己的编码,其中填充了诸如\in
和之类的定义\cap
,还是直接使用上述 TikZ 类型方法的低级 TeX 版本来定义它们,或者两者都不是?所有这些与 METAFONT 有什么关系?
答案1
TeX 仅处理 0 到 255 范围内的字符。如果它在输入中遇到字母,即分配了类别代码 11 的字符,它会在当前设置字体的字体表中查找符号并使用该字体中的字符/字形。
这限制了可表示字符的数量,因为您可能希望文档中包含超过 256 个不同的字符。因此,您可以使用命令\font
定义不同的字体并在文档的不同位置更改它们。如果 TeX 遇到字母字符或类似的东西(例如命令)\char
,它直接通过其字符代码/ASCII 编号表示字符,那么它将从其他字体中选择该字符。例如A
(通常)给出的结果与 相同\char65
。
您还可以定义新命令,这些命令会扩展为一些文本,这些文本表示前面带有字体选择命令的字符。您提到的\in
或的情况\cap
就是这样的命令,但它们仍然有点不同,因为它们仅在数学模式下工作(事实上,它们被定义为数学字符)。在数学模式下,该命令\mathchar
可用于从 16 种同时加载的数学字体中选择一个字符。因此,数学字符是字体选择命令和文本模式下的字符组合的数学等价物。
例如,\cap
定义为,\mathchar"225C
表示\cap
是第 2 类(= 二进制运算符,第一个 )的数学字符,来自字体表中位置 92 的2
数学字体编号 2(第二个)(92 是 的十进制表示形式)。2
5C
据我所知,Knuth 的原始字体都是使用 METAFONT 创建的,但该代码并不直接被 TeX 使用,而是全部隐藏(以编译格式)在 TeX 从中选择字符的字体表中。