字形的Horizo​​ntalAdvance小于字形宽度的可能性如何?

字形的Horizo​​ntalAdvance小于字形宽度的可能性如何?

问题描述:

我使用SharpFont,一个C#FreeType库。 加载Times New Roman OpenType文件后,我得到所有字形的度量。 我注意到字符'f','w','y','A','/','\'的Horizo​​ntalAdvance小于它们的正常宽度,并且char'@'的VerticalAdvance小于它的高度。这怎么可能?我一直认为Horizo​​ntalAdvance是宽度加上一些填充(bearingX)。字形的Horizo​​ntalAdvance小于字形宽度的可能性如何?

关于水平前进,这是很正常的。许多因素可以决定字体文件中字符的间距,并且提前宽度只是最简单和最粗略的,意图在大多数情况下工作。举例来说,一个˚F具有超前宽度比其横梁宽一些,因为它在小写字母像一个Ë[R最常用来。它的弧形上行可能会超过这个宽度并悬挂在下一个角色的空间中。当您得到像lbT这样的高字符时,这只是一个问题,并且通过字距调整或通过创建连字来避免在这种情况下的冲突。

字体设计师通过在其他标准字符之间间隔确定字符的提前宽度是一种常见做法。资本通常是资本O和HS之间的间隔,就像这样:

OOOFOOO HHHFHHH

和小写字符都是小写的操作系统和NS之间的间隔:

ooofooo nnnfnnn

这些都是经过精心调整为“看起来很平衡。然后,字距对处理字符对之间太多或太少空间的问题情况。字符,如˚Fv瓦特ÿ一个VW¯¯ÿ/往往最终突破其前进宽度,因为这就是我们的需要使间距看起来正确。

关于@的垂直前进,这可能是错误的。垂直前进用于CJK脚本和其他(如传统的蒙古语),其中字符将垂直向下读取,而不是水平。垂直前进可能在这里意外地被包括在内,或者它可能没有被适当地测试以用于例如垂直的中国文字。或者它可能只是稍微延伸到上方和下方的空间,这被认为不成问题。