Sphinx of Black Quartz, Judge my Vow!

Type design needs something better than a quick brown fox. Specifically, we need word lists that demonstrate pairs of letter forms efficiently.

An example of word lists used in type design

We've all heard the quick brown fox phrase as a means of demonstrating all of the letters of the Roman alphabet in a single phrase. Without question, "Sphinx of Black Quartz, Judge my Vow" is way cooler.

I've been doing some type design lately. When you attempt this, it rapidly becomes clear that letter forms hardly ever exist singly. In practice, you need to consider adjacent pairs of letter forms. Unfortunately, there are a lot of these things, so if you take a naive approach it can take an impractical amount of time to consider every possibility.

A common technique is to create kerning groups. This exploits the tendency for many letter forms to share similar shapes on their left or right side. For example, in many typefaces, O and D look similar on the right. M and N often look similar on both sides. The exact details depend on the design of the typeface, but broadly speaking this knocks down the search space considerably.

It is also possible to make a further huge reduction by only considering pairs that actually appear in typical text. I'm not suggesting avoiding due diligence by at least eyeballing all possible pairs, but at the type design level it really helps to be able to get close quickly.

So what I found myself wanting was a type design equivalent of a quick brown fox – a (hopefully short) phrase or at least list of words that exercises as many letter pairs as possible as compactly as possible.

I came up with an algorithm:

  1. Given a word list, look for the shortest word that introduces the greatest number of previously unseen pairs.
  2. Go to 1.

Of course, once the search fails to find any new pairs, you can stop iterating. It is guaranteed to terminate because any word list must contain only a finite number of distinct pairs. Note that this in and of itself will not guarantee to generate a truly minimal phrase – this would require a backtracking search, but a simple depth first search that terminates once no more pairs are found worked fine.

The word list I used was the classic Scrabble dictionary. In principle any word list will work, but this is a good compromise between enormity and being big enough to have good coverage. The principle is general and will work for any language that has text that can be broken into words.

It is possible to search either for all pairs or just a specific subset of pairs. I've included here what pops out when you search for all possible pairs, and specific results for each upper and lower case letter form.

I've found that working through the large 'All pairs' list is an effective way to set the spacing for a new typeface, and works both for setting side bearing and for creating kerning pairs. Since the first words contain many pairs, progress is suprisingly quick, though it slows down as you get toward the end of the list. It takes a few passes to get to a point when things settle down and stop changing.

These particular lists assume that you are using kerning groups.

I've found that the letter form specific word lists are good when I have decided to modify a letter form and want to see it in context while I'm editing (Glyphs 3 is very good for working that way), and for adjusting spacing when I'm done. It lets me break the standard waterfall approach to type design, where letter forms are designed first, then side bearing, then kerning, with the assumption that you need to start over if you break that loop. By being able to look at all the consequences of modifying a single letter form it removes this problem.

In conclusion, I've found this to work way better and faster than the more traditional approach of just inventing phrases on the fly.

