本地化你的字体:德语的大写清  S

教程
作者:Rainer Erich Scheichelbauer
en fr zh

12 五月 2013 发布日期: 12 九月 2012

Even though practically non-existent in prescriptive German orthography, the lowercase sharp s (ß) has been used more often between capital letters in recent years. Here’s how to quickly implement it in your font.

德语的 ß(又名 “清 s”,字符形名称 germandbls)是一个表示清音 s 的小写字母。在过去的 200 年中,关于其大写版本的想法几经浮沉。近年来,这个话题再次出现,现在已经成为德国官方正字法的一部分。就是这么个情况。

官方的清  S 解决方案

在现代德语正字法中,ß 和 ss 表示完全相同的发音:清音的 s。在短元音之后,你应该使用 ss,如 Tasse、Biss、Schloss、Kuss(杯子、一口、城堡、吻)。更普遍地说,德语中任何双辅音都仅在短元音之后出现。在长元音或复合元音之后,你会使用 ß,例如 reißen、außen、Stoß、Fuß(撕裂、向外、推动、脚)。 需要特别注意的是:在现代德语中,ß 只能出现在 a、e、I、o 或 u 之后,除非是在缩写形式中,例如 “Rßf.”,代表 “Rußfilter”(煤烟过滤器),但这很少见。在中世纪的文字中,有时也可能会看到它跟在 y 之后。

如果,不论出于何种原因,无法使用 ß 的话,使用 ss 代替。设想一下不包含这个字母的打字机、编码和字体。在瑞士,ß 已被完全废除,那里 ß 总是用 ss 代替的。

直到最近,德语正字法中一直没有大写版本的 ß。比如 “Straße”(街道)这样的单词,如果你使用大写或小型大写排印,此前你会拼成 “STRASSE”,即,将 ß 变为双 S。但是在 2017 年发生了改变。现在你可以使用大写的清 S 了。也就是说,我们有足够的理由在我们的字体中加入大写清 S 了。

缺少大写清 S 的一个附带损害是,在强制使用全大写拼写的情况下,含有 ß 的专有名词无法被正确展示。在德国和奥地利的护照和身份证中,就存在这种情况(而且据我所知,现在仍然如此)。

大写 ß 及其实践问题

若干年前,Unicode 在 U+1E9E 码位引入了 LATIN CAPITAL LETTER SHARP S。在 Glyphs 中,你只需添加名为 Germandbls(注意 G 大写)的字符形即可。

现在唯一的问题是,这个字母无法通过大多数键盘布局输入。这种情况不太可能很快改变。而且,大多数用户能够或愿意区分大写和小写 ß 的可能性更低。更糟糕的是,甚至没有对大写 ß 的外观达成任何一致认同。

因此在你开始设计你的 Germandbls 之前,看一下 Ralf HermannChristoph Koeberlin 对于这个情况的综述。(免责声明:我个人的最爱是 Christoph 文中的 “Frankfurt” 造型。)

OpenType 解决方案

加入 OpenType 特性。我们可以将位于其他大写字母之间的 germandbls(小写 ß)转换为 Germandbls(大写 ß)。但是我们不应该这样做,因为这样会让一个字符从 U+00DF 变成 U+1E9E,除非我们有足够的理由,OpenType 特性应该仅改变字符形而非字符。所以,假定你已经有了 Germandbls,复制它并命名为 germandbls.calt。你可以通过选择 “字符 > 添加字符形…” 并在出现的对话框中键入:

Germandbls=germandbls.calt

按下 “生成” 按钮后,你会获得一个大写清 s 的基于部件的副本。

理论上,你可能会倾向于将 OpenType 替换放入 locl中,作为 DEU 语言代码中的替换。但是,因为这也会(且可能主要是)用在专有名词中,因此限制在德语中并不明智。这就是为什么我建议将它放在 calt 中。为此,我们前往 “文件 > 字体信息 > 特性” 并按下左下角的加号按钮添加新特性,并将特性名称从 xxxx 重命名为 calt。然后,你将这些内容加入 calt 特性代码中(右上角的编辑框):

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

幸运的是,Glyphs 会自动生成 Uppercase 类,我们只需要通过左下角的加号按钮添加。在第一行中,位于两个其他大写字母之间的小写 ß 被替换为大写 ß。为了让某名称末尾的 ß 也包含在内,比如 Weiß,第二行替换会在两个连续的大写字母之后也作同样的替换。

有一点需要注意。你可能会问自己:为什么不直接替换跟在一个大写字母之后的小写 ß 呢?因为德语中有这样一些情况 ,小写 ß 会出现在一个大写字母之后,即 “essen”(吃)的形式:“Aß Tom Fleisch?”(Tom 吃了肉吗?)或 “Iß deine Suppe!”(旧正字法 “喝你的汤”)。因此,我们需要排除这种情况(非全大写情况下,也错误地将小写 ß 变为大写形式)。据我所知,没有哪个仅有两个字母的专有名词以清 s 结尾,因此这样不会造成问题。

这种方法受支持很好。Adobe InDesign 和 Quark XPress 都支持 calt

就连 Apple 的文本引擎对上下文替代字支持得也不错。这也不会影响到那些选择直接键入或插入 U+1E9E 的用户。


示例字体:LAWABO 由 SCHRIFTLABOR 设计。

2013-05-12 更新:重写 OpenType 特性的部分(移除了 locl 和 case 的非正当技巧),添加了前往 opentype.info 的链接。
2015-10-18 更新:更新了前往 Ralf 文章的链接(感谢 Ondrej)。
2018-07-19 更新:更新了正字法的官方情形。微小改动。
2018-08-10 更新:更换了清 s 造型更好的新字体。添加了前往 Christoph Koeberlin 文章的链接。进一步厘清了正字法部分。

Chinese translation by Willie Liu (刘育黎) from 3type (三言).