Font Creation with OpenType

If you’re not into fonts, you might want to skip this entry, as it might cause eye-glazing or inadvertant napping.

A bit of history on computer fonts. In the beginning there were two common formats, TrueType (developed by Apple) and Postscript or Type 1 (developed by Adobe). There were some important differences between them under the hood, and a few that affected users (some characters or glyphs were in different places on the keyboard, for instance), but they generally both worked on most computers, though Microsoft products worked best with TrueType, oddly enough. One severe limitation to font developers was that the set of characters or glyphs in a font was limited to 256. That sounds like a lot, but when you start adding international characters like those with diacritical or accent marks: é ñ ü, plus characters unique to certain languages, font designers found themselves running out of room. Then there’s languages like Chinese and Japanese with far more glyphs than 256.

In the late 1990s Microsoft and Adobe teamed up to create a new font format called OpenType. This is sort of an envelope that contains all the features of both previous formats, and also expands the character set vastly so it can hold neary 66,000 glyphs. New features in OpenType made it appealing to font designers, and it has grown rapidly in popularity, with the first commercial OpenType fonts appearing around 2000, and many thousands now available. Most new computers, perhaps all, can use OpenType fonts, as well as the earlier formats.

When I began creating my own fonts from my hand-lettering in 1994 I used the Postscript or Type 1 format exclusively, as I liked the way it worked better than TrueType. Once OpenType fonts came into use, and were supported by the Adobe products I use like Illustrator, Photoshop and InDesign, I started thinking I should convert my fonts to OpenType. This would be simple if all I did was reformat them, but I wanted to make use of some of the new features available in OpenType, which meant I needed to learn how to do that, and spend a good deal of time working on each font. I put it off for a long time, but about a month ago I had some time, and decided to get started. I upgraded the font creation program I use, Fontlab, and started reading up on OpenType in the Fontlab manual, online, and in a book called “Learn Fontlab Fast” by Leslie Cabarga. But the best way for me to learn something is hands-on, so I started work on my script font, TKScript.


As you can see this is a handwriting font based on my own scrawl, though considerable neater and more regular than my actual handwriting. I had two versions, one with block capitals and one with more script-like capitals, plus a few other differences.


Now, an easy way to make a script font, like the Adobe font Caflische Pro, above, is to make most of the connecting strokes the same, and on the right side of the glyphs, or to use glyphs with no connectors, like the O above. A very sensible approach. My handwriting doesn’t work that way, though, so I took a different, more difficult approach.


Most of my alphabet begins and ends with a low entry and exit point, like the ones above. But some of my characters: the lower case b, f, o, v and w, exit at a high point instead of a low one. This means that the character that comes after it won’t connect properly.



To deal with that I created alternate versions of the lower case alphabet that have a high entry point, and in my original version of the font, using the Type 1 format, I put them in places where I could access them from the keyboard using the Option and Shift keys. It worked, but it made for very slow going when using the font, as many words have at least one of the high exit letters (b, f, o, v, w). Some, like BROWN above, have several in a row! When I used TKScript in a comic, it usually took me three times longer than my other fonts. So, OpenType features looked like a good solution for this problem.


One of the OpenType features that I wanted to use is called Discretionary Ligatures. I could add new glyphs to my font that combined characters like b and r, o and w and w and n, and when the “Discretionary Ligature” button is pushed in the OpenType panel in programs like Adobe Illustrator, they would be automatically substituted! Well, that was the theory. In practice I found that, for words like BROWN, the first two would go in, the third would not, because W was already part of the ligature OW. The ligatures would cover about 95% of the situation, though, and for the rest I could manually override and add the alternate character by selecting it and pushing the “Alternate” button in the OpenType panel in Illustrator.

I opened my font in Fontlab and started adding ligature glyphs. Things went well for a while — I had all the new glyphs I thought I would need. Then it was time to start kerning them.


Kerning is what makes the characters line up and seem to be naturally connected, as above. Without kerning, they would all be separate. Now, when I first created this font, I could have cut way down on the kerning needed by paying more attention to the left and right sidebearings or Metrics in Fontlab.


