Office Word 是如何根据字体的 OS/2 表等信息计算「单倍行距」的
以 Office 2013 附带的
华文中宋
为例计算默认行高 [1]:
- 按苹果最初为 TrueType 设计的 hhea 规则
计算得 1.325(华文中宋在 Pages 中的效果符合此数值);( hhea.ascent + hhea.descent + hhea.lineGap ) / head.unitsPerEm - 按 OpenType 规范的 sTypo 规则
计算得 1.144;( OS/2.sTypoAscender + OS/2.sTypoDescender + OS/2.sTypoLineGap )/ head.unitsPerEm - 按 Windows 里最主流但不符合规范的 usWin 规则
计算得 1.137。( OS/2.usWinAscent + OS/2.usWinDescent ) / head.unitsPerEm
那么,Word 是如何计算并实现「单倍行距」的呢?
另外, Word for Mac 2011 里的「单倍行距」似乎和 Windows 版 Word 里的数值并不一致,和 Pages 也不一样。它仿佛是这样计算的,完全忽略 hhea.lineGap 数值,又自己给乘上 1.3,不符合任何规范或事实标准:
( hhea.ascent + hhea.descent ) / head.unitsPerEm * 1.3
这是造成同一文件在 Windows 与 Mac 版 Word 及 Pages 中开启时版式不一致的原因之一吗?
[1] 下附用 ttx dump 出的华文中宋相关数据供参考(若代码未高亮请尝试展开补充说明):
value="1.0"/> value="1.0"/> value="0xb611830c"/> value="0x5f0f3cf5"/> value="00000000 00000011"/> value="1000"/> value="Fri Jul 17 10:51:22 1998"/> value="Wed Oct 30 08:28:00 2002"/> value="-186"/> value="-318"/> value="1317"/> value="1007"/> value="00000000 00000000"/> value="14"/> value="1"/> value="1"/> value="0"/>
value="1.0"/> value="1007"/> value="-318"/> value="0"/> value="1365"/> value="-186"/> value="-186"/> value="1317"/> value="1"/> value="0"/> value="0"/> value="0"/> value="0"/> value="0"/> value="0"/> value="0"/> value="25185"/>
value="1"/> value="492"/> value="400"/> value="5"/> value="00000000 00001000"/> value="100"/> value="100"/> value="0"/> value="150"/> value="100"/> value="100"/> value="0"/> value="650"/> value="100"/> value="250"/> value="0"/> value="2"/> value="1"/> value="6"/> value="0"/> value="4"/> value="1"/> value="1"/> value="1"/> value="1"/> value="1"/> value="00000000 00000000 00000010 10000111"/> value="00001000 00001111 00000000 00000000"/> value="00000000 00000000 00000000 00000000"/> value="00000000 00000000 00000000 00000000"/> value="SINO"/> value="00000000 01000000"/> value="32"/> value="65509"/> value="800"/> value="-200"/> value="144"/> value="912"/> value="225"/> value="00000000 00000100 00000000 10011111"/> value="11011111 11010111 00000000 00000000"/>
作者:VinnyXiong 链接:http://www.zhihu.com/question/23349103/answer/24328488 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。下图为“华文中宋”字体“国”字,用的是FontCreater7.5,相应的字体参数已经标明。通过在Word中手工测量(字体设置为200磅,放大到500%,测量像素然后转为twips,再计算),以及使用FontCreater修改字体参数,发现了一些规律:
- Word中的字体高度仅取决于 WinAscent 和 WinDescent 两个值。
- 测量发现的高度总是大于 ( WinAscent + WinDescent ),说明Word在此基础上有扩展的高度 Extend。
- 多次测试不同字体以及不同字号之后发现,实际高度 LineHeight 与 (WinAscent + WinDescent) 之间存在一个可能是固定的比例关系,大约在 1.29 ~ 1.31 之间,即 LineHeight = ( WinAscent + WinDescent ) * 1.3。
- 通过FontCreater修改 WinAscent 或 WinDescent 之后发现,扩展的Extend是平均分配到上面和下面的,Extend1 与 Extend2 相等,如上图所示。
LineHeight = ( WinAscent + WinDescent ) * 1.3= ( WinAscent + WinDescent ) + ( WinAscent + WinDescent ) * 0.3= ( WinAscent + WinDescent ) + Extend1 + Extend2= ( WinAscent + WinDescent ) + Extend * 2Extend = ( WinAscent + WinDescent ) * 0.15- 对于以上计算出的系数 0.15 目前没有确切的值,可能有偏差,还可能跟不同的字体有关。通过程序验证之后得到可能比较精确的值如下:
第一种:0.14845,适用于 仿宋、宋体、幼圆、新宋体、方正姚体、方正舒体、楷体、隶书、黑体。
第二种:0.15002,适用于 华文中宋、华文仿宋、华文宋体、华文新魏、华文楷体、华文琥珀、华文细黑、华文行楷、华文隶书、华文彩云、宋体-方正超大字符集、微软雅黑。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
通过在Word中手工测量(字体设置为200磅,放大到500%,测量像素然后转为twips,再计算),以及使用FontCreater修改字体参数,发现了一些规律: