Handschrift > Het font “Schoolschrift” > Demo-font voor fontontwerpers

“Schoolschrift” - demo-font voor fontontwerpers

Het demo-font bevat slechts 13 letters die qua manier van verbinden in een beperkt aantal groepen vallen. Hierdoor is het font zeer geschikt voor fontontwerpers die willen leren hoe je ‘contextual chaining’ kunt toepassen.

Download


Om het font te bestuderen, download een van bovenstaande bestanden en open ze met je fontbewerkingssoftware. Het .sfd bestand heeft de voorkeur, omdat de naamgeving van de substitutietabellen daarin bewaard is gebleven, maar dit bestand kan voor zover ik weet alleen geopend worden met FontForge. Het .ttf bestand kan met meer software geopend worden, maar bevat minder leesbare namen.

Het probleem

Op mijn Engelstalige website CursiveWorkshop heb ik kort uiteengezet wat er zo lastig is aan het verbinden van de letters in verbonden schrift: The problem with cursive. Lees dat eerst als achtergrond, dan begrijp je beter waarom de oplossing beschreven op deze pagina “nodig” is.

De ingrediënten


De glyphs voor de 13 letters bevinden zich op de plek waar letters zich horen te bevinden in een font. Belangrijk is dat de glyph alleen dat deel van de letter bevat dat onveranderlijk is. De gedeeltes van het begin en eind van de letter die zich aanpassen aan de vorige of volgende letter, zijn geen onderdeel van deze glyphs.


Voor de 13 letters in het demo-font zijn 10 halen (aanhalen, afhalen, verbindingshalen) nodig. Je kunt ze vinden in het font vanaf Unicode codepoint 0xE000. Omdat er in het font zelf veel naar verwezen wordt, hebben ze speciale namen gekregen.

Voor elke letter uit het font is er dus een afhaal. De a, d en o hebben geen aanhaal; die hebben ze ook niet nodig want de letterglyph zelf bevat al precies wat je aan het 'begin' van de letter zou verwachten.



Bij Schoolschrift02 en Schoolschrift03 bleef het hierbij. Deze fonts werden gebruikt in combinatie met een javascript-applicatie (de Schoolschrijver-apps) die de verbindingshalen tussen de letters toevoegt. SchoolschriftLG en het afgeleide demo-font kunnen echter rechtsstreeks in een tekstverwerker ingezet worden. Om dat te doen, moet de 'logica' voor het verbinden van letters in het font zelf zitten. Hieronder leg ik uit hoe dat werkt.

De ligaturen


Als je ligaturen maakt, kun je kiezen om deze automatisch samen te laten stellen door de fontbewerkingssoftware. Je kunt ze ook zelf samenstellen. Bij de ligatuur van 'ij' bijvoorbeeld wil je niet dat de fontbewerkingssoftware de 'i' en de 'j' achter elkaar plakt, je wilt zelf een vorm maken. De ligaturen in het demo-font zijn echter allemaal automatisch samengesteld. De naam van de ligatuur geeft aan uit welke glyphs deze is samengesteld (de namen van de glyphs gescheiden door een liggend streepje).

De ligaturen zijn glyphs die je 'aan elkaar' kunt plakken. Ze bevatten het onveranderlijke deel van een letter plus de verbinding naar die letter toe vanaf de vorige letter. Sommige ligaturen bevatten ook een eindstukje: die gebruiken we aan het eind van het woord. De ligaturen zonder eindstukje zijn geschikt om de volgende ligatuur aan vast te plakken.

De ligaturen zijn gedefinieerd in de substitutietabel 'ligatures' en de subtabel 'ligatures-connected'.

Als je ligaturen en de namen van de glyphs goed hebt ingesteld, dan zal je fontbewerkingssoftware de mogelijkheid te bieden om de glyph te maken ('Build Composite Glyph' in FontForge).

Straks in de 'contextual chaining substitution'-tabel zullen we aangeven dat gewone letters door deze ligaturen vervangen moeten worden. Om dat te doen, hebben we eerst een serie 'single substitution'-tabellen nodig. Deze tabellen doen uit zichzelf niets, maar worden vanuit de 'contextual chaining'-regels aangeroepen. Elke tabel is van toepassing in één bepaalde context:



In elk van deze 6 tabellen staan alle (13) letters van het font. Voor elk van de letters uit het font staat met welke ligatuur deze letter vervangen moet worden (in de context waar de betreffende tabel over gaat). Uitzondering: in de beginning context hoeft er niets te veranderen aan de letters a, o en d, dus die staan niet in de tabel (dat is trouwens ook de reden dat de letters a, o en d maar 5 ligaturen hebben terwijl de andere letters er 6 hebben).

De contextual chaining rules

Als alle glyphs gemaakt, en alle 'single substitutation' tabellen gevuld, dan kunnen we de contextual chaining rules maken. Hiervoor gebruiken we regels die 'by class' werken, dus regels waarin we steeds over groepen glyphs praten, niet over individuele glyphs. In FontForge kun je bij het aanmaken ook nog kiezen voor 'simple' of 'complex', daar hebben we 'complex' nodig.

