排版中的字体行间距问题
在一般的文书排版软件上,所谓的行距,通常指的是上一行的字的 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 |
这是 TTF/OTF 的字体才会有这种信息,像 PostScript 字体(Type 1 等)就没有这样的信息,完全是由应用软件去抓 font bounding box 来决定行距的(一般也是字体 EM size 的 120%)。
字体中是不是应该有像 linegap 的信息,恐怕还是有讨论的余地,但最重要的是大家要依标准、规范来实作应用软件,否则就会像目前 linegap 的情形一样,造成不同平台、不同应用软件不一致的情况。