字距调整与间距,哪种模型最合适?

字距调整与间距,哪种模型最合适?

许多专业字体包含空格(U+0020,字符)和其他字符之间的字距调整说明。这些字距可帮助页面实现更平衡的印刷颜色。例如,当大写字母T跟在单词空格后面(即 <space>T)时,由于 的垂直字干左侧有额外的空心点 T,因此该单词空格将出现<space>比其他字间距更大/更宽。因此,字体设计师可能希望通过在和 之间添加负字距来减少这种空洞T

但 TeX 并不将其视为<space>“字符”。更准确地说,(Category 10, Character 32)在排版时,标记会被转换为粘合节点,并且此类粘合节点将具有 (1) 正常宽度、(2) 可拉伸性和 (3) 可收缩性,这些都来自当前字体。因此,不可能的在传统 TeX 中自动调整字距以适应空格。然而在 LuaTeX 中,接受审判(见帖子LuaTeX 中的字距调整由@YanZhou 提供)。

我的问题是不是关于“在某些 TeX 中如何实现针对空格的字距调整”,而是“如果要手动插入这些字距,那么这些字距在 TeX 世界中应该是什么”。


一个玩具示例

假设有一种字体<space>设计为 210 个单位宽。这里,一个单位等于 1⁄1000 em。使用 TeX 的正常惯例,可拉伸性将为 105 个单位,可收缩性将为 70 个单位。假设小写字母f有一个大的悬垂终端,因此该组合f<space>应该有一个积极的根据字体,字距应为 30 个单位。此外,<space>T应该有一个消极的字距之间为 30 个单位。现在,考虑以下文本段落中的片段:

...f H T...

TeX 会将其转换为链接列表:

...
<char: f>
<glue: 210 plus 105 minus 70>
<char: H>
<glue: 210 plus 105 minus 70>
<char: T>
...

我们应该如何处理正/负 30 个单位的字距?

模型 1

插入这些字距作为显式字距(通过\kern原始):

<char: f>
<kern: +30>
<glue: 210 plus 105 minus 70>
<char: H>
<glue: 210 plus 105 minus 70>
<kern: -30>
<char: T>

模型 2

插入这些字距作为胶水(通过\hskip原始的),但既不具有可拉伸性也不具有可收缩性:

<char: f>
<glue: +30>
<glue: 210 plus 105 minus 70>
<char: H>
<glue: 210 plus 105 minus 70>
<glue: -30>
<char: T>

模型 3

插入这些字距作为胶水(通过\hskip原始方法),但具有可拉伸性和可收缩性。原因:由于后面的空间f宽度应为 210+30=240 个单位,因此它应具有 120 个单位的可拉伸性(多 15 个单位)和 80 个单位的可收缩性(多 10 个单位)。

<char: f>
<glue: +30 plus +15 minus +10>
<glue: 210 plus 105 minus 70>
<char: H>
<glue: 210 plus 105 minus 70>
<glue: -30 plus -15 minus -10>
<char: T>

在换行方面,模型 2 和 3 似乎比模型 1 更优秀,但我也不确定。我也无法决定在模型 2 和模型 3 之间做出选择,也许还有其他选择。欢迎讨论!

答案1

如果我没记错的话,TeX 度量模型中有一个字边界,可以针对该边界调整字距(它也用于连字,以允许使用单词开头/结尾的变体字符,例如阿拉伯语)。我希望一个像样的 TeX 实现能够将针对空格的字距视为针对字边界的字距,这样即使在 Knuth 未修改的 TeX 程序中也可以使用它们。

相关内容