LaTeX 如何实现破折号之间的差异? -
、--
和---
都打印不同的破折号,但-
不是活动字符:它的 catcode 为 12,与 等数字相同2
。
答案1
此答案不适用于较新的 TeX 引擎,例如 XeTeX 和 LuaTeX。默认情况下,这些引擎不会将其视为--
除 之外的任何其他内容--
。fontspec
可以模拟传统引擎的行为。
正如 Tobi 指出的那样,它们被实现为连字,就像fi
、fl
等一样。更具体地说,TeX Font Metric 文件(就 TeX 而言,它只是一种字体)包含有关字体连字的信息。从这个意义上讲,“字体”是采用特定编码的字体 - 要么是与您在文档中使用的类型大致对应的编码(OT1
、T1
等),要么是具有其他用途的编码。
当 TeX 需要字体时,它会查找 TeX Font Metric 文件,例如ec-lmr5.tfm
。这不包含任何实际的字形 - 没有字符的图片。ec-lmr5.tmf
只告诉 TeX 有关框的信息,而这正是 TeX 本身真正关心的。(一切都是框。)但是.tfm
包含有关当 对应的框后面-
跟着另一个相同类型的框时该怎么做的信息。它告诉 TeX 将这两个框替换为另一个框,对应于–
。它还告诉它如果那框后面直接跟着第一个框的另一个实例,它应该使用对应于的框对框进行另一次替换—
。
这取决于用于编写或生成 TeX Font Metric 文件的编码。这与文档(例如utf8
或 )中使用的熟悉的输入和输出“编码”含义不同。为清楚起见,我们将这些编码称为“tfm 生成编码”。这是因为对应于标准文本编码(例如等)T1
的 tfm 生成编码被定义为包含这些连字,所以文件以这种方式配置。因此,例如 提供的 tfm 生成编码文件包含对应于 和 的文件,其中定义了相关连字。当使用它来创建文件时,会插入实现连字的指令。相反,对于打字机字体,例如,通常设置为不包含此类连字。这可确保您在将给定输入提供给 TeX 时获得期望的输出。OT1
T1
.tfm
fontinst
T1
.tfm
fontinst
.tfm
答案2
我对@cfr 的回答添加了三点。
这些 TeX 连字符功能在 XeTeX 和 LuaTeX 中也是可行的。首先,它们能够加载经典的 TFM,并且此功能是本机的。其次,它们将此功能作为其 OTF 字体加载器中的特殊字体功能实现。此功能在两个引擎中的激活方式不同:在
mapping=tex-text
XeTeX 中由 激活,+tlig
在 LuaTeX 中由 激活。首先,这些连字符是由 Metafont 在 Computer Modern 字体中实现的。然后,当准备从 Type1 到 TFM 的新字体时,这些连字符会自动生成,因为典型文件的最后一部分
.enc
配置了这些连字符。如果字体未转换为 TFM,则不包含此连字功能。此连字功能未知,且未在 TeX 以外的排版中采用。