Implementing TrueType Collections (TTCs)

A TrueType Collection (TTC file) is a single file structure that allows multiple TrueType fonts to efficiently share data tables, resulting in a significant reduction in font file size. Vendors can use TrueType Collections to deliver several fonts which share many glyphs in common.

For example, a group of Korean fonts might each have their own designs for the Hangul glyphs, but share identical designs for the set of Hanja glyphs. With ordinary TrueType font files, the only way to include the common Hanja glyphs in both fonts is to duplicate the Hanja glyph data. But with TTCs, several fonts can share a single copy of the Hanja glyph data. The component fonts of a TTC appear to applications and users as separate fonts. A TTC file can be thought of as a "wrapper" around several related TrueType fonts.

TrueType Collections are very different from the notion of "associated" fonts. With font association, for example, one existing Latin font is designated to accompany a distinct existing Kanji font. In contrast, TTCs are a space-saving delivery mechanism for fonts which share glyphs and other data. They cannot be freely modified by applications or end users.

A TrueType Collection file consists of a single TTC Header, two or more Table Directories, and a number of TrueType tables. For example, here are the key elements of a TTC file which includes two sets of Hangul glyphs:

TTC file element

Contents

TTC Header

Offsets to Table Directories 1 and 2

Table Directory 1

Offsets to TrueType tables for Font 1: cmap 1, name 1, glyf, etc.

Table Directory 2

Offsets to TrueType tables for Font 2: cmap 2, name 2, glyf, etc.

cmap 1

Character mappings to Hangul 1 and Hanja range of glyf

glyf

Glyphs for Font 1 and Font 2: Hangul 1, Hangul 2, and Hanja

name 1

Name strings for Font 1

cmap 2

Character mappings to Hangul 2 and Hanja range of glyf

name 2

Name strings for Font 2


To allow access to the different fonts, the table directories point to different TrueType tables within the TTC file. Each table directory points to a different 'cmap' table. One 'cmap' table encodes the Hangul 1 glyphs and the common Hanja; the other encodes the Hangul 2 glyphs and the common Hanja, at the same code points. Each table directory also points to a different 'name' table. This allows the fonts to appear to applications and users as separate entities, with distinct names.

The rest of this section describes the elements of a TTC file in more detail.