非侵入式字距/间距修改:有哪些选项?

非侵入式字距/间距修改:有哪些选项?

有时,您可能想要(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,}}

将左侧边距增加!'s500 个单位,右侧边距保持不变。(我们无法更改右侧边距,因为在!,或 等序列中,这实际上会使间距加倍!!!

这产生了所需的 ›French‹ 效果,但自然地,该效果不仅限于如下上下文[word] + !

在此处输入图片描述

所以这种方法适合的是场景(2),而不是场景(1)。

引擎?截至今天仅限于 pdfTeX。

答案3

在非侵入性方面,可能一个极端情况是借助该kerntest软件包修改 TeX 字体指标,该软件包提供了一些有用的方法来直观地评估适当的字距调整量。该软件包将创建一个指标文件 ( mtx),该文件可以输入到fontinst,从而允许在不触及字体本身的情况下更改指标。缺点是这个过程相当麻烦,需要一些 知识fontinst,因为修改后的指标必须作为新字体安装(任何在 xetex 时代之前了解 tex 的人都会对在一个句子中听到“TeX”、“字体”和“安装”这几个字感到不寒而栗)。由于此方法适用于 Type1 字体,因此它可以用于任何引擎,但当然不适用于 OpenType 字体。

相关内容