符号 ʻ 很小。它立在上方,处于大写字母上部三分之一的高度,而它下面直到行线全是空白。只要符号被圆形字母围着,这几乎看不出来。但把它放到 G 和 A 之间——GʻALLA 一词里就出现窟窿。
这篇文章讲我们在工作字体 Ipak Davlat 里如何解决它,以及为什么常用的对齐方法在这里不起作用。针对单个字母对的间距修正称为紧排。

窟窿从哪里来
看图片的上一行。符号 ʻ 离 G 有一段距离,然后到 A 还有另一个空隙。A 上部尖细,也放出很多空气。三片空白叠成一片,词就断成“G”和“ʻALLA”。
MAʼNO 里的图提克符号 ʼ 也一样:A 的右上开放,ʼ 很窄,N 以竖笔画开头。A 与 N 之间形成的缝,比这个词里任何两个字母之间都宽。
type.today 的综述警告过乌兹别克排版中的这个问题:O 或 G 与符号 ʻ 之间的间距不能太大,否则文本里会出现窟窿。
通常怎么定间距
我们为 Ipak 写的字对检验程序,工作方式与自动“间距器”——排边距的程序——相同。把一对字母从基线到大写顶切成一条条水平的行。在每一行里量左字母右缘到右字母左缘的空白距离。所有行的平均值就是这对的视觉间距。说“视觉”,是因为这是眼睛的评价,而不是尺子的。
深的凹处,比如 L 的内部或 A 的横梁下方,会被截掉:眼睛不会把它们看到底。
基准是 HH 这一对的间距。两根笔直的竖笔画是最简单的情况,而基础字体的边距我们认为是正确的。
为什么这对符号不起作用
符号只占行高的上部。它下面什么都没有。如果按整个高度量,平均值里会混进符号下方的大片空白。算法看到“巨大的间距”,就把符号死死推近,甚至推到相邻字母底下。
我们的第一个版本就是这样:符号压到了 A 上。我们放松规则——符号又“跳”了过去:紧贴 A,被读成 A 的一部分,而不是 G 的一部分。读者看到的是“G ʻA”。
两个错误出于同一个原因:间距是在符号不在的地方量的。
符号条带
解决办法是只在符号确实所在的那条带里测量。Ipak Davlat 的符号 ʻ 占大写高度最上面的38%。我们就取这条带。

在这条带里看到的就是眼睛在符号高度上看到的:G 的右缘、符号本身、A 的左缘。符号下方的空白不进入计算。
对小写字母,条带更宽:从小写 x 高度的一半到大写顶。小写更低,符号在它们上方探出更多。
不对称的规则
第二个发现:符号两侧需要不同的间距。
**ʻ 属于 O 和 G。**它不是独立的字符,而是字母的一部分。所以对着它们符号要放得紧:目标是 HH 常规间距的0.45。而到下一个字母——常规间距,1.0。这样 Gʻ 读作一个字母,符号不会“跳”向 A。
**ʼ 分隔音节。**它不属于谁:既不是左边字母的,也不是右边的。所以它站在正中,两侧各为0.8的间距。
还有两个限制防止极端情况。在最窄处,符号与邻居不小于0.4的 HH 间距。而字体里任何一对都不小于字号的5%,这是防触碰保护。字号是字体的大小;字号的5%,对10厘米高的字母来说就是5毫米。
我们在符号条带内、以 HH 间距为单位测得的修改前后数值(Ipak Davlat Regular):
| 字对 | 未加我们的紧排 | 加了以后 |
|---|---|---|
| G → ʻ | 1.16 | 0.69 |
| ʻ → A | 1.12 | 0.99 |
| A → ʼ | 1.21 | 0.80 |
| ʼ → N | 1.10 | 0.81 |
G 和符号没有达到0.45的目标——防触碰保护拦住了。这是有意的:宁可略松,也不要小字号下的粘连。
西里尔字母:同样的逻辑,另一个基准
工作的另一半是西里尔字母。在 Overpass 里它几乎没做过紧排:ГЛ、ТЛ、УА 排得松散,Қ Ғ Ҳ 则根本没有修正。
这里我们把 Ipak Davlat 与五款专业开放字体比较:Fira Sans、Inter、Noto Sans、Onest 和 IBM Plex Sans。重要的声明:它们的紧排数值我们没有照搬。我们测量的是每款字体把一个字对排得相对于自己的 HH 有多紧,取中位数,再把 Ipak Davlat 调到它。中位数是数列的中间:一半字体排得紧,一半排得松。它不让一款与众不同的字体带偏结果。

两条规则简化了工作。
**双胞胎。**与拉丁字母同形的西里尔字母(А、В、Е、К、М、Н、О、Р、С、Т、Х)的排法与拉丁字母相同。КА 这一对等于 KA 这一对。否则同一个词在两种文字里会显得不一样。
**尾巴。**带行线下方尾巴的字母——Қ、Ҳ、Ц、Щ——按它的基础字母排:Қ 按 К,Ҳ 按 Х。尾巴躺在行线以下,不进入间距。
这里出了一个错,是在检验时发现的。防触碰保护起初只量行线以上,Қ 和 Ҳ 的尾巴几乎碰到旁边的 А。测量范围向下扩到尾巴,问题就消失了。
结果:Regular 里784对,Bold 里802对。详细的“前/后”试印在下面。

关于触碰的争论
检验时有一条意见:Gʻ 中的符号几乎贴住 G,约1%字号。如果这被证实,字体就不能发布。
我们按轮廓核对:把这一对渲染成点阵图,字号等于2000点,测量 G 与符号“墨迹”之间的最短距离。结果是 Regular 145单位、Bold 119单位——即字号的7.3%和6.0%。用另一种方式做的独立测量给出了7.8%和7.0%。意见本身提出的阈值是60—80单位,结果富余地满足。意见被用数字驳回。符号靠近 G 在这里不是错误:这是有意的,为的是让 Gʻ 读作一个字母。
由此得出什么
符号 ʻ 不是引号,也不能按引号对齐。三条结论,任何为乌兹别克语做字体的人都会用到:
- 间距要在符号所在的地方量,而不是在整个行高上量。
- ʻ 靠向自己的字母,ʼ 站在正中:规则是不对称的。
- 防触碰保护比好看的数字重要:小字号下,粘连比多余的空白更糟。
来源
- 关于 O/G 与 ʻ 之间空隙的建议——А. Шайдуллина,type.today,04.12.2023。
- U+02BB 和 U+02BC 的名称与编号——Unicode 表 Spacing Modifier Letters。
- kern 特性的说明——OpenType 规范,Microsoft Typography。
- 方法与数字是我们的:测量经 HarfBuzz 和 FreeType 在 Ipak Davlat v0.1 构建上完成,2026年10月。
- 参照字体:Fira Sans、Inter、Noto Sans、Onest、IBM Plex Sans(均为 SIL OFL 1.1)。
链接:
- А. Шайдуллина. Uzbek. type.today, 04.12.2023. https://type.today/en/journal/uzbek
- Unicode: Spacing Modifier Letters (U+02B0–U+02FF). https://www.unicode.org/charts/PDF/U02B0.pdf
- OpenType:kern 特性(Microsoft Typography)。 https://learn.microsoft.com/en-us/typography/opentype/spec/features_ko
- HarfBuzz——文本排版引擎。 https://harfbuzz.github.io/
- Fira Sans. https://github.com/mozilla/Fira
- Inter. https://github.com/rsms/inter
- Noto Sans. https://github.com/notofonts/latin-greek-cyrillic
- Onest. https://github.com/simpals/onest
- IBM Plex. https://github.com/IBM/plex