Localize Your Font: German Capital Sharp S

  • by Rainer Erich Scheichelbauer
  • Tutorial
  • – Modified on

The German ß (sharp s, glyph name germandbls) is a lowercase letter that denotes an unvoiced s sound after a long vowel or diphthong. 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. Here’s the deal.

The Official Sharp S Situation

If you are familiar with linguistics, you certainly know the difference between a descriptive and a prescriptive grammar. Prescriptively speaking, there is no uppercase ß in German orthography, be it traditional (‘alte Rechtschreibung’) or reformed (‘neue Rechtschreibung’). If you set a word like ‘Straße’ (‘street’) in uppercase or small caps, you are supposed to spell it ‘STRASSE’, i.e. turn the ß into a double S. In the indeed very rare exception where it could be confused with a word spelled with double s, you turn it into SZ instead. The one example that is almost always used to illustrate this case is the word ‘Maße’ (‘measures’) which needs to be spelt ‘MASZE’ because it might be confused with ‘Masse’ (‘mass’).

So far, so good. There is one exception though. If, for whatever reason, you need to set a proper name that happens to contain a sharp s in uppercase letters, it must not be replaced, neither by double-S nor by SZ. That’s because it’s a difference whether Mrs. Weiss, Mrs. Weiß or Mrs. Weisz gets the parking ticket. So, in uppercase, we need to be able to differentiate between WEISS, WEIß and WEISZ. In other words, we have a good reason to put capital ß into our fonts.

Capital ß and its Practical Problems

Theoretically, we can. 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 excellent summary of the situation.

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:


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:

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

Luckily, Glyphs automatically generates the Uppercase class for the cpsp feature. We can re-use it here for our purposes. In the first substitution, 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!’ (traditional 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.


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).