Hi, is there a good spot to learn how to implement OpenType features in Glyphs? I’m trying to add alternates to a hand-drawn looking typeface.
I’ve searched around and haven’t found anything meaningful. Thanks!
Hi, is there a good spot to learn how to implement OpenType features in Glyphs? I’m trying to add alternates to a hand-drawn looking typeface.
I’ve searched around and haven’t found anything meaningful. Thanks!
A simple way is to follow Glyphs naming schemes and create features automatically, e.g., creating an a.ss01
glyph and going to the Features tab in Font Info (Command-I) and pressing the Update button to generate/update automatic features. That will create Stylistic Set 1 to substitute glyph /a.ss01
for /a
when feature ss01
is selected. See this tutorial:
https://www.glyphsapp.com/tutorials/stylistic-sets
Also, here are the various tutorials on the Glyphs site tagged with opentype features
: https://www.glyphsapp.com/tutorials/articles/tag:opentype%20features
Also, look at the Glyphs Handbook: https://www.glyphsapp.com/get-started
Take a look at Section 6.6.2 Naming Glyphs and Appendix 17.1 Automatic Feature Generation. Other details are spread throughout.
For general OpenType feature code understanding, take a look at Tal Leming’s http://opentypecookbook.com/
That’s helpful, thanks! Would you have any guidance on how I could get different versions of an A to show up if someone typed something like AARDVARK?
There are lots of different ways to code that in OpenType features. One example is in the tutorials mentioned above: https://www.glyphsapp.com/tutorials/features-part-3-advanced-contextual-alternates
I believe there has been other discussion about it in the forums and elsewhere. Good luck.
Following links can help you with more complex substitutions:
http://ilovetypography.com/OpenType/opentype-features.html
http://opentypecookbook.com/
I seem to be having some trouble implementing something from @comperjk’s link. It seems that Glyphs is expecting a closing bracket when I’m defining my classes. When I enclose things in brackets, the error still shows.
Can someone help me understand what I’m doing wrong?
Here’s the code: http://pastebin.com/XtLiMBYe
This is not how you set up classes in OT feature code. In the Font Info window, you add a class to the sidebar and put the glyph names in the top right text field. This is described in the tutorial. There is a screenshot that shows the setup.
What may be misleading is where the content of the classes is described the first time. I will see how I can improve this.
I get it now, thanks! My brain was looking for another screenshot of the classes screen showing how they were all set up.
Another question: I’m getting an alternate which appears at an unintended time. If I write the word “ban,” the “n” is an alternate.
My Con0
class is:
B C D F G H J K L M N P Q R S T V W X Y Z b c d f g h j k l m n p q r s t v w x y z
My Con1
class is:
B.ss01 C.ss01 D.ss01 F.ss01 G.ss01 H.ss01 J.ss01 K.ss01 L.ss01 M.ss01 N.ss01 P.ss01 Q.ss01 R.ss01 S.ss01 T.ss01 V.ss01 W.ss01 X.ss01 Y.ss01 Z.ss01 b.ss01 c.ss01 d.ss01 f.ss01 g.ss01 h.ss01 j.ss01 k.ss01 l.ss01 m.ss01 n.ss01 p.ss01 q.ss01 r.ss01 s.ss01 t.ss01 v.ss01 w.ss01 x.ss01 y.ss01 z.ss01
My Voc0 and Voc1 classes are laid out similarly. This implementation seems to say the second time any consonant comes up, use the alternate even if it’s the first instance of that letter.
Am I setting these up inefficiently or incorrectly? I’d like to have the first instance of each letter appear before the alternates.
This would be very inefficient, and probably impossible to compile. What you could do is split it up in more cycles (e.g., two different consonant cycles), but careful, I would not suggest to do one cycle per letter, because the feature code will get very complex and too large at one point.