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

教程
作者:Rainer Erich Scheichelbauer
en fr zh

2 九月 2015 发布日期: 17 九月 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 (三言).