Latin Script
Latin is the script most font tooling quietly assumes as its default, and by raw usage it earns that position: it's the primary script for more languages than any other writing system in daily use. Its shaping model is genuinely simple, no reordering, no joining, no positional letterforms, but its coverage burden is the largest of any script in this track, spanning dozens of diacritics and hundreds of language-specific letters. This article covers its letters, that coverage problem, and what a font needs to handle it properly.
Latin, in one screen
An alphabet with the simplest shaping model in this track and, by a wide margin, the largest glyph-coverage expectations.
The core alphabet is 26 letters, uppercase and lowercase, and Unicode encodes it in the first page of Basic Latin, the same block that holds ASCII. Everything past those 52 shapes is diacritics and language-specific letters, spread across Latin-1 Supplement, Latin Extended-A through Extended-G, and a handful of smaller blocks for phonetic and historic use. A font aimed at more than one language has to treat that extended territory as core work, not an afterthought.
Latin's shaping model is the plainest of any script in this track. Letters don't reorder, they don't change shape by position in a word, and marks attach in a single, well-understood way. If shaping complexity were the only measure, Latin would barely need an article at all.
What makes it demanding is scale. Latin is the primary script for more languages than any other writing system, and each one brings its own diacritic conventions: Vietnamese stacks two marks on a single vowel (a tone mark above a vowel that already carries its own accent, sometimes with a third mark below), Central European languages rely on carons and ogoneks that most English-focused fonts skip, and African and Native American orthographies add letters that don't exist in any Western European language at all. A font that claims "Latin support" without checking which subset it actually covers is making a much bigger promise than it's kept.
Every Latin letter sits inside the same set of horizontal zones, and every diacritic has to be positioned against them without colliding with a neighboring line of text.
H sets the cap height. b and d reach the same line from the ascender side. p, q, and y drop below the baseline into descender territory. Every accent a font draws has to sit above the cap-height line without crowding the line of text above it, which is why many designs quietly reduce accent height on capital letters rather than stacking a full-size mark on top of a full-height cap.
Most Latin diacritics are a single mark on a single letter. Some languages ask for more than that, and a font's mark-attachment logic has to handle both cases without hand-placing exceptions.
café shows the ordinary case: a single mark, single attachment point. Việt ("Vietnam") shows the harder one: the "ệ" carries a circumflex and a grave stacked above it and a dot below it, three marks positioned around one base letter, all resolved through the same mark-to-base and mark-to-mark GPOS lookups a font uses for its simplest single-accent letters.
Latin typography carries a second layer of optional substitutions beyond letters and diacritics: ligatures that smooth out awkward letter collisions, and alternate figure sets for different contexts.
office shows the classic case for liga: without it, the dot of a lowercase "i" collides with the hook of an "f" at most text sizes. sœur ("sister") shows a ligature that isn't optional at all in French orthography, "œ" is treated as its own letter. Figure sets round out the picture: lining figures match cap height for tables and all-caps settings, old-style figures have ascenders and descenders for running text, and tabular figures share a fixed width so columns of numbers align.
Latin needs no reordering and no contextual joining, so its OpenType feature list is almost entirely about substitution choices and mark placement rather than structural shaping.
| Feature | Tag | What it builds here |
|---|---|---|
| Standard ligatures | liga | Common pairs like fi and fl, usually on by default. |
| Discretionary ligatures | dlig | Decorative or optional ligatures left to user preference. |
| Mark attachment | mark | Anchors a diacritic to its base letter. |
| Mark-to-mark | mkmk | Anchors a second mark to one already attached, for stacked diacritics. |
| Kerning | kern | Pair adjustments, including accented capitals that plain kerning tables often miss. |
| Localized forms | locl | Swaps letterforms by language, such as Dutch IJ or Turkish dotless ı. |
| Small capitals | smcp / c2sc | True small caps, drawn as their own glyphs rather than scaled capitals. |
| Figure variants | onum / lnum / tnum / pnum | Old-style vs. lining, tabular vs. proportional numerals. |
| Symptom | Likely cause | Fix |
|---|---|---|
| Accented capitals look cramped or collide with neighboring letters | Sidebearings and kerning built only for unaccented capitals | Test accented capitals in real kerning pairs, not just in isolation |
| Vietnamese stacked diacritics overlap or float incorrectly | Mark-to-mark anchors untested against real three-mark combinations | Test full Vietnamese tone-and-vowel combinations, not single accents |
| A "supported" language shows missing glyphs as tofu | Font ships Basic Latin and Latin-1 only, without the Extended-A letters that language needs | Check a target language's actual character list before claiming support for it |
| fi/fl ligatures don't appear even though the font includes them | liga not enabled by the application or text layout engine | Verify which features an application enables by default, don't assume liga is automatic everywhere |
| Small caps look like scaled-down capitals, uneven and thin | No dedicated small-caps glyphs; the app is faking it by scaling | Draw true small caps at their own weight and proportions |
- 1Define the actual language coverage target before drawing a single extended character.
- 2Draw diacritics as combining marks with proper anchors, not just precomposed glyphs, so stacking works.
- 3Test accented capitals for both spacing and kerning, not only lowercase accented letters.
- 4Build standard ligatures for fi/fl and any required orthographic ligatures your target languages need.
- 5Draw dedicated small caps and figure-set variants rather than relying on scaling.
- 6Test across shaping engines and at multiple sizes and weights before calling the language set done.
Copy these into a test document. Each targets a different part of the coverage and shaping surface covered above.