将 AMS Euler 设置为默认数学字体(XeTeX)

将 AMS Euler 设置为默认数学字体(XeTeX)

我正在尝试在纯 XeTeX 文档中使用 AMS Euler 字体,并从网上的各种来源获取灵感(包括 Knuth 的宏具体数学),我认为下面的方法可行

\font\teneurm=eurm10
\textfont0=\teneurm
$a$
\bye

(当然还有更多尺寸和系列需要定义,但这是一个 MNWE)

我做错了什么?

答案1

为了在数学模式下更改的外观a,必须更改字体系列 1(\textfont1\scriptfont1\scriptscriptfont1)。要理解为什么会这样,必须了解 TeX 如何知道如何在数学模式下正确排版字符。与文本模式相比,数学模式中使用的字体要多得多。因此,虽然在文本模式下,通常只需查看特定位置的当前字体中的字符就足够了,但数学模式并非如此。

相反,TeX 利用字符的数学代码,您可以使用 来访问它,例如,\the\mathcode`\a它会打印29025。将其转换为十六进制,您将获得7161。要解压数学代码:

  • 第一个数字(十六进制表示)称为班级。字符的类别决定了它的间距规则。

  • 下一个数字是家庭,这是存储字符的字体系列。

  • 接下来的两个数字是字符在字体中的位置。

在这种情况下,family=1 和 location=61,我们可以看到,当查看cmmi10( \textfont1) 的字体表时:

cmmi10 字体表

此处0x61为斜体a字符。因此,要更改该a字符使用的字体,必须更改字体系列 1。



这回答了关于在数学中更改字符字体的问题,但我并没有真正解释字符类别的含义。这对于您的问题来说并不重要,但总体上很有用。

一个角色可以分为 8 个等级:

  1. 普通:这些是像这样的字符/
  2. 大运算符:这些是类似于\sum和的字符\int,它们的特殊之处在于它们垂直居中并且有限制(它们上方和下方的材料)。
  3. 二元运算:这些是类似的字符+
  4. 关系:这些是类似的字符=
  5. 开场白:这些都是像这样的人物(
  6. 结束语:这些都是像这样的人物)
  7. 标点符号:这些是类似于的字符,
  8. 变量:主要由字母和数字组成。

(还有一种类型的类,但它不能位于 a 的值中\mathcode:内部公式类。这些通常由\left...\right构造生成。)

虽然这些类的主要用途是用于间隔,但有些类也具有特殊属性,特别是 Big Operator (1) 和 Variable (7) 类。Big Operator 垂直居中,并且具有限制(在它们上方和下方的材料),这就是为什么你可以做到\sum_{n=1}^\infty并且得到n=1在下方和\infty上方的材料\sum

但是a是 Variable 类的。Variable 类没有特殊的间距规则,使用 Ordinary 类的规则;除了一个重要方面之外,它几乎与 Ordinary 类相同。Variable 字符使用的系列由寄存器 决定\fam,当\fam是有效系列(0 到 15 之间)时,使用的系列是 ,而不是字符\fam中指定的任何系列。这就是允许在数学模式下更改字体而不更改和 朋友的值的原因。例如,由于系列 0 是罗马字体系列,因此纯 TeX 定义如下\mathcode\textfont\rm

\def\rm{\fam\z@\tenrm}

即,它既设置\fam为 0(\z@是一个始终为零的寄存器),又将当前字体更改为cmr10\fam在文本模式下更改不会改变任何内容(\fam进入数学模式时 TeX 也会自动设置为 -1,因此这实际上没有效果),并且\tenrm在数学模式下没有效果。因此,这两者都是必需的,以便\rm在文本模式和数学模式下工作。

可以在 TeXbook 中找到更多信息(例如使用的精确间距规则,以及 TeX 如何在数学模式下排版其他特殊字符,如分隔符和重音符)。

相关内容