Composite glyphs: how é works, and why subsetting can break it
é usually stores no outline of its own — it points at e and an accent. How composites work, why naive subsetting orphans them, and when to decompose.
In Roboto — the system font of Android — 1,402 of its 3,366 glyphs store no
outline of their own. The letter é is one of them: it's a small record saying
"draw e here, then draw ´ shifted 340 units to the right." That's a
composite glyph, and the mechanism behind three things every font user
bumps into eventually: why fixing one letter fixes twenty accented ones, why é
sometimes loses its accent after subsetting, and why some editors refuse to
let you edit a composite's outline directly.
This guide explains how composites work, when they save you space and consistency, when they break, and how Font Studio exposes all of it — building them, editing their parts, decomposing them, and subsetting without orphaning them.
What a composite actually is
In a TrueType glyf table a glyph is either simple (a list of contours
and points) or composite (a list of component references):
glyph "eacute"
component: "e" at offset x=0, y=0
component: "acute" at offset x=340, y=0
The renderer draws the referenced glyphs, placed at the given offsets. The
letter é doesn't contain its own curves — it points at two other glyphs and
says where to put them. In Roboto, that's e (U+0065) plus the spacing acute
accent (U+00B4) — 340 units over, level with the baseline — and the glyph
inherits its 1,086-unit advance from the base. Multiply that by 1,402 glyphs
and the saving is real: every é, è, ê, ë, á, á̈… reuses one e and a handful
of accents instead of carrying its own copy of the outlines.
The design-time payoff is bigger than the bytes. Change the shape of e, and
every accented letter built on it updates — automatically, because they all
are the same outline, referenced. Fix the accent placement once and it's
consistent across the whole font. Professional type foundries build accented
glyphs exactly this way.
Why subsetting can break é
The classic failure: take a font, subset it down to "the characters my app
uses", and suddenly é renders as a bare e — or a box. The cause is almost
always a subsetter that kept é (it's in the keep-list) but dropped the plain
e (it isn't). é's record still points at glyph ID of e… which is no longer
in the font.
The fix is composite closure: before removing anything, expand the keep-list through component references — if é stays, everything é points at stays too, transitively. Font Studio's subsetter does this (removing a base letter that accented glyphs still reference keeps the base automatically), and so does its glyph remover, which runs the same engine underneath. The removal guide covers the workflow; the guarantee you care about here is: subsetting in Font Studio never orphans a composite.
Editing composites in Font Studio
Three rules cover the editing surface:
- A composite's outline can't be point-edited directly — there are no points to edit. In the glyph sheet the button reads Edit Parts instead of Edit Outline, and it opens the Composite Builder to move the components.
- Tools that do rewrite outlines — the Pixel Editor, the Effects hub — flatten a composite into plain contours when applied, and say so.
- Decompose to Contours (free, in the glyph sheet) does the flattening on demand: the glyph becomes a simple outline you can point-edit in the Glyph Designer, at the cost of losing the live link to its base.


Building composites: the builder and the batch path
The Composite Builder (free) handles three jobs in one screen — Convert to Composite (rebuild an existing plain glyph from parts), Edit Parts (move an existing composite's components), and Build from Parts (New Glyph → From Parts):
- For accented Latin letters a Suggested from Unicode card appears (é = e
- acute): tap Use and the parts are placed the way the font's own accents are designed — lowercase height for lowercase bases, lifted for capitals.
- Otherwise Add part, pick from the glyph grid (search by character,
U+0301-style codes, or#glyphIDs), then drag parts with Snap on, or use Nudge arrows (1/10/50 units) and Centre on base for exact placement. Parts are moved, never scaled or rotated. - Advance width: Keep, match the Base part, or Custom.
For adding many accented letters at once, Add Accented Letters (Command Center → CHARACTERS, or the "Add N" button next to a language in the Info tab's Language Coverage) finds every accented Latin letter the font can build from its own glyphs and adds them all as composites in one step — previewing is free, adding is Pro. It also works backwards: "NEEDS ONE MORE PIECE" names the single accent glyph that would unlock a whole batch ("add the caron, U+030C, to unlock 14 letters").
When to decompose, when to keep
Keep composites when you can:
- file size (one outline, many references — the whole point),
- consistency (fix the base once),
- and future editing (move an accent on every É at once by… moving it on none of them — fix the placement in the builder once).
Decompose when you must:
- the glyph needs outline surgery the parts can't express (a genuinely different é shape, not just a moved accent),
- the font is heading into a pipeline that mangles composites (some web font optimizers and older rasterizers),
- or you're importing into a tool that doesn't understand them.
And one diagnostic worth remembering: if editing e in some font you downloaded
also changes its é, è, ê — that's not a bug, that's the composites doing
exactly what they were built to do.
What to try next
- The removal/subsetting side of the story: How to remove unused glyphs from a font
- Every route to adding characters (including From Parts): Adding glyphs
Full documentation
