Defining stem widths

When I define my vertical and horizontal stem widths in font info, should I make an average of the lowercase and uppercase? or should I define stem widths for lower and uppercase separately?

That depends on the design. If stems are rather close, use an average.

It’s a monoline typeface. The uppercase stems are approx 10 units wider than the lowercase. Just hesitated because I got from the handbook that it’s better to define the stems based on the most used characters, that being the lowercase.

If you employ different values, you risk the stems being rendered with a difference at low resolution, e.g., 5 instead of 4 pixels. You need to decide if that is OK for your font.

Alright, that’s kinda what I got from the handbook, but wasn’t completely sure. Glad to have confirmation. Also, thanks a lot to you and Georg for being so helpful and proactive in this forum!

Sorry for reviving this topic, but I have a similar question.

I am attaching screenshots of both Masters (Hairline = 20, Black = 180). Should I define as many stems as possible to aid in interpolation even if they are very similar (190 in H, 192 in O and actually identical in Hairline) or simplify it to only 4-5 as it doesn‘t yield any benefits?


I would not do that. Better use one and the same stem definition for similar stems. Think like this: two similar stems with the same stem def, will be rounded to the same pixel width. If they have different stem defs, they may be rounded to different pixel widths. Mayyyyyybe differentiate between UC and LC, but in the example above, they are very similar.

Can you recommend a good stem width process and theory?

I would take a good average for those that should render similarly at low resolution. More advice about TT hinting in the Manual TT hinting tutorial.

1 Like

Thank you for the comprehensive answer.

I’ve noticed Path > Transformations > Cursify also need those stems defined to work and I suspect RMX Tools as well? Taking those into account, does that change anything?

I specifically want the Cursify filter to produce the best results it possibly can before proceeding to revise the paths manually.

The Cursivy filter uses the stems, indeed. So you can tweak the result by temporarily changing the stems.