# “头”表

# 一般表信息

'head' 表包含有关字体的全局信息。 它记录了字体版本号、创建和修改日期、修订号和适用于整个字体的基本排版数据等事实。 这包括字体边界框的规范、字体字形最有可能写入的方向以及有关字形在 em 方块中的位置的其他信息。 校验和用于验证字体中数据的完整性。 它还可用于区分两种相似的字体。

这些标志提供有关字体的全局信息。 如果位 0 设置为 1,则字体的基线位于 y=0(即 x 轴)。 如果位 1 设置为 1,则假定最左侧黑色位的 x 位置为左侧轴承。 如果第 2 位设置为 1,则指令可以明确地使用点大小代替每 em 的像素。 这意味着缩放 12 点屏幕字体以获得等效的打印机字体可能不会产生与请求 12 点打印机字体相同的结果。 设置位 3 会导致使用整数缩放而不是小数缩放。 设置位 4 允许字体改变设备相关宽度。

必须通过查看字体中字形的轮廓数据来计算 xMin、yMin、xMax 和 yMax 值。 它们一起指定了一个矩形,该矩形构成字体中所有(未嵌合的)字形的边界框。

字体每 em 的单位数在此表中设置。这个值应该是 2 的幂。它的范围是从 64 到 16384。

此值 minimumRecPPEM 是此字体的最小可读大小(以像素/em 为单位)。

fontDirectionHint 提供有关可能设置此字体中的字形的方式的信息。值为 0 表示混合方向字体;值 1 仅表示从左到右的字形,-1 仅表示从右到左的字形。值 2 和 -2 指的是包含一些中性字形的字体,即没有强方向性的字形。

中性角色没有固有的方向性。 (它不是一个宽度为零的字符)。空格和标点符号是中性字符的示例。非中性字符是具有固有方向性的字符。例如罗马字母(从左到右)和阿拉伯字母(从右到左)具有方向性。在存在空格和标点符号的罗马字体中,字体方向提示应设置为 2。

indexToLocFormat 值指示索引到 loc ('loca') 表中使用的偏移格式类型。

# 表 22:'head' 表

类型 名称 描述
Fixed version 0x00010000(version 1.0)
Fixed fontRevision 由字体开发者设置
uint32 checkSumAdjustment 计算:将其设置为0,计算'head'表的校验和并将其放入表目录中,将整个字体相加为uint32_t,然后存储0xB1B0AFBA - sum。 (结果,'head' 表的校验和将是错误的。没关系;不要重置它。)
uint32 magicNumber 设置为 0x5F0F3CF5
uint16 flags bit 0 - y 值为 0 指定基线
bit 1 - 最左边黑色位的 x 位置是 LSB
bit 2 - 缩放后的点大小和实际点大小会有所不同(即 24 点字形不同于按因子 2 缩放的 12 点字形)
bit 3 - 使用整数缩放而不是小数
bit 4 - (由 Microsoft 实现的 TrueType 缩放器使用)
bit 5 - 该位应该在旨在垂直布局的字体中设置,并且其中的字形已经绘制为 0 的 x 坐标对应于所需的垂直基线。
bit 6 - 该位必须设置为零。
bit 7 - 如果字体需要布局以进行正确的语言渲染(例如阿拉伯字体),则应设置该位。
bit 8 - 应为具有一个或多个默认发生的变形效果的 AAT 字体设置该位。
bit 9 - 如果字体包含任何从右到左的强字形,则应设置该位。
bit 10 - 如果字体包含印度风格的重新排列效果,则应设置该位。
bits 11-13 - 由 Adobe 定义。
bit 14 - 如果字体中的字形只是代码点范围的通用符号,例如最后使用的字体,则应设置该位。
uint16 unitsPerEm 范围从 64 到 16384
longDateTime created 国际日期(自 1904 年 1 月 1 日 GMT/UTC 时区午夜 12:00 开始的秒数。)
longDateTime modified 国际日期(自 1904 年 1 月 1 日 GMT/UTC 时区午夜 12:00 开始的秒数。)
FWord xMin 对于所有字形边界框
FWord yMin 对于所有字形边界框
FWord xMax 对于所有字形边界框
FWord yMax 对于所有字形边界框
uint16 macStyle bit 0 bold(加粗)
bit 1 italic(斜体)
bit 2 underline(下划线)
bit 3 outline(大纲,几级标题,一级标题最大,九级标题最小)
bit 4 shadow(阴影)
bit 5 condensed (narrow)(字符间距)
bit 6 extended(拓展)
uint16 lowestRecPPEM 以像素为单位的最小可读尺寸
int16 fontDirectionHint 0 混合方向字形
1 只有强烈的从左到右的字形
2 像 1 但也包含中性
-1 只有强烈的从右到左的字形
-2 像 -1 但也包含中性
int16 indexToLocFormat 0 表示短偏移量,1 表示长偏移量
int16 glyphDataFormat 0 表示当前格式

# 特定于平台的信息

尽管它被正式列为“必需的”TrueType 表,但实际上并非 OS X 上的所有 sfnt 内置字体都需要它。事实上,甚至并非所有 TrueType 字体都需要它。

没有轮廓(outline)数据但仅由位图组成的 TrueType 字体不应具有“头部”表。 他们应该使用逐字节相同的“bhed”表。 OS X 使用“bhed”来表示字体没有轮廓(outline)的事实。

# 依赖关系

“头”表中的许多字段与其他表中的值密切相关。 例如,unitsPerEm 字段是所有处理曲线或度量的表的基础。 该表在整个 TrueType 渲染引擎中用作快捷方式,以确定字体的各个关键方面。

由于对任何其他表的任何更改都会影响“head”表的 checkSumAdjustment 和修改字段,因此在任何字体编辑操作后更新“head”表始终是最明智的。