当以转义代码输入时,重音字符是否使用真正的字形?

当以转义代码输入时,重音字符是否使用真正的字形?

我知道在 TeX 的早期,一些标准 ascii 之外的字符是由一些非常肮脏的黑客排版的。例如,在我的语言(波兰语)中,我们有一个“带有向下钩的 a”(ą)和一些类似的字符。由于早期版本的 TeX 并未涵盖它,人们过去常常在 a 上排版逗号,以创建类似的字符。

现在我开始怀疑,如果我需要输入一个法语单词,使用转义码会更容易,而不是切换键盘布局或使用符号表。但我想知道转义码是否会导致字母排版正确,或者这里是否使用了类似的肮脏黑客?

答案1

LaTeX2e 引入了输出字体编码和“LaTeX 内部字符表示”(LICR)的概念。

根据当前的字体编码,转义代码(例如\'{e}“é”或\k{a}“ą”)将使用组合字形或“真实”字形。

T1 字体编码包含大多数欧洲语言的字形。它定义了几种组合,这些组合在内部转换为真实字形,对用户来说是透明的。因此\k{a}最终被翻译成指令“打印 slot 中的字形0xA1(其中包含“ą”)。同样,\'{n}将从 slot 打印一个真正的“ń” 0xAB。相反,\'m将用尖音符组成一个“m”,因为字体编码中不存在这样的字形。

如果您使用 OT1(传统)字体编码,则没有重音字符可用,因此所有字符都将由不同的部分组成。

因此答案是:说

\usepackage[T1]{fontenc}

在文档序言中,您将在大多数情况下使用真实字形,至少对于使用拉丁字母的欧洲语言而言。对于西里尔文、希腊文以及使用扩展拉丁字符集的非洲语言,都有编码。

限制在于 TeX 字体最多有 256 个字形。XeLaTeX 和 LuaLaTeX 消除了这一限制,它们使用巨大的字体编码(分别为 EU1 和 EU2),其中转义码通常指向预组合的字符,而不是由不同部分“即时”组合的字符。

t1enc.def例如,在

\DeclareTextCommand{\k}{T1}[1]
   {\hmode@bgroup\ooalign{\null#1\crcr\hidewidth\char12}\egroup}
\DeclareTextCommand{\textogonekcentered}{T1}[1]
   {\hmode@bgroup\ooalign{\null#1\crcr\hidewidth\char12\hidewidth}\egroup}

定义了几种\k在当前编码为 T1 时呈现命令的方法。然而,人们也发现

\DeclareTextComposite{\k}{T1}{A}{129}
\DeclareTextComposite{\k}{T1}{E}{134}
\DeclareTextComposite{\k}{T1}{a}{161}
\DeclareTextComposite{\k}{T1}{e}{166}
\DeclareTextCompositeCommand{\k}{T1}{o}{\textogonekcentered{o}}
\DeclareTextCompositeCommand{\k}{T1}{O}{\textogonekcentered{O}}

这确切地意味着,当编码为 T1 并且 TeX 找到\k{A}\k{E}和(输入也可以是等等)时,将使用当前字体中对应位置的字形(例如 161= )。相反,和将被翻译成显示的命令。对于未定义的组合,将使用的默认定义。\k{a}\k{e}\k A0xA1\k{O}\k{o}\k

请注意,这与输入编码。例如,当输入编码为 UTF-8 时,如果 LaTeX 遇到ą(U+0105),它会根据当前输出编码将该字符(实际上是几个字节)转换为,\k{a}以便进行后续处理。相关指令可以在 中找到t1enc.dfu

\DeclareUnicodeCharacter{0105}{\k a}

(为节省时间,使用无括号符号)。

相关内容