3

I am a beginner with FontForge and I would like to know:

Whit is the best logic to create classes. I mean: I have to kern, say, VA but Va too. Obviously, I have to kern a lot of other glyphs with a. But the first class I created is composed by all glyphs to kern together with V, and the second one by other glyphs, including a, to kern with other glyphs and with different features. Which is the more efficient logic to create these classes?

  1. I create a (left) class with F and P, and a pairing (right) class with some other glyphs as a, o and r with a certain kerning. After, I create another (left) class with T, and a paring (right) class with some other glyphs as u, y and again r with different kerning. But FontForge tells me that r is already in use and I must delete it from one of the two classes. So, do I have to delete r from both previous classes and create a new, third class only with r to pair it with both left classes in different ways?

  2. Same for some glyphs followed by comma? It's evident that n. generally is okay without kerning, while r., w. or y. need different spacing. The same for a hyphen between o-o and n-n: If the spacing is the same, it looks okay between the two o, but not between the two n. Which is the most economical way to handle these situations?

  3. For apostrophe in my font has generally a too large space on the right, which is the way to apply the kerning to all glyphs that follow the apostroph itself? Is there a wildcard like * in Bash?

  • Welcome to Graphic Design SE. I removed one of your questions because we prefer one question per question here. Feel free to ask it separately. However, before you do, it would be helpful if you could include a few screenshots so we have an idea what you tried and where things go wrong with you. It may also be that an answer to this question resolves your second problem automatically. – Wrzlprmft Nov 23 '18 at 20:56
  • Please see the edits to my answer. Also please refrain from asking follow-up questions in the same question in the future. Rather ask new questions. – Wrzlprmft Nov 24 '18 at 11:37
  • ok, I'm sorry. Only, it seems to me that the questions are referable to the same complex of problems. In any case, in the future I will break a single complex question into several different questions – user41063 Nov 24 '18 at 13:00
3

The idea behind kerning classes is that they should contain glyphs that kern similarly or ideally identically in one direction (left or right). By grouping them together you avoid redundant work as you only have to decide how one of the members of the class kerns and then the others will automatically behave the same way.

For example, in most typefaces, you would kern the combinations Tc, Td, Te, Tq, and To.¹ In many typefaces, the kerning (more specifically the space you remove) would be the same or very similar for all of these letters since it the shape of the left bowl is the same or similar for them. By putting c, d, e, q, and o in the same left-kerning class, you only have to set the kerning for these combinations once, and the same applies to all other left kernings of these letters, e.g., Lc, Ld, Le, Lq, and Lo. Moreover, you could also put T in a kerning class with other letters that have a similar right side such as Ţ and Ť.

However, the first thing you describe (“the first class I created is composed by all glyphs to kern together with V”) does not really make sense, since e.g., while both VA and Va may kern similarly, LA and La kern differently and thus A and a should not be in the same kerning class.

From a mathematical point of view, an ideal kerning of n glyphs is described by a huge n×n matrix. Determining all entries of these matrix individually is a huge amount of work. Kerning classes exploit that for some groups of glyphs, you can predict that all rows (or columns) will be identical and reduce the problem of determining the kerning between all pairs of glyphs to determining the kerning between all pairs of classes.

For example, a subset of your kerning table covering the above examples could look like this (with and without kerning classes):

example of kerning classes

Note how using kerning classes drastically reduces how many numbers you have to determine.

¹ ignoring for one second that some of these are probably not relevant in any existing orthography.

Your specific issues

I create a (left) class with F and P, and a pairing (right) class with some other glyphs as a, o and r with a certain kerning. After, I create another (left) class with T, and a paring (right) class with some other glyphs as u, y and again r with different kerning. But FontForge tells me that r is already in use and I must delete it from one of the two classes. So, do I have to delete r from both previous classes and create a new, third class only with r to pair it with both left classes in different ways?

Yes. It seems to me that you want kerning classes to contain pairs of glyphs (that kern the same). This is not the case and also would be pointless since you would have to make as many decisions as for simple, class-less kerning. Instead kerning classes contain glyphs that kern the same (in one direction) with all other glyphs.

Same for some glyphs followed by comma? It's evident that n. generally is okay without kerning, while r., w. or y. need different spacing. The same for a hyphen between o-o and n-n: If the spacing is the same, it looks okay between the two o, but not between the two n. Which is the most economical way to handle these situations?

This may be a case for having different kerning tables using different kerning tables for different situations. For instance, in your example you could have a kerning table for letter–punctuation and a different one for letter–letter. In your letter–punctuation table, d and q would be in the same left-kerning class, while for example they would be in different left-kerning classes for letter–letter because dj and qj kern differently.

For apostrophe in my font has generally a too large space on the right, which is the way to apply the kerning to all glyphs that follow the apostroph itself? Is there a wildcard like * in Bash?

If you want wildcard kerning, you should adjust the bearing instead (select a glyph and then use Set LBearing or SetRBearing from the Metrics menu). In your specific example, reduce the right bearing of the apostrophe until you feel that you do not need to kern with most other glyphs. Then use kerning to improve the spacing with the remaining glyphs.

Further Reading

You may also want to read this answer of mine on other techniques to speed up kerning.

  • Thank you for your answer. In the next days I'll try to work in this direction and, if I'll have troubles (which is almost certain), I'll write again – user41063 Nov 23 '18 at 22:47
  • Thank you for your articukated anser. Only a clarificatio: to operate on bearing I have to change the comma glyph itself? – user41063 Nov 24 '18 at 12:58
  • @user41063: If you so wish yes. See my edit. – Wrzlprmft Nov 24 '18 at 13:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.