# “post”表
# 一般表信息
“post”表包含在 PostScript 打印机上使用 TrueType 字体所需的信息。它包含 FontInfo 字典条目所需的数据以及字体中所有字形的 PostScript 名称。它还包含 PostScript 驱动程序进行内存管理所需的内存使用信息。
“post”表记录在下表 72 中。第一项指定表格式。有五种可能性:格式 1、格式 2、格式 2.5、格式 3 和格式 4。每个版本都记录在下面。只有格式 2、2.5 和 4 需要子表。
表 72: “post”表
| 类型 | 名称 | 描述 |
|---|---|---|
| Fixed | format | 本表的格式 |
| Fixed | italicAngle | 斜体角度(以度为单位) |
| FWord | underlinePosition | 下划线位置 |
| FWord | underlineThickness | 下划线粗细 |
| uint32 | isFixedPitch | 字体为等宽字体;如果字体为等宽字体,则设置为 1,否则设置为 0(注意:为了与旧版本的 TrueType 规范保持兼容性,接受任何非零值作为字体为等宽字体的含义) |
| uint32 | minMemType42 | 将 TrueType 字体下载为 Type 42 字体时的最小内存使用量 |
| uint32 | maxMemType42 | 将 TrueType 字体下载为 Type 42 字体时的最大内存使用量 |
| uint32 | minMemType1 | 将 TrueType 字体下载为 Type 1 字体时的最小内存使用量 |
| uint32 | maxMemType1 | 将 TrueType 字体下载为 Type 1 字体时的最大内存使用量 |
isFixedPitch 标志用于指示字体是否为等宽字体。等宽字体是指所有字形在所有点大小下(即在“hmtx”和“hdmx”表中)都具有相同的水平宽度,或者宽度为零。等宽字体还必须正确设置“hhea”表中的最大宽度字段。请注意,在 OS X 上,还需要确保“NFNT”位图字体的字形宽度与 TrueType 字体中的等宽字体度量一致。
minMemType42、maxMemType42、minMemType1 和 maxMemType1 条目是必需的,因为如果在下载字体之前知道可下载 TrueType 字体的虚拟内存要求,PostScript 驱动程序可以更好地进行内存管理。如果已知此信息,则应提供此信息。如果不知道,请将值设置为零。
最大内存使用量等于最小内存使用量加上最大运行时内存使用量。最大运行时内存使用量取决于 TrueType 字体缩放器可能光栅化的任何位图的最大带大小。可以通过以不同的点大小渲染字符并比较内存使用量来计算运行时内存使用量。
下载的 TrueType 字体的内存使用量将根据它在打印机上定义为 TrueType 还是 Type 1 字体而有所不同。可以通过调用 VMStatus、下载字体并再次调用 VMStatus 来计算最小内存使用量。
# 'post' 格式 1
字体中字形的放置顺序由字体开发人员决定。要使用格式 1,字体必须精确包含标准 Macintosh 顺序中的 258 个字形。对于此类字体,字形名称取自系统。因此,此格式不需要特殊的子表。
这 258 个字形的名称依次为:
| 字形 ID | 名称 |
|---|---|
| 0 | .notdef |
| 1 | .null |
| 2 | 非标记返回 |
| 3 | 空格 |
| 4 | 感叹号 |
| 5 | 引用符号 |
| 6 | 数字符号 |
| 7 | 美元 |
| 8 | 百分比 |
| 9 | 和号 |
| 10 | 单引号 |
| 11 | 左括号 |
| 12 | 右括号 |
| 13 | 星号 |
| 14 | 加号 |
| 15 | 逗号 |
| 16 | 连字符 |
| 17 | 句号 |
| 18 | 斜线 |
| 19 | 零 |
| 20 | 一 |
| 21 | 二 |
| 22 | 三 |
| 23 | 四 |
| 24 | 五 |
| 25 | 六 |
| 26 | 七 |
| 27 | 八 |
| 28 | 九 |
| 29 | 冒号 |
| 30 | 分号 |
| 31 | 小于 |
| 32 | 等号 |
| 33 | 大于 |
| 34 | 问题 |
| 35 | 于 |
| 36 | A |
| 37 | B |
| 38 | C |
| 39 | D |
| 40 | E |
| 41 | F |
| 42 | G |
| 43 | H |
| 44 | I |
| 45 | J |
| 46 | K |
| 47 | L |
| 48 | M |
| 49 | N |
| 50 | O |
| 51 | P |
| 52 | Q |
| 53 | R |
| 54 | S |
| 55 | T |
| 56 | U |
| 57 | V |
| 58 | W |
| 59 | X |
| 60 | Y |
| 61 | Z |
| 62 | 左括号 |
| 63 | 反斜杠 |
| 64 | 右括号 |
| 65 | ASCII 圆括号 |
| 66 | 下划线 |
| 67 | 重音符 |
| 68 | a |
| 69 | b |
| 70 | c |
| 71 | d |
| 72 | e |
| 73 | f |
| 74 | g |
| 75 | h |
| 76 | i |
| 77 | j |
| 78 | k |
| 79 | l |
| 80 | m |
| 81 | n |
| 82 | o |
| 83 | p |
| 84 | q |
| 85 | r |
| 86 | s |
| 87 | t |
| 88 | u |
| 89 | v |
| 90 | w |
| 91 | x |
| 92 | y |
| 93 | z |
| 94 | 左括号 |
| 95 | 横线 |
| 96 | 右括号 |
| 97 | ASCII 波浪线 |
| 98 | Adieresis |
| 99 | Aring |
| 100 | Ccedilla |
| 101 | Eacute |
| 102 | Ntilde |
| 103 | Odieresis |
| 104 | Udieresis |
| 105 | aacute |
| 106 | agrave |
| 107 | acircumflex |
| 108 | adieresis |
| 109 | atilde |
| 110 | aring |
| 111 | ccedilla |
| 112 | eacute |
| 113 | egrave |
| 114 | ecircumflex |
| 115 | edieresis |
| 116 | iacute |
| 117 | igrave |
| 118 | icircumflex |
| 119 | idieresis |
| 120 | ntilde |
| 121 | oacute |
| 122 | ograve |
| 123 | ocircumflex |
| 124 | odieresis |
| 125 | otilde |
| 126 | uacute |
| 127 | ugrave |
| 128 | ucircumflex |
| 129 | udieresis |
| 130 | dagger |
| 131 | degree |
| 132 | cent |
| 133 | sterling |
| 134 | section |
| 135 | bullet |
| 136 | passage |
| 137 | germandbls |
| 138 | registered |
| 139 | copyright |
| 140 | trade |
| 141 | 锐角 |
| 142 | 分音符 |
| 143 | 音符相等 |
| 144 | AE |
| 145 | Oslash |
| 146 | 无穷大 |
| 147 | 加减 |
| 148 | 减等 |
| 149 | 大于等 |
| 150 | 日元 |
| 151 | mu |
| 152 | partialdiff |
| 153 | 求和 |
| 154 | 乘积 |
| 155 | pi |
| 156 | 积分 |
| 157 | 阴性或阳性 |
| 158 | 阳性或阳性 |
| 159 | Omega |
| 160 | ae |
| 161 | oslash |
| 162 | questiondown |
| 163 | exclamdown |
| 164 | logicalnot |
| 165 | 根号 |
| 166 | florin |
| 167 | approxequal |
| 168 | Delta |
| 169 | guillemotleft |
| 170 | guillemotright |
| 171 | 省略号 |
| 172 | nonbreakingspace |
| 173 | Agrave |
| 174 | Atilde |
| 175 | Otilde |
| 176 | OE |
| 177 | oe |
| 178 | endash |
| 179 | emdash |
| 180 | quotedblleft |
| 181 | quotedblright |
| 182 | quoteleft |
| 183 | quoteright |
| 184 | divide |
| 185 | lozenge |
| 186 | ydieresis |
| 187 | Ydieresis |
| 188 | 分数 |
| 189 | 货币 |
| 190 | guilsinglleft |
| 191 | guilsinglright |
| 192 | fi |
| 193 | fl |
| 194 | daggerdbl |
| 195 | periodcentered |
| 196 | quotesinglbase |
| 197 | quotedblbase |
| 198 | perthousand |
| 199 | Acircumflex |
| 200 | Ecircumflex |
| 201 | Aacute |
| 202 | Edieresis |
| 203 | Egrave |
| 204 | Iacute |
| 205 | Icircumflex |
| 206 | Idieresis |
| 207 | Igrave |
| 208 | Oacute |
| 209 | Ocircumflex |
| 210 | apple |
| 211 | Ograve |
| 212 | Uacute |
| 213 | Ucircumflex |
| 214 | Ugrave |
| 215 | dotlessi |
| 216 | circumflex |
| 217 | tilde |
| 218 | 长音符 |
| 219 | breve |
| 220 | 点重音符 |
| 221 | 环 |
| 222 | 变音符 |
| 223 | hungarumlaut |
| 224 | ogonek |
| 225 | 卡隆 |
| 226 | 斜线 |
| 227 | 斜线 |
| 228 | Scaron |
| 229 | scaron |
| 230 | Zcaron |
| 231 | zcaron |
| 232 | brokenbar |
| 233 | Eth |
| 234 | eth |
| 235 | Yacute |
| 236 | yacute |
| 237 | Thorn |
| 238 | thorn |
| 239 | minus |
| 240 | multiply |
| 241 | onesuperior |
| 242 | twosuperior |
| 243 | threesuperior |
| 244 | onehalf |
| 245 | onequarter |
| 246 | threequarters |
| 247 | franc |
| 248 | Gbreve |
| 249 | gbreve |
| 250 | Idotaccent |
| 251 | Scedilla |
| 252 | scedilla |
| 253 | Cacute |
| 254 | cacute |
| 255 | Ccaron |
| 256 | ccaron |
| 257 | dcroat |
当 OS X 8.5 发布时,MacRoman 字符集被重新定义,用欧元取代通用货币符号。但是,为了避免破坏使用它的字体和软件,Macintosh 的标准字形排序并未更新。字体供应商应尽可能更新其字体以包含欧元,以便在 OS X 8.5 及更高版本上正常运行。带有欧元的字体不能使用“post”格式 1 或 2.5。
# “post”格式 2
格式 2 用于包含一些不在标准集中的字形或其字形排序非标准的字体。此子表中的字形名称索引数组将此字体中的字形映射到名称索引。如果名称索引介于 0 和 257 之间,则将名称索引视为 Macintosh 标准顺序中的字形索引。如果名称索引介于 258 和 32767 之间,则减去 258 并使用该值对表末尾的 Pascal 字符串列表进行索引。通过这种方式,字体可以将其部分字形映射到标准字形名称,将部分字形映射到其自己的名称。
索引号 32768 到 65535 保留供将来使用。如果您不想将 PostScript 名称与特定字形关联,请使用指向名称 .notdef 的索引号 0。
请注意,numberOfGlyphs 字段必须等于“maxp”(最大配置文件)表的 numGlyphs 字段。
表 73: “post”格式 2
| 类型 | 名称 | 描述 |
|---|---|---|
| uint16 | numberOfGlyphs 字形数量 | |
| uint16 | glyphNameIndex[numberOfGlyphs] | 此字形在“post”字符串表中的序数。这不是偏移量。 |
| Pascal | names[numberNewGlyphs] | 长度为字节的字形名称 [变量](Pascal 字符串) |
# 'post' 格式 2.5
格式 2.5 是一种节省空间的格式,适用于包含标准字形集的纯子集或包含标准集的重新排序的字体。此格式适用于仅包含标准 Apple 字形集中的字形但这些字形以非标准顺序排列的字体或缺少某些字形的字体。该表包含字体中每个字形的一个字节。该字节被视为有符号偏移量,它将此字体中使用的字形索引映射到标准字形索引中。例如,假设字体包含三个字形 A、B 和 C。假设 C 首先出现,B 其次出现,A 第三出现。这些字形是标准排序中的第 37、38 和 39 个字形。 “post”表将包含字节 +39、+37、+35,因为:
offset[0] 索引 C,0 + 39 = 39 是 C 的标准索引
offset[1] 索引 B,1 + 37 = 38 是 B 的标准索引
offset[2] 索引 A,2 + 35 = 37 是 A 的标准索引
请注意,numberOfGlyphs 字段必须等于“maxp”(最大配置文件)表的 numGlyphs 字段。
表 74: “post”格式 2.5
| 类型 | 名称 | 描述 |
|---|---|---|
| uint16 | numberOfGlyphs | 字形数量 |
| int8 | offset[字形数量] | 图形索引与字形标准顺序之间的差异 |
当 OS X 8.5 发布时,MacRoman 字符集被重新定义,用欧元取代通用货币符号。但是,为了避免破坏使用它的字体和软件,Macintosh 的标准字形排序并未更新。字体供应商应尽可能更新其字体以包含欧元,以便在 OS X 8.5 及更高版本上正常运行。带有欧元的字体不能使用“post”格式 1 或 2.5。
自 2000 年 2 月起,使用“post”格式 2.5 已弃用。字体供应商不应使用格式 2.5 在其字体中放置“post”表,而应将现有字体转换为不同的“post”表格式。
# “post”格式 3
格式 3 可以创建一种特殊的字体,而不必负担大量“post”表的字形名称。此格式指定不为此字体中的字形提供 PostScript 名称信息。此格式在 PostScript 打印机上的打印行为未指定,但它不应导致致命或不可恢复的错误。某些驱动程序可能不打印任何内容,其他驱动程序可能会尝试使用默认命名方案进行打印。此格式不需要特殊的子表。
Apple 建议在大多数情况下不要使用“post”表格式 3,因为它可能会给某些打印机驱动程序和 PDF 文档带来问题。节省的磁盘空间通常不能弥补潜在的功能损失。
# “post”格式 4
日文、中文或韩文打印机上的复合字体仅适用于字符代码。AAT 打印机驱动程序只知道字形索引值。TrueType 缩放器使用格式 4“post”表重新编码映射到打印机上的复合字体的字体。此编码包括使用字符代码命名字形。驱动程序具有 PostScript 代码,它知道如何获取此 ASCII 字符串,删除前导“a”,并将其余部分转换为十六进制。得到的十六进制数是字形的字符代码。以此方式,使用打印机上的复合字体。
任何映射到打印机上的复合字体的字体都需要包含格式 4“post”表。格式 4“post”表的结构如下:“post”表头后跟一个 uint16 值数组。每个字形都需要一个条目。数组中的索引是字形索引。数组中的数据是映射到该字形的字符代码,如果该字形没有关联的字符代码,则为 0xFFFF。
通常,格式 4“post”表不再是必要的,应避免使用。
# 依赖项
如果“post”表暗示字体中的字形数量(对于除 3 之外的每个“post”表格式都是如此),则“post”表暗示的字体中的字形数量必须与最大配置文件(“maxp”)表中找到的字形数量相匹配。