有时,您可能想要(1)调整或创建字体中的字距对(或者更好的是,字距类),或(2)调整特定字形的侧边距。
场景 (1) 的示例包括缺少特定字距调整对/类的字体,例如当设计师忽略了字形的更多“奇特”变体时:W + a
字距已调整,但W + á
实际上没有。或者:调整标点符号间距以适应特定的语言环境,例如法语中常见的松散标点符号间距。例如,当特定字形太靠近(或远离)其所有可能的相邻字形时,无论这些相邻字形是什么,都适用场景 (2)。例如,在其他方面制作精良的字体中的斜线字体我最近获得了许可。
显然,您可以编辑字体文件本身,但出于多种原因,这可能并不可取,字体的 EULA 也可能不允许这样做。我想进行一个小调查,以解决以下问题:
* 有哪些 »非侵入性« 方法可用于这些目的?
* 它们与哪些引擎兼容?
* 优点和缺点是什么?
我已经将我能想到的两个选项作为答案发布出来了。请随意编辑,因为可能还有更多内容要说。
答案1
OpenType 功能文件
我们可以创建一个 OpenType 特性文件并使用pos
命令进行相当复杂的间距和定位修改(包括垂直修改)。字距调整可以以传统方式进行(即成对进行),或者更方便地使用类,在这些类中,字形的多个变体(a, ä, â...)
得到相同的处理。最基本的示例可能是这样的:
\documentclass{scrartcl}
\usepackage{fontspec}
\usepackage{filecontents}
\begin{filecontents*}{test.fea}
languagesystem DFLT dflt;
languagesystem latn dflt;
feature test {
pos T -200 a;
} test;
\end{filecontents*}
\setmainfont[FeatureFile=test.fea]{TeX Gyre Schola}
\begin{document}
Ta\par
\addfontfeatures{RawFeature=+test}
Ta
\end{document}
可用于上述所有场景;相当简单但用途广泛句法。
缺点:引擎。仅限 LuaLaTeX(如果我没记错的话)。也许还有其他缺点(有待扩展)
答案2
microtype 的 \SetExtraKerning
当然有,microtype
还有它的\SetExtraKerning
命令。有人可能会说,它的名字有点误导,因为它的目的是调整左右侧边栏特定字形。这使它成为场景 (2) 中的一个选项,但它不能用于修复(或添加)字距调整对或类。与手册建议的相反,它在法语标点符号中的用途也有限。如果我们按照手册在感叹号和它前面的单词之间创建更宽松的间距,我们会说:
\SetExtraKerning
[unit = space]%
{encoding = *}%
{! = {500,}}
将左侧边距增加!'s
500 个单位,右侧边距保持不变。(我们无法更改右侧边距,因为在!,
或!«
或 等序列中,这实际上会使间距加倍!!!
)
这产生了所需的 ›French‹ 效果,但自然地,该效果不仅限于如下上下文[word] + !
:
所以这种方法适合的是场景(2),而不是场景(1)。
引擎?截至今天仅限于 pdfTeX。
答案3
在非侵入性方面,可能一个极端情况是借助该kerntest
软件包修改 TeX 字体指标,该软件包提供了一些有用的方法来直观地评估适当的字距调整量。该软件包将创建一个指标文件 ( mtx
),该文件可以输入到fontinst
,从而允许在不触及字体本身的情况下更改指标。缺点是这个过程相当麻烦,需要一些 知识fontinst
,因为修改后的指标必须作为新字体安装(任何在 xetex 时代之前了解 tex 的人都会对在一个句子中听到“TeX”、“字体”和“安装”这几个字感到不寒而栗)。由于此方法适用于 Type1 字体,因此它可以用于任何引擎,但当然不适用于 OpenType 字体。