本地化你的字体:带变音符的荷兰语  ij

教程
作者:Rainer Erich Scheichelbauer
en fr zh

2 September 2015 Published on 17 September 2012

Dutch speaking people can stress their syllables by adding an acute accent to it. So, ‘ík’ is ‘ik’ with extra emphasis. There is one special case: the ij. Both the i and the j should get an accent. Problem is, there is no j with an acute. Find out an easy solution for it.

荷兰语中有一个特产,这便是 IJ/ij,也称长音 ij(lange ij),相对于短音 ei(korte ei)。关于这个 ij 是否应该被看作一个独立的字母有长久的讨论。官方而言,它被看作是两个独立的字母,但是拼读时,它按一个字母来对待。

在字体排印的世界里,关于 “字距宽松时二合字母 IJ 和 ij 的两个部分应当呆在一起还是应当分开” 也分了两个观点。大多数,并非全部的字体排印师会认同,当 i 和 j 两部分是分开画的(二合字母设计),应该像其他字母一样分开字距。只有当它们本身就是连在一起绘制的(合字设计),那么在字距宽松的环境下还作应为一个整体存在。

更糟的是,Unicode 中确实有 U+0132 LATIN CAPITAL LIGATURE IJU+0133 LATIN SMALL LIGATURE IJ,但他们仅仅是兼容字符。这意味着它们只用于向后兼容性的原因,且不鼓励使用。而且,并没有带有 IJ 键的键盘,也没有可以产生 Unicode U+0132 或 U+0133 的广泛使用的输入法。因此,我们可以放心地忘掉它。

用于 J 的变音符

在荷兰书面语中,你可以通过为元音添加重音符来为某个音节添加额外的重音:“ík” 代替 “ik”,“dóén” 代替 “doen”,“vóór” 代替 “voor” 等等。嗯,你可能已经猜到了:当 IJ/ij 重读时,I/i 和 J/j 都要添加尖音符。

现在,使用 Unicode,确实可以为你的 j 加上尖音符。当然了,带尖音符的 J/j 并没有被编码,不过确实 J/j,还有结合标符 U+0301 COMBINING ACUTE ACCENT。因此我们可以使用标符附着来实现它。理论上,用户们只需要键入 j,后接一个零宽的结合尖音符。如果用户知道如何输入结合尖音符,那就没问题了。问题只是这样的用户很少。

绝大多数人,或者更确切地说,几乎所有荷兰语和佛兰德语用户,都会在其键盘上分别键入 i-j 或 I-J。当他们加重它时,则分别键入 í-j 或 Í-J。这意味着我们的字体中需要有 OpenType 特性,将 iacute j 序列转换为如下形式:

因此,我们需要一个带有尖音符的 j,对吧?十分简单。首先,请确保你的字体中包含 jdotlessacutecomb(如果你的设计需要,还有acutecomb.scacutecomb.case)。这将做两件事:首先,它会让精明的用户能够将结合尖音符添加到你的 j 上,因为现在你的字体中已经有了一个结合尖音符,以及确实可以接受该尖音符的不带点的 j。其次,它会让 Glyphs 在下一步中为你预先构建相应的组合字符形。读下去吧。

如果,大多数情况下,你的 ij 是一个二合字母设计,只需在字体中添加 jacuteJacute。如果你有小型大写字母的话,别忘了也添加 jacute.sc。最快的办法是执行 “字符 > 添加字符形…”(Cmd-Shift-G)并在随后出现的对话框中键入 Jacute jacute jacute.sc。按下 “生成” 按钮后,包含正确组合的字符形就会被添加进你的字体中。

用于重音 IJ 的 OpenType 特性

现在,前往 “文件 > 字体信息 > 特性”(Cmd-I),单击左下角的 “更新” 按钮更新你的 OpenType 特性。然后看一下你的 locl 特性。Glyphs 应该已经添加了下面这几行内容:

language NLD;
sub iacute j' by jacute;
sub Iacute J' by Jacute;

如果带尖音符的小写 i 后面键入了一个小写 j,或者带有尖音符的大写 I 后面键入了一个大写 J,那么 j 或 J 就会被我们刚刚加入的、相应带有尖音符的版本替代。如果语言被设置为荷兰语的话就会如此。如果你更想自己写代码,你的 locl 不是自动生成的话,就需要手动输入这几行。

Glyphs 也会在 Languagesystems 前缀中添加这一行:

languagesystem latn NLD;

同样,如果你的 Languagesystems 并非自动生成,别忘了在你的代码中加入这一行,否则 locl 将不会生效。

如果你的字体里有小型大写字母,小型大写特性 smcpc2sc 应当带有将 jacute 替换为 jacute.scJacute 替换为 jacute.sc 的相应几行。同样,如果你选择不使用 “自动生成特性” 选项来自动化特性生成,别忘了在你的代码中加入类似的内容。

最后一个需要检查的地方是名为 ccmp 的特性。在某一个 lookup 中,Glyphs 应该会添加了这样一行:

sub [i j]' @CombiningTopAccents by [idotless jdotless];

这行代码让正确的 Unicode 解决方案适用于标符附着。每次添加结合重音变音符时,带点的  j 都替换为不带点的  j 。

合字设计变体

如果你的 IJ 或 ij 确实是连起来的,或是有特殊的造型(比如这里 I 短一些),你会想要添加 I_J.loclNLD i_j.loclNLDIacute_J.loclNLD iacute_j.loclNLD。同样,Glyphs(版本 2.3.1 或更新的版本)会自动为你生成 OpenType 特性代码。同样,如果你有小型大写字母的话添加相应的 .sc 变体。

就是这样了。在像 Adobe InDesign 或 Quark XPress 这样的排版软件中,你现在可以将文本的语言设为荷兰语,键入 m-í-j-n 然后 j 上面也会加上重音符了。很酷。


示例字体:HENRIETTE 由 TYPEJOCKEYS 设计。

2014-09-02 更新:更新为 Glyphs 2 中新的字符形名称。
2016-05-30 更新:重写来反映推荐的 j-acute 解决方案。
2016-06-08 更新:添加了合字设计变体。
非常感谢 Rob Mientjes。
2019-10-24 更新:录入错误。

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