多个字形编码/一个程序。OT1 和 OML 的一致性的重要性是什么?

多个字形编码/一个程序。OT1 和 OML 的一致性的重要性是什么?

简要介绍一下 LaTeX/TeX,

为什么在相同的上下文时间内对相同的文档/数据处理使用两种字形编码会很有用(例如 OT1 和 OML)?为什么同一个程序需要两种字体编码(忽略国际化问题)?

“$...$” 是否会在本地*将字体编码更改为数学编码?(我试过了,但无法提出更清晰的问题,抱歉)

答案1

不,$...$不是简单地改变编码。

在数学公式中,无论是内联还是显示,字符标记的解释都会发生根本性的变化。

在文本模式下,一个字符被视为一对“字符代码/类别代码”。类别代码为 11 或 12 的字符将直接打印;两者的区别主要在于连字的目的:连字的候选单词仅由类别代码为 11 的字符(字母)组成;因此标点符号不会妨碍该过程,因为标点符号的类别代码为 12。

在数学模式下,类别代码为 11 或 12 的字符会以不同的方式进行检查:每个字符都有一个关联的数学代码,它是一个 15 位整数,最方便的表示方法是四个十六进制数字。例如,的数学代码a是,而和 的"7195数学代码分别是和。()"4028"5029

这是什么意思?简而言之,最高有效字节声明类型对象的下一个字节表示它所属的(默认)数学系列,最后两个字节表示字体中的插槽。类型"4表示“打开”,类型"5表示“关闭”。类型"7很特殊,但基本上表示“普通”原子。

类型对于添加原子之间的自动间距很重要。

为了能够排版公式,TeX 需要四个数学系列,编号为 0、1、2 和 3。每个系列由三种字体组成,用于不同的级别(普通、第一和第二级下标/上标)。系列 0 通常指向(不同大小的)文本字体;系列 1 包含数学字母(拉丁字母和希腊字母,加上一些符号);系列 2 包含符号;系列 3 包含大符号(求和、积分)和可扩展围栏。

由于 TeX 开发时的实际限制,字体被限制为 128 个插槽,数学系列被限制为 16 个。这迫使 Knuth 以并不总是一致的方式填充可用插槽。这是典型的 1 系列字体的字体表

在此处输入图片描述

它主要包含字母,但也包含一些符号和“旧式数字”,这些数字不是真正的数学符号,但 Knuth 不想留下空位。2 族的典型字体布局如下

在此处输入图片描述

大部分是符号,但也有大写书法字母。最后一行是一些不太符合数学规则的杂项符号。

那么,输出编码是什么?例如 OT1、T1 还是 OML?

TeX 国际化带来的一个问题是,在标准字体中,带变音符号的字母必须借助原始字体才能生成\accent,而原始字体的缺陷是,无法正确连接带重音字母的单词。对于意大利语来说,这不是什么大问题,因为意大利语中只在最后一个字母上使用变音符号;而对于德语、法语、匈牙利语、捷克语等语言来说,这是一个大问题,因为变音符号可能出现在单词的开头。

在爱尔兰科克举行的 TUG 1990 会议上,大家一致同意了一种新的字体布局,其中包含重音字母的位置,为大多数(并非全部)使用拉丁字母的欧洲语言提供支持。

在此处输入图片描述

值得注意的例外是立陶宛语、拉脱维亚语、爱沙尼亚语、罗马尼亚语和马耳他语,它们需要字体表中没有的变音符号。但是,嘿,字体只能包含 256 个字符!当时 Unicode 还在穿尿布!

与此同时,Frank Mittelbach 和 Rainer Schöpf 正在致力于将 AMS-TeX 移植到 LaTeX 的项目,并意识到 LaTeX 需要一种完全不同的字体选择方案。这就是输出编码概念的诞生。实际上,新字体选择方案 (NFSS1) 的第一个版本没有这个概念,这个概念是在 NFSS2 中添加的,目前在 LaTeX 中使用(经过更改)。

在 NFSS2 中,每种字体都有四个独立的轴

  1. 编码;
  2. 系列(字体);
  3. 重量(或系列),代表中等、粗体、细体、特粗体等等;
  4. 形状,包括直立、斜体、倾斜等等。

用一种非常巧妙的方法,像\'e或 这样的序列\`A可以根据当前的字体编码进行不同的处理。例如,在 OT1 中,它们解析为“字母上的 Knuthian 重音”方法,在 T1 中,它们解析为\char"E9\char"C0

边注。当您输入éÀ,LaTeX 会根据当前输入编码分别变成\'e\`A

数学(输出)编码 OML、OMS 和 OMX 是绝不由于数学模式中对字符和命令的特殊处理,它们被用作输出。它们存在的目的是加载中使用 NFSS2 定义字体并将它们分配到数学系列。它们还提供了定义数学字体的框架,以便它们可以使用“标准”数学代码关联。一些数学字体符合要求,其他数学字体则使用完全不同的字符分配到字体中的插槽。

答案2

简短回答:因为在 80 年代初期,TeX 需要的字形比单一字体所能容纳的要多。详细回答:

最初的 TeX 实现使用了七位字体编码。DEK 需要提供超过 128 个字符。他还希望源文件与 ASCII 兼容,这样他就可以在编辑器中编辑它们,并在标准打印机上打印出来。

当时这样做是有充分理由的。人们经常在 ASCII 编辑器中打开用另一种编码编写的文档,并且除了音译之外,没有其他方法可以在 ASCII 编辑器中输入其他脚本的文本。因此,在 7 位时代,编码通常设计为,如果您以 ASCII 读取数据,您将获得人类可以阅读的拉丁脚本音译,并且如果您想输入要音译的文本,源代码将是人类可读的。

尽管现在我们可以节省 CPU 周期来进行更复杂的音译,但人们有时仍会以这种方式将多语言文本输入 TeX 文档。您可以找到关于此网站的问题人们会问使用什么音译才能获得拼写正确的单词devanagari,而另一个以这种方式工作的包是tipa

直到 90 年代中期,才开始转向 8 位字体编码,部分原因是早期的网络硬件经常会损坏第八位。这就是为什么最流行的 8 位西里尔字母编码的布局是这样的:西里尔字母位于上半部分,如果高位被翻转,每个拉丁字母或西里尔字母都会切换到另一个字母表中最接近的对应字符。

对于数学字体,Knuth 并没有走那么远。他需要几种字体的数学字母。OML 将所有字母映射到 ASCII 中的位置,因此,如果你写\mathit{x},你将得到

相关内容