It's interesting when looking particularly at the All pairs section below that my blog's default typeface has a few spacing issues! (It's not one of mine!)

All pairs

ABSORBABILITIES absorbabilities Accountantships acknowledgement Chromatographed AGRANULOCYTOSES mistrustfulness OVEREXPECTATION Stupefyingly Allopolyploid MASSASAUGAS Consumptively Lukewarmnesses Camouflagic Benzaldehyde SOUTHWESTWARD HYPOTHYROIDISM Enfeoffed Crucifixion CONVOLVULUSES PSYCHOANALYZED Subjectivizing Unmuzzle Epimysium KAVAKAVAS Revokable Drawnworks Kolkhozniki Ultraexclusive Exoerythrocytic BOWWOWS BUZZCUT Foxskin Fylfots Duvetyne LAYAWAYS Scuppaug SUFFIXAL QUARTETTE Periwinkle Blitzkriegs Overgoverns Dekkos PAZAZZ Syzygy FOXSKIN Gyttjas Keyways Spurtle Upswung Azulejos Bombyxes Eggfruit jujuisms Asymmetry Awkwardly Bullsnake Afterworld CANDYTUFTS GEWURZTRAMINER Pleuropneumonia Laxly crojik Evzone KUDZUS Popgun Prajna Pulque TSKTSK Warsle Armsful Culprit Ekpwele Klezmer PURVEYS Skyjack Turfman Valvula ZYZZYVA ANEURYSM Ayurveda EARWAXES Fahlband NGULTRUM numchuck Zugzwang ANAPTYXES FALSEFACE GORGONIZE Workmanly Bradykinin Gewurztraminer Agma Atma Cwms Elhi FUJI gyve KOJI Owse Abmho Avgas Axman BUXOM BYWAY Dolce Etwee HAJJI Hijra Oxter Rowth Taxus Twyer Vodka Vulgo Amrita Bupkus Calmly Eczema Emdash EVZONE EXUVIA Frowzy Grosze GYTTJA Logjam Lynxes Offkey PYJAMA Slojds Tocsin Tsktsk TZETZE Ugsome Akvavit Apyrase Envying Flehmen Glowfly Goodman Gumtree Kumquat MUUMUUS OBVERSE Swayful Tramway WICKYUP Zemstva AASVOGEL BEJEEZUS Clerkdom Czarevna DIVVYING Dysgenic Fuelwood Krumkake NEWSWIRE Quadplex Rucksack Snapback SUBTEXTS Wrackful ZUGZWANG Pyroxylin Escarpment Yellowware OBJECTIFYING Auk Bye CWM cwm Eff Ewe Eye Hmm Ilk Imp Kye Oka Old Oms Ose Psi QAT Qat qat QIS qis Rya Tye Udo Uke Umm Use Uta Wud WYE Wye Yob Yuk Zoa Zzz Acme Ajar BUYS Cyan CZAR Djin djin Euro Ikat kbar KVAS Kvas LWEI Lwei Ogam Otic Pfft pfft Ptui QOPH Qoph qoph Smew Tzar Updo Uvea Vrow XYST Xyst Ylem Ywis Zyme ANGST Babka Banjo BAWTY Bumfs BWANA Bwana Civvy COLZA Colza Eject FJELD Fjeld fjeld GWINE Gwine gwine Hajji Hamza KOPJE Kopje Latke Llama Outgo Ozone Phpht Vying Xebec Zlote Afghan BLOWZY Boxful BUQSHA Buqsha CALXES Calxes Fizgig FOLKSY Gewgaw Gingko Ginkgo GROSZE Hepcat HOGTIE Hogtie Humvee INKJET Inkjet Ipecac Kishka KWACHA Kwacha LOGJAM MASJID Masjid MUZJIK Muzjik OFFSET Offset OUTVIE PAXWAX Paxwax QWERTY Qwerty qwerty Ramjet SAYYID Sayyid Subpar Svaraj svaraj Tmeses TOCSIN UPWAFT VIZSLA Vizsla VROUWS Walrus Yttria ALFORJA Alforja BLOWJOB Blowjob Ctenoid DOGVANE Dogvane Gjetost Gravlax HALFWAY Halfway KILLJOY Killjoy Laxness Mahjong MITZVAH Mitzvah Pirojki Sferics Sjambok Slumgum Sovkhoz SUBZERO Ufology Uxorial Backcast Fluxgate POXVIRUS Poxvirus Zwieback Rijstafel Sgraffiti PEROVSKITE Perovskite

Upper case A

CATAMARANS LAYAWAYS KAVAKAVAS MASSASAUGAS BAZAAR COAXAL PAPACY FAJITA DEADBEAT Aah Aff Aga Ala Ama Ana Ape Ash Ate Auk Ava Awa Axe Aye Azo QAT Ajar Akee DUAD

Upper case B

ABSORBABLE DISCOMBOBULATE DEBTS UPBYE SUBWAY LIGHTBULBS Baa Boa Bra Bub Bye Blab GYBE ISBA KBAR Bwana OBJET OXBOW RUGBY ABVOLT BAWBEE JAZZBO SACBUT OFFBEAT SUBZERO

Upper case C

MICROCOCCAL SPECTACULAR EXERCYCLE SCOTCH MUCLUCS CALCSPAR Cab Cob Cru Cub CWM Cwm Clad Cyan CZAR Czar EXCEL BOBCAT EGGCUP HEPCAT MEZCAL OFFCUT SOWCAR Ctenoid BACKCAST

Upper case D

MUDDLEHEADEDLY BANDWIDTH DOGDOM BALDERDASH ABDUCE ECDYSES Dab Doc Dry Dub Dye ADZE DJIN Djin UPDO ASDIC BAWDS CYDER DIDST Dwarf OUTDO ADVECT DIKDIK CHEFDOM HAVDALAH SAMIZDAT SEXDECILLION

Upper case E

DEGENERATENESS OVERBEJEWELED REAPPEARED KEYSETS FEUED OYEZES CELOTEXES LAEVO Ear Eff Egg Eke Eld Eme End Eon Ess Eta Eve Ewe Eye Euro Exam Eject SHEQEL

Upper case F

EFFORTFUL ALFALFAS LIFTOFF TURFSKI LEAFWORM ARGUFYING Fab Flu Fob Fro Fub Fyce PFFT AWFUL FJELD Fjeld NAKFA BAGFUL BOXFUL DAYFLY MISFED SOBFUL

Upper case G

ENGAGINGLY BEGOGGLED GUITGUIT ARGYLE BUGSHA Gab Gnu Goa Gul Gym ALGA Glad AVGAS GWINE Gwine PYGMY AFGHAN FIZGIG GEWGAW GINKGO HOGTIE LOGJAM POPGUN SUBGUM ZIGZAG BUSGIRL DOGVANE Gjetost FLUXGATE

Upper case H

THROUGHITHER ICHTHYOPHAGOUS PAHOEHOE SHUSHED GLUHWEIN WHEELHORSE RHOMBOHEDRA Had Hmm Hob Hub Hyp KHI BHUT Hwan ANYHOW EXHALE Hryvna MAHZOR MUZHIK TAHSIL MAHJONG OFFHAND BOSHVARK

Upper case I

DIVISIBILITIES CICATRICIAL PIXIEISH KIWIFRUIT ZIZIT SAIYID FIFING QIVIUT GIGGING Ice Iff Igg Ilk Imp Ink Ion Ism Its Ivy Ikat Iwis Ixia Izar BIJOU Ipecac

Upper case J

JUJUS HAJJES JOJOBA DEEJAY Jab Job Jug FJELD Jnana KOPJE OBJET GYTTJA INKJET LOGJAM MASJID MUZJIK PYJAMA ALFORJA BLOWJOB KILLJOY RIJSTAFEL

Upper case K

KRUMKAKES SKOOKUM TICKTACKTOE WORKWEEKS ALKYD MUKLUKS HAWKSHAW Kab Koa Kue Kye DYKE Klik Knap KVAS Kvas BABKA LATKE BUPKES GINGKO INKJET Kwacha OFFKEY BRITZKA SOVKHOZ

Upper case L

CELLULOLYTIC HALALAH GUILTLESSLY SYLVA GLEGLY AWLWORT BLACKLY CLEARLY PLUMPLY FLIMFLAM Lab Lob Lug Lye ALSO AXLE Lwei AZLON COLZA Llama CALXES GRAVLAX KILLJOY

Upper case M

BIOENGINEERINGS UNSPECIALIZED definitizing AFFECTIVITIES Sociobiologist Lixivium Kiwifruit HYPOPHARYNXES Hybrid DOWNWIND UNUNUNIUM Lightweight shushed QIS qis BANJO

Upper case N

INCONVENIENCING UNUNUNIUM ANTIOZONANTS UNBEKNOWNST SNYE LYNXES HORNWORM UNJUSTNESS GNU Nab Nob Nth Nub ACNE ULNA APNEA BONZE Ngwee Nyala COBNUT HRYVNA BIZNAGA HAFNIUM LAXNESS

Upper case O

NONGONOCOCCAL PROTOZOAL FOXGLOVE POSTBOURGEOIS SOWCAR VOYAGE KOJI MUCLUCS POLYCYCLIC Dab Doc Dry Dub Dye Off Oka Old Oms Ose Ova Owe Oxo Ogam Otic QOPH Ozone

Upper case P

UPPROPPED POSTAPOCALYPTIC IMPALPABLE PURPURA DYSPEPSY EKPWELE Pac Ply Pod Pro Psi Pub PYA Pya EXPO Pfft Ptui GAWPS KOPJE HATPIN HUTZPA MAGPIE SECPAR SUBPAR HALFPIPE

Upper case Q

EQUIVOQUE FAQIR BUQSHA BURQAS Qat Qua QOPH Qoph FIQUE SQUAB ACQUIT CALQUE QWERTY Qwerty MEZQUIT COTQUEAN EXQUISITE

Upper case R

CARRYFORWARDS MICROPROGRAM PERVERTERS FIRSTFRUITS GEWURZTRAMINER BROWRIDGE PYRARGYRITE Rad Rob Rub Rya SRI KRIS VROW WALRUS ALFORJA

Upper case S

CLASSLESSNESSES BIOSYSTEMATISTS TSUTSUGAMUSHI SALSAS SOURSOP UPSWEEP Sab Ska Sly Sob Sri Sty Sub Syn OWSE Smew Swab ANGST FUBSY AXSEED BUQSHA FOLKSY GROSZE MASJID OFFSET SVARAJ Svaraj TOCSIN VIZSLA Sferics Sjambok Sgraffiti PEROVSKITE

Upper case T

STATUETTES OTOTOXICITY TSKTSK OUTJUTS SALTWORTS PTERODACTYL TZETZE SUBTEXTS CYTOLYTIC Tab Tod Try Tsk Tub Twa Tye EFTS Tzar BAWTY HOGTIE OUTVIE Tmeses FUZZTONE

Upper case U

TUMULTUOUSLY CHAUTAUQUAS SUPERLUXURY BUZUKI FURUNCULOSES GUVS PUJA MUUMUUS PLEUROPNEUMONIA KUE Udo Ugh Uke Ulu Umm Uns Upo Use Uta VUG WUD YUK BUYS Uvea VROUWS Ufology Uxorial

Upper case V

OVERVIVID AVADAVAT EVOLVE UVULA DIVVYING Vac Voe Vug GYVE KVAS Vrow Vying ABVOLT EVZONE OUTVIE SVARAJ DOGVANE MITZVAH POXVIRUS PEROVSKITE

Upper case W

BOWWOWED AWKWARD NEWSWIRE CRWTH TWYER MUGWUMP CWM Wab Woe Wry Wud Wye HWAN LWEI YWIS BWANA BLOWZY PAXWAX QWERTY UPWAFT VROUWS BLOWJOB BUZZWIG HALFWAY

Upper case X

MAXIXES EXTRATEXTUAL BUXOM COXAE XYST Xyst EXUDE PYXES Xebec AXSEED CALXES PAXWAX POXVIRUS

Upper case Y

SYZYGY XYLYLS MYXOCYTE BYWAYS ODYSSEYS GYVE KYAK PYJAMA BUTYRYL YUPPIFYING WYE Yag Yob Yuk BUYS Ylem Ywis VYING SAYYID Yttria

Upper case Z

PIZZAZZES MEZUZOT ZYZZYVA TZETZE ZUGZWANG GEWURZTRAMINER Zag Zoa Zuz Zzz ADZE CZAR Zyme COLZA Zlote BLOWZY EVZONE GROSZE MUZJIK VIZSLA MITZVAH SUBZERO Zwieback

Lower case a

Catamarans Lackadaisically layaways Kavakavas Massasaugas haphazard Leafage Rajah Baobab Taxable Papal Aah Dab Ear Fab Gab Qat qat Sab Vac Wab Yag Zag Uakari Xanthan

Lower case b

Absorbable Cobwebbier Thromboembolic bulbul Outbribe Inbye Objet Ebb Gybe Isba Kbar kbar Upby Abmho Babka Debts Oxbow Rugby Abvolt Bawbee Jazzbo Sacbut Sobful Subgum Subpar Ubiety Offbeat Subzero

Lower case c

Micrococcal circumcircle Backchecks Acyclic Ectoprocts Excrescence Scotch Calcspar cwm Oca Acme czar Yclad Eggcup Hepcat Mezcal Offcut Sowcar Tchotchke

Lower case d

Muddleheadedly Rhododendron dikdik dumdum Adjudge Goldfields Odyl Birdman Bandwidth Edh Udo Adze Updo Asdic Bawds Cyder Didst Outdo Vodka Advect Bedpan Dogdom Slojds Chefdom Ecdyses Bdellium Havdalah Samizdat Sexdecillion

Lower case e

Degenerateness Peacekeeper Overbejeweled Semiretirement debriefed Vexednesses Bezel Feued Keyed Leva Cee Eek Ged Reb Tea Web Yea Zed Aeon Xebec Sheqel

Lower case f

Effortful Alfalfas Infraspecific flimflam Aftereffect afghan Offkey offset Surfman Satisfying Pfft pfft Awful fjeld Nakfa Bagful Boxful Dayfly Halfway Sferics Ufology

Lower case g

Engagingly Eggnogs gorgon Bigwigs guitguit Agma Ugsome eggfruit Polygyny Alga Ogam Avgas Afghan Fizgig Gewgaw Gingko Ginkgo Hogtie Logjam Popgun Zigzag Busgirl Dogvane Slumgum Fluxgate Sgraffiti

Lower case h

Throughither Churchmanship Pahoehoe Adenohypophyses Schlemihls Shwa Phpht Whishts Pirozhki wheelhorse Aha Ghi Khi khi mho Ohm Rho rho Bhut Uhlan Anyhow Exhale Mahzor Tahsil Archfoe Fishgig Mahjong Offhand Boshvark

Lower case i

Divisibilities minimizing Crucifixion Liripipe Wikiup Bigwigs Gaijin Rigidifying Kiwi Gieing Aid Cig Fib Pia Qis qis Sib Tic Via Xis Yid Zig Eide Aliya Uintaite

Lower case j

jujus Hajjes jojoba jimjams Hijra Ajar Djin djin Banjo Eject eject Fjeld fjeld jnana Kopje Objet Gyttja Inkjet Logjam Masjid Muzjik Pyjama Slojds Alforja Blowjob Gjetost Killjoy Mahjong Pirojki Sjambok Rijstafel

Lower case k

krumkakes knickknacks Skookum skinking Dikdiks Mukluks Workfolks Lekvar Awkward Ekpwele Sovkhoz Ticktacktoe kye Oka Uke Akee Dyke Ikat kbar Babka Latke Vodka Bupkes Folksy Gingko Ginkgo Inkjet Kishka Offkey Bookman Britzka Pirojki Backcast

Lower case l

Cellulolytic Ultraliberalism Flawlessly Alkyls Mildly Elflike Calmly Glegly Atlatls Blackly Bulblet Cleanly clearly Illness Plumply Buhlwork Mantelshelves Old Sly Alga Alps Axle Elhi Klik Ylem Alcid Azlon Colza Llama Zlote Calque Calxes Walrus Gravlax Killjoy

Lower case m

Dismemberment maximumly mommies Comsymps Mecamylamine Abmho Amnia Emcee Smegma Filmdom Umteenth Enmeshment Impartment Hmm Oms Acme Cwms Adman Axman Bumfs Dumka Gizmo Hamza Amrita Dimwit Humvee Ramjet Tmeses Upmost Bookman Cumquat Slumgum Surfman

Lower case n

nonconcurrence Unthinkingly Annul Enwrap Ethynyl Onscreen Truthfulness Brainlessness Frenzy Grigri Prajna Unmitre Cracknel froufrou Sri Wry Envy Knap Vrow vrow Amnia Apnea Banjo Jinxed Biznaga Laxness

Lower case o

Photobiological osteoporoses overencouraged Locoweeds Paduasoys Cookoff Damozel Volvoxes Leiomyoma Dojos Polycyclic Schizogony Gaol Befog Cafes Rewon Taxol Aah Boa Ear Eon Fab Fob Goa Kab Koa Qat qat Rob Sob Tod Udo Vac Wab Woe Yag Yob Zag Zoa Qoph qoph Aorta Xebec

Lower case p

proprioceptor phospholipid Hypercomplex pappus Soupspoon Upfold Topwork Googolplex Apnea Bozos Kopje Convoy Popgun Doxology Woodpile Foretopman Eon Lob pya Rob Voe Yob Zoa Qoph qoph Upby Updo Phpht Bupkes Hepcat Inkpot Ipecac Subpar

Lower case q

Equivoque Faqir Burqas Aqua qoph equal Fique Squab squab Acquit Buqsha Calque Cinque qwerty Cumquat Mezquit Oquassa Cotquean Exquisite

Lower case r

Carryforwards Interferometric Grugrus Choirgirls Armrest Cryopreserve Protomartyrs Erst Orzo Urethra Darkroom Froufrou Browridge crossroad Sri Try Wry Kris Vrow vrow Hijra Walrus Alforja

Lower case s

Classlessnesses Assistantship Cosponsorship skysurf Gypsyisms Armsful Coxswain Newsgirl Dullsville Ess Ose Psi Tsk Use Angst Buqsha Folksy Grosze Masjid Offset Tocsin Vizsla Rijstafel Perovskite

Lower case t

Statuettes Antimitotic Ultrastructure tsktsk Atlatls Nortriptyline Etwee Gyttja tzetze Utmost Liftgate Extratextual Otic Ptui Bawty Comte Latke Artful Hogtie Outvie Yttria Ctenoid Fuzztone

Lower case u

aquaculture Lugubriously Muumuus jujutsus Superluxury Buzuki Dufus Guayule Aurum Cuvee Pupus Queue Eunuch Fuckup Pawpaws Kue Rub Tub Vug vug Wud wud Yuk Zuz

Lower case v

Overvivid Convolvuli Pavlova Avgas Chevre Evzone Divvying Gyve Kvas kvas Uvea Humvee Outvie Svaraj svaraj Dogvane Mitzvah Sovkhoz Poxvirus Perovskite

Lower case w

Bowwowed Newswire Awkward awlwort Cwms Owns Swum Crwth Twyer Thwartwise cwm Ewe Hwan Lwei Ywis ywis Awful Bwana Gwine gwine Blowzy Dimwit Gewgaw Kwacha Paxwax Qwerty qwerty Upwaft Blowjob Buzzwig Halfway Zwieback

Lower case x

Maxixes Extratextual Axle Boxful Myxoid Oxygen Axman Exude Axseed Calxes Jinxed Paxwax Laxness Uxorial Fluxgate Poxvirus

Lower case y

Syzygy Xylyls Gypsydom Myxocyte Stymying Pyrargyrite Byways Dysthymia Cockneyfying Fyke Soyuz Hryvna pyjama Cyclohexylamine Aye Eye Kye kye Lye Rya Tye Wye wye Zyme Vying vying Sayyid

Lower case z

Pizzazzes Tzitzis Mezuzot zyzzyva Azlon Zugzwang Kolkhoznik Gewurztraminer Zzz Czar czar Bonze Colza Gizmo Hamza Ozone Blowzy Evzone Fizgig Grosze Muzjik Vizsla Britzka Mitzvah

Subscribe to Taranis

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe