Reusing shapes: component tricks

Tutorial
by Rainer Erich Scheichelbauer
en fr zh

26 July 2022 Published on 12 January 2016

You know about serif components, smart components and corner components but you are still craving more components? These tips and tricks will make you happy.

Build your Q

Basically, the Q is just an O with a tail in some designs. So, to make things easier, and if your design allows for it, you can use your O as a component for your Q. Open your Q in Edit view by either double-clicking it in Font view, or typeing it in Text mode. Go to Glyph > Add Component (Shift-Cmd-C) and select O. Then, draw a nice tail. This is ours:

But, you shouldn’t mix components with paths, because if you do, automatic alignment will be turned off. That means, when you shift your O, the tail and the O will get out of sync. So, we also make the tail a component. To do so, just press Cmd-A once to select all paths, right click to bring up the context menu, and select Component from Selection. The name of the new glyph is arbitrary, just make sure it makes sense to you and that there is an underscore first. That way, the glyph will be set to non-exporting straight away. We’ll call ours _tail.Q.

To stick the tail to a certain place of the O, just add an anchor in your O. You can do that by opening the context menu and selecting Add Anchor. The name will be automatically selected for you to rename.

Name it something striking, like qtail. Select it and drag it to where you want your tail. Then, in your _tail.Q, add an anchor and name it the same as in your O, but with an underscore in front of it. The underscore tells the anchor that it is linked to the qtail anchor.

Ta-daah! There’s your all-component Q:

Build your y

Just like the Q, you can also construct the y with a tail and your v, if it makes sense for your design or workflow. In my experience, designs that are modular, geometric, light, high-contrast, or aimed at low-resolution screens can be candidates for such an approach. Sure enough, you will have to have your eye judge if it really works or not. But also in other designs, this construction can be useful at an early design stage, where you eventually will decompose and apply optical adjustments. But until that point is reached, making use of components and automatic alignment helps maintain consistency when you are still changing a lot.

Open your v in Edit view by double-clicking it in Font view or type it in Text mode. Again, go to Glyph > Add Component (Shift-Cmd-C) and select v. Draw a nice tail to go with your v. To make sure that the tail matches the v, here’s a little trick: select two nodes on your v-stem. Now, right-click to open the context menu and select Add Guide.

Now, a blue guide should appear over the two selected points:

Select the guide and copy it by pressing Cmd-C. Then, open your _tail.y and paste the guide by pressing Cmd-V. That way, you can easily match the tail angle with the stem. Make sure anchors and points are on the same coordinate to avoid shifts in the unit grid.

The tail should stick to the v, so we’ll add an anchors to the v. This time, we’ll call it ytail, but again the name is arbitrary. You can copy the anchor by pressing Cmd-C. Open your _tail.y and paste the anchor with Cmd-V, then double-click it to rename it. Again, this one should have the same name as your v anchor, but with an underscore at the beginning.

This way the anchors are on the same height, which is important, because the both components share the same y coordinate. By having them on the same height we avoid the risk of vertical shifts in the compound y.

Just like with the Q, we make the tail a component. Press Cmd-A to select all paths, right click and select Component from Selection. Again, the name of the new glyph can be arbitrary, it just needs to have an underscore at the beginning so that it won’t export. Ours will be called _tail.y.

That’s it. Yay!

Other glyphs

Depending on your design, you can also build other glyphs out of components. For example Eng out of N and a descender part, ae out of an a part and e, oe out of an o part and e, w out of a w part and v, and if you have a sans-serif font you can also build eng out of n and a descender part or thorn out of p and a stem part.

But wait a minute… take a closer look at ae, oe and w in the screenshot. They are a little different from the above examples.

Ligature compounds

In fact, they are ligatures of multiple shapes. So, in order to make the most of automatic alignment, we could build special ligature letters, adjust the sidebearings where necessary, and simply build a ligature by adding them as components. That way we do not even need anchors.

E.g., you can build ae out of a special a.ae and an e. Into the a.ae, you copy the paths of the a, remove the spur, and perhaps adjust the stem width a little. The a.ae needs an =a as metric key for the LSB, and a negative RSB, just as much that it would form a nice ligature with e. Open your ae, and add a.ae, then e as components. They should align automatically.

And because the a.ae should not export, go into the glyph, right-click to open the context menu, and select Export to remove the checkmark.

The glyph name a.ae is the name of a letter plus a suffix. This name structure allows automatic alignment in the ligature compound, but requires this last step of turning off export. Since version 2.3, you can also do it the other way around: create _a.ae, which will be created as non-exporting because of the preceding underscore, and then, inside ae, you can force alignment by right-clicking on it and choosing Enable Automatic Alignment from the context menu.

Repurposing cursive attachment for ligatures

Actually, what you really need for glyphs like AE and OE, is the LSB of the first part, and the RSB of the right part. The rest does not really matter, as long as the two parts attach to each other at the right spot. Wouldn’t it be great if we could define spots for horizontal attachment, much like we do it already for vertical mark attachment? Then daisy-chain the letter parts we want, and the compound would inherit the the LSB of the first, and the RSB of the last part?

Well, the Arabic script has this already. It is called cursive attachment, and it is implemented in Glyphs by means of so-called exit and entry anchors. If you place these anchors in your Arabic letters, the anchor positions will be used to build a positional OpenType feature for dynamically linking letters to each other. Cool.

Luckily, we can also use it for non-Arabic scripts, like Latin. The only thing we do not need is the OpenType feature, because all we care about is sticking the compound together. In order to prevent Glyphs from building the feature code, we can prefix the anchor names with non-letters. Some people like to use emojis for visibility, like 🤓exit, but I like to use a hashtag because it is easier to type (and still visible): #exit and #entry. A sample workflow could look like this:

  1. Create an A.AE, the A part of AE.
  2. Set it to not export: right-click and deactivate the Export option in the context menu.
  3. Draw the paths and add an #exit anchor on the baseline, approximately where you want the E to connect:
  4. In the E, add an #entry anchor on the baseline, at its left boundary:
  5. In the AE, choose Glyph > Add Component (Cmd-Shift-C) twice: once to add A.AE, then to add E as components. Voilà:

By adjusting the anchor positions, you can fine-tune your AE. And the best thing is, its right half (including the RSB) will never be out of sync with the actual E, because it is a true E component. And the hashtag prefixes make sure your font file will not be bloated with an unnecessary curs OpenType feature.

Fantastic. Thank you, Arabic script, for cursive attachment!


Sample Font: Sephora Serif by Mucca/Schriftlabor and Funktional Grotesk by Davide Rossetto.
Update 2016-01-18: added some explanatory lines, thanks to Benedikt Bramböck and many others for their valued input.
Update 2017-12-28: added #exit/#entry trick.
Update 2019-01-21: corrected typos.
Update 2022-07-26: updated title, related articles, minor formatting.