1. 输入和输出编码

如果我们在键盘上按下一个键,会生成一个数值代码来表示相应的字符。输入编码把字符映射到对应的代码。例如,在德语键盘上,带变音符的字符(如“a‑umlaut”字符)在不同操作系统下可能映射到不同的代码。

存储在计算机文件中的文档只包含字符代码,而输入编码的信息并未被显式包含。因此,如果将文件转移到不同的环境,例如从美国转到英国,你可能会发现文档中的美元符号在使用某些程序查看时被错误地解释为英镑符号,因为该程序对输入编码的假设不正确。

由 LaTeX 项目团队开发的 inputenc 包旨在帮助解决输入编码问题。它允许用户明确指定文档或文档部分使用的输入编码。这种机制使得在不同的 LaTeX 安装之间安全地转移文档成为可能,从而实现相同的打印结果。

inputenc 包解释文件中的字符代码并将其映射到 LaTeX 的内部表示,该内部表示唯一覆盖了 LaTeX 能表示的所有字符。在后续处理(例如写入辅助文件)时,LaTeX 使用这种内部表示,从而避免任何误读。

然而,迟早 LaTeX 必须把这些内部字符表示与 字形(特定字体中的字符形状)关联起来,所以还需要另一层映射。任何 TeX 字体中最多只有 256 个字形。这些字形不是通过名称寻址,而是通过 8 位数字来表示字形在字体中的位置。这意味着我们必须把一个大的唯一命名空间映射到几个小的空间,而这些字形位置可能差异很大,这并不奇怪。

因此,即使我们已经在外部文件到 LaTeX 内部之间保留了美元符号的意义,如果选择的打印字体在我们假设用于美元符号的位置上出现了意外的字形,纸张上仍可能出现错误的形状。NFSS(LaTeX 的 New Font Selection Scheme)的任务之一就是确保每个 LaTeX 内部字符表示都能被正确渲染,或者在无法实现时向用户提供恰当的错误信息。

如果一种字体把带变音符的字符作为单独的字形提供,而不是仅提供基本字符加变音符(TeX 在内部构建带变音符字符),则使用这些字形更为可取,因为它们通常具有更好的外观。使用这些复合字形的另一个(技术)原因是 \accent 原语会抑制连字符断字。

为了适应不同的情况,像 \'e(LaTeX 用于表示 “e‑acute” 字符的内部表示)这样的命令有时必须触发涉及 \accent 原语的复杂操作,有时则仅仅告诉段落构建器需要当前字体中某个 槽位(位置)的字形。

所有这些都是通过 输出编码 的概念来实现的,输出编码把 LaTeX 的内部字符表示映射到合适的字形位置或字形构建动作,这取决于所使用排版字体中实际可用的字形。

下面的文章讨论了 NFSS 的第 2 版,它于 1994 年成为标准 LaTeX 的一部分。

Have any questions about Aspose.TeX?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.