The post table holds what a PostScript printer needs: the italic angle,
the underline, whether the font is monospaced, memory estimates, and, in version 2.0,
a PostScript name for every glyph. Windows reads the italic angle but needs no glyph
names. Fonts with TrueType outlines may use any version; fonts with CFF outlines must
use 3.0, as their glyph names are in the CFF data.
Header
32 bytes, the same in every version.
| Offset | Type | Name | Description |
|---|---|---|---|
0 | Version16Dot16 | version | 0x00010000 1.0, 0x00020000 2.0, 0x00025000 2.5 (deprecated), 0x00030000 3.0; Apple also defines 0x00040000 4.0, which OpenType does not support. |
4 | Fixed | italicAngle | Degrees counter-clockwise from vertical: 0 for upright, negative for text leaning right. −12° is 0xFFF40000. |
8 | FWORD | underlinePosition | The suggested y of the top of the underline. (PostScript’s UnderlinePosition key means its centre; post does not use that meaning.) |
10 | FWORD | underlineThickness | The suggested underline thickness, normally that of the underscore and of the strikeout in OS/2. |
12 | uint32 | isFixedPitch | 0 if proportional, any other value if monospaced. |
16 | uint32 | minMemType42 | Minimum printer memory used when the font is downloaded as a Type 42 font; 0 if unknown. |
20 | uint32 | maxMemType42 | Maximum memory, as a Type 42 font: the minimum plus the most the rasteriser may need at run time. |
24 | uint32 | minMemType1 | Minimum memory when downloaded as a Type 1 font. |
28 | uint32 | maxMemType1 | Maximum memory when downloaded as a Type 1 font. |
In a variable font, the underline can vary through MVAR with the tags
undo (position) and unds (thickness); the italic angle comes
from the slnt axis.
Versions
1.0: the standard Macintosh glyph set
Nothing follows the header. The font has exactly the 258 glyphs of the standard Macintosh set, in the standard order, and takes their names from that list.
2.0: names for every glyph
| Type | Name | Description |
|---|---|---|
uint16 | numGlyphs | The number of glyphs; should equal numGlyphs in maxp. |
uint16 × numGlyphs | glyphNameIndex | For each glyph, 0 to 257 for a standard Macintosh name, or 258 and up for string number (index − 258) in stringData. |
uint8[ ] | stringData | Pascal strings to the end of the table: a length byte, then that many ASCII characters. |
A name may use only A–Z, a–z,
0–9, full stop and underscore, and be at most 63
characters; some older software assumes 31. A glyph that should have no name gets
index 0, .notdef. To find string n, a reader skips the
n strings before it one by one. Names are normally those of the Adobe
Glyph List, or uni followed by four hex digits for other
characters.
2.5: reordered standard set (deprecated)
| Type | Name | Description |
|---|---|---|
uint16 | numGlyphs | The number of glyphs. |
int8 × numGlyphs | offset | For each glyph, its standard Macintosh index minus its glyph ID. |
For fonts whose glyphs are all in the standard set but some are missing or out of order. A font of just A, B and C as glyphs 0, 1 and 2 would store +36, +36, +36, since they are standard glyphs 36, 37 and 38.
3.0: no glyph names
Nothing follows the header, and the font gives no glyph names. A PostScript driver may print nothing or make up names, but must not fail. This keeps fonts with many glyphs, such as CJK fonts, small.
4.0: Apple’s character codes
Defined only by Apple, for fonts that map to composite fonts on Chinese, Japanese
or Korean printers. The header is followed by one uint16 per glyph: the
character code for that glyph, or 0xFFFF for none. The driver names
each glyph a followed by the code in hex. Apple says such tables are
no longer needed and should be avoided.
The 258 standard Macintosh glyph names
Used by version 1.0, and by version 2.0 for indices 0 to 257. Glyph 1,
.null, and glyph 2, nonmarkingreturn, are the empty glyphs
old Mac fonts carried for the null and carriage return characters.
| Index | Names |
|---|---|
| 0 to 9 | .notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent ampersand |
| 10 to 19 | quotesingle parenleft parenright asterisk plus comma hyphen period slash zero |
| 20 to 29 | one two three four five six seven eight nine colon |
| 30 to 39 | semicolon less equal greater question at A B C D |
| 40 to 49 | E F G H I J K L M N |
| 50 to 59 | O P Q R S T U V W X |
| 60 to 69 | Y Z bracketleft backslash bracketright asciicircum underscore grave a b |
| 70 to 79 | c d e f g h i j k l |
| 80 to 89 | m n o p q r s t u v |
| 90 to 99 | w x y z braceleft bar braceright asciitilde Adieresis Aring |
| 100 to 109 | Ccedilla Eacute Ntilde Odieresis Udieresis aacute agrave acircumflex adieresis atilde |
| 110 to 119 | aring ccedilla eacute egrave ecircumflex edieresis iacute igrave icircumflex idieresis |
| 120 to 129 | ntilde oacute ograve ocircumflex odieresis otilde uacute ugrave ucircumflex udieresis |
| 130 to 139 | dagger degree cent sterling section bullet paragraph germandbls registered copyright |
| 140 to 149 | trademark acute dieresis notequal AE Oslash infinity plusminus lessequal greaterequal |
| 150 to 159 | yen mu partialdiff summation product pi integral ordfeminine ordmasculine Omega |
| 160 to 169 | ae oslash questiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft |
| 170 to 179 | guillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash |
| 180 to 189 | quotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis fraction currency |
| 190 to 199 | guilsinglleft guilsinglright fi fl daggerdbl periodcentered quotesinglbase quotedblbase perthousand Acircumflex |
| 200 to 209 | Ecircumflex Aacute Edieresis Egrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex |
| 210 to 219 | apple Ograve Uacute Ucircumflex Ugrave dotlessi circumflex tilde macron breve |
| 220 to 229 | dotaccent ring cedilla hungarumlaut ogonek caron Lslash lslash Scaron scaron |
| 230 to 239 | Zcaron zcaron brokenbar Eth eth Yacute yacute Thorn thorn minus |
| 240 to 249 | multiply onesuperior twosuperior threesuperior onehalf onequarter threequarters franc Gbreve gbreve |
| 250 to 257 | Idotaccent Scedilla scedilla Cacute cacute Ccaron ccaron dcroat |
Example
The 292-byte version 2.0 post table of KaTeX’s Size2 Regular font:
00000000 00 02 00 00 00 00 00 00 FF 83 00 32 00 00 00 00
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000020 00 28 00 00 00 01 00 02 00 03 00 0B 00 0C 00 12
00000030 00 3E 00 3F 00 40 00 5E 00 60 01 02 00 D8 00 D9
00000040 01 03 01 04 00 9A 01 05 00 99 00 A5 00 9C 01 06
…
00000070 01 17 07 75 6E 69 30 30 41 30 07 75 6E 69 30 33
- Version 2.0, upright (italic angle 0), underline top at −125 and 50 thick, proportional, no memory estimates.
- 40 glyph name indices. Glyphs 0 to 3 are standard names 0 to 3,
.notdeftospace; glyph 4 is 11,parenleft; glyph 17 is 154,product, and glyph 19 is 153,summation, the glyphs the cmap gives for ∏ and ∑. - Glyph 12 has index 258 (
01 02): the first string,07thenuni00A0, the no-break space. Indices 258 to 279 name 22 glyphs this way, such astildecombanduni2210.