# “fmtx”表
# 介绍
字体度量表(标签:“fmtx”)标识一个字形,其点代表各种字体范围的度量:上升、下降、插入符角度、插入符偏移。 如果此表存在,这些点将覆盖“hhea”和“vhea”表中相应的值。 将这些指标表示为点而不是值具有多个优点。
- 在 Quickdraw Text 中,字形被限制为不超过字体的上升和下降。 因此,许多字体人为地增加“hhea”表中的上升和下降值,以适应异常高或低的字形。 “fmtx”仅在 ATSUI 中使用,允许使用相同的字体指定上升和下降的“真实”值,而无需更改 Quickdraw Text 中的行为。
- 由于“fmtx”度量表示为点,因此它们可以针对不同的变化设置进行更改,从而允许字体在更改粗细或光学点大小时更改其行间距和/或插入符角度。
- 还可以指示“fmtx”度量点,允许字体以小尺寸调整行距以提高可读性。
- 注意: 本章中的材料仅适用于 TrueType 字体。
# 字体规格表格式
Font Metrics 表格式如下:
| 类型 | 名称 | 含义 |
|---|---|---|
| fixed32 | version | 版本(设置为 0x00020000)。 |
| uint32 | glyphIndex | 其点代表度量的字形。 |
| uint8 | horizontalBefore | 水平上升的点编号。 |
| uint8 | horizontalAfter | 水平下降的点编号。 |
| uint8 | horizontalCaretHead | 水平插入符头的点数。 |
| uint8 | horizontalCaretBase | 水平插入符号底座的点数。 |
| uint8 | verticalBefore | 垂直上升的点数。 |
| uint8 | verticalAfter | 垂直下降的点编号。 |
| uint8 | verticalCaretHead | 垂直插入符头的点数。 |
| uint8 | verticalCaretBase | 垂直插入符号底座的点数。 |
使用“fmtx”表的行距是通过测量从字体的“之前”度量点到“之后”度量点的距离来计算的。 “之前”是指定从基线(或垂直中心线)到上一行的“之后”距离的点。 在水平文本中,这对应于字体的上升。 “之后”是指定从基线(中心线)到下一行的“之前”距离的点。 在水平文本中,这对应于字体的下降。
使用“fmtx”表的插入符角度是通过使用字体的“插入符头”度量点和“插入符基部”度量点之间的角度来计算的。 “插入符头”是指定插入符相对于“插入符基部”点的角度的点。 “插入符号基部”是指定插入符号应与基线(中心线)相交的位置的点。 对于水平文本,“插入符号基部”的 y 坐标必须为 0。对于垂直文本,“插入符基部”的 x 坐标必须为 0。
如果存在“fmtx”表,则它必须指定所有八个度量点的点编号。 即使字体仅用于水平书写,它也必须识别垂直度量的点。
下表显示了单位为 2048 的斜体字体的典型坐标:
| 名称 | 坐标 |
|---|---|
| Horizontal before | (0, 1600) |
| Horizontal after | (0, -448) |
| Horizontal caret head | (210, 1600) |
| Horizontal caret base | (-140, 0) |
| Vertical before | (1024, 0) |
| Vertical after | (-1024, 0) |
| Vertical caret head | (1024, 0) |
| Vertical caret base | (0, 0) |