排版中的字体行间距问题

字体排印|http://blog.bs2.to/EdwardLee|EdwardLee 2006-04-30 10:01:54

在一般的文书排版软件上,所谓的行距,通常指的是上一行的字的 baseline 至下一行的字的 baseline 的距离。而这种定义下的行距,也通常是由办公排版系统本身自行在控制、调整的。

但是在 TrueType 字体规格中亦有所谓的 linegap 的信息,有些应用软件会使用他来当做是正常显示时的行距,这个行距指的就不是上面所说的两 baseline 的距离了,而是两行字间的间距。

问题就是出在 TTF 字体中有这些信息的地方不只一个,而各 TTF 的各 table 中的这些信息也不一定统一,再者各应用软件取用这些信息时,由哪一个 table 来取出也不统一,以致造成同样的字体,在不同的平台或应用软件下使用的时候,显示出来的 linegap 并不一样。如下图所示:

 

另外一个问题是,每个平台、每个应用软件是取用 TTF 不同 table 中的 linegap 值。


TTF-table 子项目 适用平台

hhea linegap Apple/Mac, OO.o
OS/2 Win Ascent/Win Descent MS Windows
OS/2 Typo linegap 通常会被忽略,但有些软件会使用

那么,如果发生这种情况的时候,怎么办呢?例如,在 OO.o 下编辑一份档案,但却同时要在其它的平台的同一个 team 的人共同编辑这份档案,这时就会发生排版跑掉了的情形。这时,除了双方安装同一套的中英文字体外,另外可以使用 mensis 来调整字体的 linegap 值,如下图所示:

 

 

 

一般我们可以设为 0,让应用软件全权控制行距的问题。但正常的 linegap 的计算方法是:

假设:

EM size = 1000
TA(Typo Ascender) = 800
TD(Typo Descender) = 200
TL(Typo linegap) 未知
行距 = TA - TD + TL
一般行距是 EM size x 120% = 1200,所以:
800 - (-200) + TL = 1200
TL = 200

这是 TTF/OTF 的字体才会有这种信息,像 PostScript 字体(Type 1 等)就没有这样的信息,完全是由应用软件去抓 font bounding box 来决定行距的(一般也是字体 EM size 的 120%)。

字体中是不是应该有像 linegap 的信息,恐怕还是有讨论的余地,但最重要的是大家要依标准、规范来实作应用软件,否则就会像目前 linegap 的情形一样,造成不同平台、不同应用软件不一致的情况。

Ascender

Ascender

字客网

字客网