Localize Your Font: German Capital Sharp S

  • by Rainer Erich Scheichelbauer
  • Tutorial
  • – Modified on

The German ß (a.k.a. sharp s, glyph name germandbls) is a lowercase letter which stands for an unvoiced s sound. Throughout the past two hundred years, the idea of a capital version surfaced and disappeared countless times. In recent years, the topic has come up again, and now it has become part of official German orthography. Here’s the deal.

The Official Sharp S Situation

In modern German orthography, both ß and ss denote the exact same sound: an unvoiced (or ‘sharp’) s. After a short vowel, you would use ss, e.g., Tasse, Biss, Schloss, Kuss (cup, bite, castle, kiss). More generally put, any double consonant only ever appears after a short vowel in German. After a long vowel or diphthong, you would use ß, e.g., reißen, außen, Stoß, Fuß (rip, outside, push, foot). This is important to note: In modern German, ß can only appear after a, e, i, o or u. That is, unless it shows up in an abbreviation, like ‘Rßf.’ for ‘Rußfilter’ (zoot filter), but that is rare. In medieval texts, you may also occasionally spot it after y.

If, for whatever reason, the ß is not available, you replace it with ss. Think of typewriters, encodings or fonts that do not include it. In Switzerland, the ß has been abolished altogether, and ss is always used instead of ß there.

Until recently, there was no uppercase version of ß in German orthography. If you set a word like ‘Straße’ (‘street’) in uppercase or small caps, you used to spell it ‘STRASSE’, i.e. turn the ß into a double S. But this has changed in 2017. Now you can also use a cap sharp S. In other words, we have a good reason to put capital sharp S into our fonts.

A collateral damage of the lack of a cap sharp S was that proper names containing an ß could not be written and displayed properly in situations where all-cap spelling was mandatory. This was (and to my knowledge, still is) the case in passports and ID cards in Germany and Austria.

Capital ß and its Practical Problems

A couple of years ago, Unicode introduced LATIN CAPITAL LETTER SHARP S at the code point U+1E9E. In Glyphs, you simply add a glyph called Germandbls (note the capital G) to your font.

The only problem we have now is that this letter cannot be typed on most keyboard layouts. It’s not very likely that this is going to change anytime soon. And it is even less likely that a majority of users will be able or willing to differentiate between uppercase and lowercase ß. What makes things worse is that there is not even any agreement about what a capital ß should look like.

So before you go on to design your Germandbls, move on over to Ralf Hermann’s and Christoph Koeberlin’s summaries of the situation. (Disclaimer: my personal favourite is the ‘Frankfurt’ shape shown in Christoph’s article.)

OpenType Solution

Enter OpenType features. We could turn germandbls (lowercase ß) into Germandbls (uppercase ß) between other uppercase letters. But we shouldn’t, because this could end up as a character change from U+00DF to U+1E9E, and unless we have a pretty good reason not to, OpenType features should stick to exchanging glyphs, not characters. So, assuming you already have Germandbls, make a copy of it and call it germandbls.calt. You can do so by choosing Glyph > Add Glyphs… and typing this in the dialog that appears:

Germandbls=germandbls.calt

Once you press the Generate button, you will have a component-based copy of your capital sharp s.

Theoretically, one would tend to put the OpenType substitution into locl as a substitution for the DEU language code. But, since this also (or even mainly) applies to proper names, it is not wise to limit it to the German language. That’s why I suggest to implement it in calt. To do this, we go into File > Font Info > Features, add a new feature by pressing the Plus button in the lower left corner, and rename the feature from xxxx to calt. Then, you add this to the calt feature code (top right editing pane):

sub @Uppercase germandbls' @Uppercase by germandbls.calt;
sub @Uppercase @Uppercase germandbls' by germandbls.calt;

Luckily, Glyphs automatically generates the Uppercase class, we just need to add it through the Plus button in the lower left corner. In the first line, lowercase ß gets replaced by an uppercase ß between two other capital letters. To also cover ß at the end of a name like Weiß, the second substitution makes the same substitution after two consecutive capital letters.

One remark. You may have asked yourself: why not already substitute lowercase ß after a single capital letter? Because there are a few cases in German where lowercase ß can appear after a capital letter, namely forms of ‘essen’ (‘to eat’): ‘Aß Tom Fleisch?’ (‘Did Tom eat meat?’) or ‘Iß deine Suppe!’ (legacy orthography for ‘Eat your soup.’). So we need to exclude this case. To my knowledge, there are no two-letter proper names that end in a sharp s, so that shouldn’t cause problems.

This is pretty well supported. Both Adobe InDesign and Quark XPress support calt:

Even Apple’s text engine is comfortable with contextual alternates. And it does not affect those users who choose to type or insert U+1E9E directly.


SAMPLE FONT: LAWABO BY SCHRIFTLABOR.

Update 2013-05-12: rewrote the OpenType feature part (removed locl and case hacks), added link to opentype.info.
Update 2015-10-18: updated link to Ralf’s article (thx Ondrej).
Update 2018-07-19: updated official situation to reflect changes in orthography. Minor changes.
Update 2018-08-10: new font with better cap sharp-s shape. Added link to Christoph Koeberlin’s article. Clarified the orthography part a little more.