Kerning of lowercase/Uppercase pairs

Bhikkhu Pesala
Bhikkhu Pesala Posts: 210
edited May 2019 in Technique and Theory
I found a few posts on this topic, but not many examples of pairs to kern.

I looked at a few standard Windows fonts. Tahoma and Verdana include cT and eT, but that is about all. Calibri has loads of pairs, but none for lowercase/uppercase. 

Scottish names like McAlister or McVitie might benefit from them, and some other words like OpenType or TrueType. 

What do others consider best practice here? 

Comments

  • That would really depend on which languages you plan on supporting. For English, Gaelic-dervived names like the ones you mention are one of the few places where lowercase-Uppercase combinations are found. In Irish, on the other hand, such combinations are common and can involve most possible pairs.

    Also, of course, is the question of whether you want to support the increasingly-ubiquitous use of CamelCase in branding.

    Personally, I'd think the easiest solution would simply be to kern those problematic pairs which you can actually identify as being in common use, and then adopt a EULA which allows users to add their own kerning pairs. That way the graphic designers at (purely hypothetical) MaxTech Inc. will be happy without you having to worry about every obscure pair.
  • It takes longer to figure out which pairs to include (especially for languages that are poorly documented, which makes it very hard to anticipate) than to simply do all of them that need it... Plus new ones pop up all the time.

    Certainly the worst practice though is refusing to kern lc-UC at all. An escape from responsibility, post-rationalized from the metal era (which is bogus to begin with however, since kerning and filing were common).
    https://typedrawers.com/discussion/comment/35275
    adopt a EULA which allows users to add their own kerning pairs.
    And not just that, but any modification. I find EULAs that prohibit modification to be generally unethical.
  • Thomas Phinney
    Thomas Phinney Posts: 2,889
    I use class-based kerning, and try to kern the most significant/egregious CamelCase situations.
  • My fonts have a wide glyph coverage to support most Latin based languages. All of Latin Extended-A, and Latin Extended Additional, about half of Latin Extended-B, and a few of Latin Extended-D for Medievalists. 

    Since FontCreator automates the process, I could easily add thousands of pairs, but I don't want to bloat my fonts any more than they are already.

    I guess I am looking for a list of common lowercase/Uppercase pairs. My fonts are released on a GNU license, so anyone can add more pairs if they have the inclination and the tools.
  • I don't want to bloat my fonts
    What Thomas said.
    Since FontCreator automates the process
    Don't trust that.
    I guess I am looking for a list of common lowercase/Uppercase pairs.
    You could look to lists of common pairs irrespective of case. Also, commonly-last letters followed by commonly-first (like "sJ"). Any instance-based approach is not rigorous enough in my view.
    My fonts have a wide glyph coverage
    ....
    anyone can add more pairs if they have the inclination and the tools.
    They can also add more languages... So personally instead of covering hundreds of languages with inferior kerning I would cover fewer better.

  • BTW the ugly old thing below that I once compiled from the Brown Corpus (by hand...) might be useful. It's a table showing letter-pair frequencies, with tiers.
  • I use a kerning list in Metrics Machine that has all the mixed case surnames I could find. MacGyver, DeVito, DuBois etc. I don't bother with words like OpenType. I'm hoping mixed case words is a trend that will die. In my experience, they don't occur often enough to warrant it. But a surname is worth the effort. 
  • I'm hoping mixed case words is a trend that will die.
    So you don't include the long-s in your fonts?
    But a surname is worth the effort. 
    And new proper names have a way of popping up... Not least among under-represented groups.
    https://www.bbc.com/news/world-africa-43821512
  • Bhikkhu Pesala
    Bhikkhu Pesala Posts: 210
    edited May 2019
    It is clear than an automated process will not work well. I needed to adjust some pairs manually after using the same spacing parameter that I had previously used for Uppercase/lowercase kerning. Many pairs (like cA below) needed positive kerning values, cV needed increasing by 100 funits while nT was increased by 50 funits. 



  • Ray Larabie
    Ray Larabie Posts: 1,432
    Does anyone know of common lowercase accent to capital collisions?
  • Thomas Phinney
    Thomas Phinney Posts: 2,889
    Almost any accented lowercase vowel followed by T (also V, W, or Y).
  • For now, I have added 676 pairs for aA to zZ without any accents, and removed any values less than 21 funits as not worth having. I adjusted some manually where the automatically calculated pair was too tight, e.g. with oT, aV, etc. 
  • I'm curious, how many of the 676 were less than 21?
    BTW 21 is pretty chunky. (And a funny-seeming number; why not 20?)
  • Less than 21 is equal to 20. I think the difference between 17 and zero here is barely discernible at body text point sizes. Anyone using sizes where the difference might be distinct would probably be refining it with manual kerning. 

    After trimming, there were 598 pairs in this bold typeface. 



  • Less than 21 is equal to 20.
    Isn't it more straightforward to think/remember that you kerned 20 and above? Or since the action here is trimming not adding, maybe you're right that's where the round number should go... Anyway it's not a big deal, as long as it works for you (long-term).

    It looks like your Em is bigger than 1000, I presume 2048? Then 20 isn't too chunky. Certainly that "aD" shouldn't get a kern.

    I'm surprised almost 90% ended up with a kern. Speaks to the need for a methodic (versus instance-based) approach I would say. Or it speaks to the need of not over-extending oneself, not sure...  :-)
  • Thomas Phinney
    Thomas Phinney Posts: 2,889
    Sometimes caps have looser spacing than lowercase. This can lead to needing to kern what might seem like a lot, for cap-to-lc and lc-to-cap combinations.

    Alternatively, one spaces the caps more like the lowercase, and uses a 'cpsp' feature to loosen the all-caps settings, and prays that one’s users actually use all-caps formatting and get that spacing, appropriate height dashes, etc.

    Which is also why even if I type all-caps text, I try to also remember to still format as all-caps, to get adjusted spacing and shifted punctuation.
  • Alternatively, one spaces the caps more like the lowercase, and uses a 'cpsp' feature to loosen the all-caps settings, and prays that one’s users actually use all-caps formatting and get that spacing, appropriate height dashes, etc.
    I'm a fan of spacing caps to work with lowercase, but:
    Since blanket loosening can wreak havoc with boundary conditions (like the right side of the "L") it's better to just positive-kern everything that needs it; the good news is you will nicely subsume the pairs that needed loosening to begin with. Also, any user savvy enough to deploy sophisticating formatting is savvy enough to simply track all-caps looser (if necessary) anyway.
  • Bhikkhu Pesala
    Bhikkhu Pesala Posts: 210
    edited May 2019
    The way that trimming works in FontCreator is to remove negative and positive kerning values that are less than a chosen value.



    Most of the pairs that are not trimmed are positive values. Those in green are negative values, those in blue are positive, any that are zero are shown in red. 



    Automation does most of the donkey work, but there are still a number of pairs that need manual adjustment, typically those with overhang like oT or aY. Those with hyphen are particularly prone to error so I give them to their own subtable. One uses shift+left/right cursor to adjust pairs by 100 funits or ctrl+left/right to adjust by 1 funit. With no modifier the step is 10 funits. 

    FontCreator 12 can generate a cpsp feature as a percentage of funits/em or as a percentage of advance width. I use 5% of advance width, which adds 2.5% to each side-bearing.


  • Ray Larabie
    Ray Larabie Posts: 1,432
    I should have asked: has anyone ever witnessed a lowercase accent to capital collision? Not including while you were kerning.
  • Mark Simonson
    Mark Simonson Posts: 1,736
    FontCreator 12 can generate a cpsp feature as a percentage of funits/em or as a percentage of advance width. I use 5% of advance width, which adds 2.5% to each side-bearing.
    Percentage of advance width would add more space around the /M than the /I. Not sure why one would want to do it that way.
  • I don’t know why anyone would use any other method than proportional to Advance Width. After all, what happens if one adds tracking to selected text? 
  • what happens if one adds tracking to selected text? 
    One causes a disruption in the spacing cosmos.

    BTW the sidebearings in your "a" above seem suspect.
  • I should have asked: has anyone ever witnessed a lowercase accent to capital collision? Not including while you were kerning.
    I came across a few that clash or that are very close when adding the lowercase/Uppercase kerning pairs such as lowercase fU, fW, fV, and fY. Without the positive kerning I have added, a good number of clashes would occur. 


  • Things following an "f" are obvious, Ray said "lowercase accent".
  • notdef
    notdef Posts: 168
    edited May 2019
    I should have asked: has anyone ever witnessed a lowercase accent to capital collision? Not including while you were kerning.

    Of course. Swazi, for example, has accented letters (acute) followed by capital letters mid-word. They are prone to collide. Most of the mentioned above obviously have the tittle above j and i to consider as well. Maybe if Apple kills iTunes, you can get a break :)

    PS: Irish written in ALL CAPS sometimes use small caps for the eclipsis prefix.