Sidebearings of variable fonts

I've learned a lot by lurking here, but I haven't managed to find the answer to this question by either searching here or consulting Brother Google, so here's a first post.

Do you coordinate the sidebearings of your various masters in a variable font, and if so, how? Would it work to, say, make the sb of Extrabold always some percentage of Light and then tune as necessary? I would have thought to, but when I tried to figure out what Source Serif was doing, I couldn't spot any consistent relationship.

Or is this important at all? Can you get away with doing each master separately and trusting the renderer to come up with appropriate intermediate values? Or is there some more complex formula that I haven't been able to deduce?

Grateful for advice, or for references to discussions here or elsewhere.


  • Why treat it differently than a normal type family? Each master requires its own unique spacing based on the weight, width, proportions.
  • Metrics in variable fonts are interpolated in the same way as outlines, so if your design masters are appropriately spaced, the intermediate instances should reflect that. Things can get complicated if your design masters require very different spacing models, e.g. because the design variation involves significant shape changes or vertical alignment changes. So, for example, imagine a variable font that has axes affecting both x-height and weight in extreme ways: that's almost certain to require complex variable kerning, and quite possibly different spacing models at the various axis extremes and in the extrapolated corner space between axes.

    In general, I recommend an iterative approach to building variable fonts, where at each stage you test what works or doesn't work in the interpolation and extrapolation, and then decide on the strategy for the next stage. So you always begin with axis extremes (and frequently a default instance master that is somewhere in the middle of the design space, although this isn't strictly necessary), then you test interpolation along each axis and extrapolation in the corner extremes between the axes (test as an actual variable font, not just using the interpolation math employed by your font tool, which may differ from the OTvar model*). If you find things you're not satisfied with, whether in terms of shapes or spacing, you have various options to resolve these. You can adjust the axis extreme masters so that the interpolation/extrapolation works better, or you can add additional masters to control areas of the design space, or you can add GSUB variation alternates to switch some glyphs for new forms in certain areas of the design space, or, if the problem is specifically spacing, you can add an HVAR table to control interpolation of horizontal metrics.

    * I'd encourage all tool makers to make the open source varLib — or compatible —OTvar interpolation available as a live preview option, so one can see how an actual OT variable font will behave without having to generate the font and test externally to the tool. The OTvar model isn't always what one wants when using interpolation as part of the design process, so it makes sense that tools have their own ways to handle interpolation, but they also need to be able to display OTvar behaviour.
  • Thanks for these replies. While it would have been nice to have a magical formula for working out the sidebearings, the iterative process John Hudson describes resembles the process for building any font (and lots of other things too): build, test, revise, test, repeat till it's done.
  • resembles the process for building any font (and lots of other things too)

    Yes. The trick is to figure out the most efficient sequence of steps for the particular thing that you're making.
Sign In or Register to comment.