Letters changing shape from upright → oblique

The typeface I am designing includes both the upright and oblique styles within the same font file. In my design, certain letters will change their shapes when switching from upright to oblique.

For example:

The upright lowercase double-story “a” becomes a single-story “a” when it goes oblique. 

The upright lowercase “f” stops at the baseline, similar to the lowercase “i” however, In the oblique style the “f” extends below the baseline with a descender and tail.

Since the uprights and obliques are housed in the same file rather than in separate ones, how can I implement these shape changes? I have researched this and understand it can be done, but I am having trouble getting it to work. 

By the way I am using Glyphs.

Answers

  • When you say both upright and oblique are in the same font file, I as assuming you are doing a variable font with a slant or italic axis?

    If so, what you need to do is have two glyphs for each of the characters in question. For example, you might have a double-story glyph named “a” and a single-story glyph named “a.slnt”. As it happens, I have long been working on a font that does just this.

    The font may be set to swap from “a” to “a.slnt” when the slant axis exceeds some particular amount, such as… 4.9° in my case. (Although it is styled as negative 4.9, for crazy reasons dating back to Adobe PostScript.)

    The exact mechanism for setting this up depends on your font editor. The approach in FontLab is to assign “tags” to such glyphs in the Classes panel, such as these: 


    Axis location tags must start with a tilde and use FontLab’s two-letter axis abbreviations with < and > signs to indicate under what conditions the alternate glyph(s) should kick in. In this case you can see that the italic forms kick in when the slant is < -4.9. (Note that as these are negative numbers, -5 is less than -4.9!)
  • John Hudson
    John Hudson Posts: 3,500
    You can also specify this kind of axis location substitution directly in a .designspace file, which can be used alongside UFO files to build a variable font. The code would look something like this:

     <rules>
      <rule name="slntvariants">
      <conditionset>
      <condition name="slant" minimum="-4.9" maximum="-15"/>
      </conditionset>
      <sub name="a" with="a.slnt"/>
      <sub name="f" with="f.slnt"/>
      #etc.
      </rule>
     </rules>

    Note that, regardless of the tool, such substitutions get written to the rvrn layout feature in the GSUB table, and this lookup will precede all other OpenType Layout substitutions so bear that in mind when defining other layout feature lookups in your font.
  • When you say both upright and oblique are in the same font file, I as assuming you are doing a variable font with a slant or italic axis?

    If so, what you need to do is have two glyphs for each of the characters in question. For example, you might have a double-story glyph named “a” and a single-story glyph named “a.slnt”. As it happens, I have long been working on a font that does just this.

    The font may be set to swap from “a” to “a.slnt” when the slant axis exceeds some particular amount, such as… 4.9° in my case. (Although it is styled as negative 4.9, for crazy reasons dating back to Adobe PostScript.)

    The exact mechanism for setting this up depends on your font editor. The approach in FontLab is to assign “tags” to such glyphs in the Classes panel, such as these: 


    Axis location tags must start with a tilde and use FontLab’s two-letter axis abbreviations with < and > signs to indicate under what conditions the alternate glyph(s) should kick in. In this case you can see that the italic forms kick in when the slant is < -4.9. (Note that as these are negative numbers, -5 is less than -4.9!)
    Thank you so much! By the way I am using Glyphs as my editor. 
  • This can be set up using alternate (or often called bracket) layers. It is explained in this tutorial: https://glyphsapp.com/learn/switching-shapes
    and this will be exported as a variable font without any extra work.