Here’s how a glyph window looks in Fontlab. The lines on the left and right are the sidebearings, and can be moved manually for each glyph. What I should have done was first try to get the Metrics as close to right as possible for each character, particularly the lower-case letters. But I didn’t think about that, I just went ahead and added Kerning for each pair of characters. This is the most time-consuming part of font creation, taking about three-quarters of the time needed, but once it’s done, when you use the font in a program, assuming “auto-kerning” is turned on, everything lines up correctly.

So, I added lots of kerning when I first made the font, about 9,000 kerning pairs. For each new ligature I had to add more kerning. Before long I was over 16,000 kerning pairs, and that’s when I hit a wall. Unknown to me there’s a limit on kerning pairs, and I hit it. No more would go in without creating a fatal error.

Okay, so that meant I had to go through the entire list of kerning pairs and remove as many as I could. Lots more work! Eventually, by removing kerning where it wasn’t really needed, I got back down to about 12,000 pairs. The font worked, everything seemed good.

There’s another area I needed to address, though, and that’s international characters. To make a fully functional font, one has to add all the characters with accents or diacritical marks, as well as unique characters used by some European languages, and quite a few mathematical symbols and rarely-seen (in America) punctuation. This all forms the Extended Roman character set that covers most European languages. I added all that, but if I also tried to kern all those characters, I’d soon hit the wall again.

There’s a way to deal with this called Classes: characters that look the same except for the diacritical marks can be grouped together and told to use the same Kerning list. I started adding those classes, testing after each one, and while the first few worked, I soon found myself hitting the wall again. It seems that, even though you’re using the Classes, the font still counts all those new kerning pairs in the total! Argh!


So, I just used Classes for the most common diacritical marks, as above.


Other, less common ones, are accessible, but need to be hand-kerned each time I use them. (And I know that isn’t a real use of the double dot or dieresis, I couldn’t think of a good one!)


I was nearly done, but wanted one more version of my Oldish style, one with a fancy lower case e, as shown above. Simple, I thought, I’ll just make a substitution and save it with a different name. But, font creation is always an adventure. I tried that, and it didn’t work! Why, I can’t tell you. Like the Wizard of Oz, all I can say is, “I don’t know how it works!”


But, by going back and trying it again, and then again, somehow I got it to work, and now have three styles. I think there are still some bugs in these fonts. I’ve been playing with them in Illustrator, and a few times they’ve crashed out on me, becoming unreadable. Let’s face it, there’s a lot I don’t know about font creation, I’m just doing the best I can. But this month-long experience has taught me a lot, and I think I can now move on to other fonts with a much better idea of what I need to do. And, most of my fonts won’t need as much work as these did. I hope!

5 thoughts on “Font Creation with OpenType

  1. Dan Guy

    Since working at a graphic design agency ten years ago, I have had a love of fonts and computer fonts. Thanks for the glimpse into the process!

  2. Felicity

    Good article! I’m always up for hearing about fonts!

    I’ve made a few comic lettering fonts myself, by scanning in the lettering from my comic collection.

    They’re for my own use only, and I don’t make the fonts available to others, although I doubt they pose much of a threat to the original letterists, as I don’t go nearly far enough to make sure they’re perfect. For example, I don’t worry about kerning. I just leave one grid space after each letter, and if the letters W and A look weird next to each other, well, tough. I’ll fix it in with character spacing in OpenOffice.

    Encouraged by my (relative) success in making comic fonts that looked OK to me, I made the mistake of agreeing to make a font of a friend’s handwriting. Much tougher! For one thing, there’s lower-case! All the letters can’t just be 345 pixels high! Now there’s x-height vs. x-height-plus-ascenders vs. x-height-plus-descenders to worry about. And I thought getting periods and semicolons the right size was hard!

    I thought it might be easier to use a calculator and compare the sizes of the original samples to each other. If a period is about 1/8 the height of a capital letter, and a capital letter is 345 pixels high, then a period is 43 pixels high, right? Well…sometimes. And sometimes you do the math right and it just looks funny. You just have to sit there and hand-tweak everything.

  3. Dwight Williams

    Ended up buying TypeTool a year or so ago, specifically because of budgetary reasons and I was just planning on fiddling with what the specialists in such things call “con-langs” (CONstructed LANGuages) for fun. Legion Interlac, Bridwell/Turniansky-reported Kryptonian, and anything else I took it into my head to develop or create from scratch.

    Which has presented its own challenges!

Leave a Reply

Your email address will not be published. Required fields are marked *