Voordat we 'matching rules' kunnen maken, moeten we eerst de 'classes' definieren. Er is maar één 'Match Class' (niet getoond in de screenshot). Die heet letter en die bevat alle letters van ons font. Bij 'Ahead classes' laten we het vinkje 'Same as Match Classes' aan staan.
De 'back classes' gebruiken we om te kijken naar de letter die staat voor de letter die we gaan substitueren. En in welke categorie ('class') die letter valt, dat bepaalt dus welke substitutie we moeten doen. Er zijn in ons font maar twee manieren waarop een letter kan eindigen: zoals de 'n' en zoals de 'v'. Er is echter een addertje onder het gras. In de 'back class' moeten niet alleen de 'gewone' letters zitten van de betreffende categorie, maar ook de ligaturen van diezelfde letters (tenminste, alle ligaturen behalve degene die aan het eind van een woord gebruikt worden). Dat zijn er nogal wat! Als je die ligaturen niet toevoegt, zullen de regels niet goed werken.

Ten slotte de regels (bovenin de screenshot). We hebben 6 regels, precies evenveel als dat we 'single substitution' tabellen hebben. De volgorde van de regels is belangrijk.
De eerste regel is n | letter @<after-n-continued> | letter. Deze regel matcht indien er een teken uit de groep 'n' voorkomt, gevolgd door een willekeurige letter, gevolgd door nog een willekeurige letter. Als de regel matcht dan wordt de middelste letter uit de reeks vervangen (omdat daar de @ achter staat). Om die vervanging te doen wordt dat middelste teken opgezocht in de tabel after-n-continued en vervangen door de ligatuur die in die tabel achter dat middelste teken staat.

De tweede regel matcht indien er een letter uit de groep 'n' gevolgd wordt door een willekeurige letter. Of daar dan nog een derde letter achteraankomt, of dat het het eind van het woord is, maakt strikt genomen niet uit. Omdat regel 1 er boven staat, kan regel 2 alleen maar matchen aan het eind van een woord.

Als er geen match is op de eerste vier regels, dan komen we bij de laatste twee regels uit. Hierbij staat er geen class meer voor de te substitueren letter. Regel 5 matcht daardoor aan het begin van een woord, en regel 6 matcht op een losse letter.

En dat is het! Met deze tabellen en regels krijgen alle mogelijke lettercombinaties in het demo-font de juiste verbinding.


In het 'Metrics Window' van FontForge kun je testen. Zorg dat de optie 'calt' geselecteerd is. Onder de tekst verschijnen de namen van de ligaturen waarmee de ingetypte letters vervangen worden. Als je je eigen font gaat maken met contextual chaining, dan kun je die informatie gebruiken om te debuggen.

Hoe nu verder?

In het demo font heb ik enkele zeer contrastrerende verbindingen uit het Schoolschrift-font laten zien. Als je een font ontwerpt, is het ook goed idee om te beginnen met contrasterende verbindingen.

De verleiding kan echter ontstaan om daarna de resterende letters zo te maken dat ze aansluiten op de verbindingen die we reeds gemaakt hebben. Of misschien heb je ooit leren schrijven met een methode waarbij alle verbindingen die begonnen bij de grondlijn evenwijdig aan elkaar waren, en denk je dat dat zo hoort.

De letter l eindigt met een bochtje tegen de grondlijn, net als de h en de n, dus die kan zeker wel dezelfde verbindingen gebruiken? Nou nee. De l heeft immers een stuk overhang over dat laatste bochtje tegen de grondlijn, en dus overhang over de verbinding. Als we de bestaande verbindingen zouden gebruiken, dan zouden we ofwel krijgen dat de lussen in een dubbele ll veel te dicht op elkaar komen, dan wel dat we dat bochtje tegen de grondlijn horizontaal flink moeten uitsmeren voordat we aan de verbinding beginnen. Allebei is lelijk. De juiste oplossing is dat we een nieuwe verbindingsglyph maken van de letter l naar de letters b/l/h/k, die schuiner (minder steil omhoog) loopt dan de eerder gemaakte verbindingsglyph clnh.

Naar de letter s toe hebben we eveneens een hele set nieuwe verbindingen nodig, die steiler (minder schuin omhoog) moeten zijn dan de verbindingen naar bijvoorbeeld de i. En als je dacht dat verbindingen naar de j toe toch zeker wel hetzelfde kunnen zijn als verbindingen naar de i, heb je al gedacht aan de lettercombinatie fj? Dat wordt botsen tussen die twee onderlussen! (Schoolschrift doet dit fout. In het font van de Stichting Schriftontwikkeling zit wel speciaal voor deze lettercombinatie een extra verbindingsglyph.)

Als je een mooi verbonden font wilt maken, dan is je beste aanpak om zeer kritisch te kijken naar de hoeveelheid ‘witruimte’ die je tussen verschillende lettercombinaties passend vindt, en om pas daarna die witruimte op te vullen met verbindingen. Hoewel je een verbonden schrift niet moet kernen, kan het heel instructief zijn om je fontsoftware de letters te laten indelen in kerning classes. Voor elke combinatie van classes (links en rechts) heb je een verbindingsglyph nodig.

Vergelijking tussen demo en het volledige Schoolschrift-font

Het volledige Schoolfschrift heeft 14 categorieën van hoe letters kunnen eindigen (waarvan 4 uitsluitend voor hoofdletters gebruikt worden), en 7 categorieën van hoe letters kunnen beginnen. Dat levert 7 × 14 = 98 verbindingshalen op, plus nog eens 7 aanhalen en 14 afhalen. Per letter zijn er 28 ligaturen: 14 ligaturen voor gebruik in het midden van het woord (ivm 14 verschillende categorieën van voorafgaande letters) en 14 ligaturen voor gebruik aan het eind van het woord. Met accenten en lettervarianten erbij komt het font uit op meer dan 2000 ligaturen.