一个Unicode字符可以有多个字形的情况是什么,这种情况如何处理?

3
我一直在阅读SVG字体规范,无意间发现了这个信息

glyph-name = "< name > [, < name > ]* "

字形的名称。建议字形名称在字体内唯一。当Unicode字符编号无法提供访问正确字形的足够信息时,可以使用字形名称,例如存在多个字形对应一个Unicode字符。字形名称可在字距定义中引用。

重点是我加的。这似乎表明了我对字体的理解是错误的。我一直认为它们是unicode代码点(字符的计算机表示)到字形(字符的视觉表示)的一对一映射。这留下了几个问题。
  • 字体渲染引擎如何选择显示具有多个字形的代码点的字形?
  • 那么该字符如何存储在字符串中?附加哪些额外信息以指定使用多个字形中的哪一个?
  • 有人见过一个实际例子,其中一个Unicode代码点有多个字形吗?

典型的例子是带重音符号的字符,如 ü,它们被呈现为一个复合字形,引用了 u¨ 字形。 - nwellnhof
1个回答

3
你要找的魔法词是“连字”(ligatures)。
有些字体包含特殊字形,用于替换特定字符序列,通常为了使用一个或多个字母的替代形式以获得更好的布局效果。这在草书字体中最常见,在某些语言的字体中也很常见(如阿拉伯语)。
这样的字体示例是Zapfino。下面的图片包含五个字形:前四个分别用于一对字符,最后一个用于七个字母的序列。

Zapfino ligatures

这些连字仅存在于字体渲染引擎中。上面呈现的字符串只是:
st  ff  fi  fl
Zapfino

没有演示修饰符。
Zapfino是第二点的绝佳例子:字体可以包含多个完全相同字符的字形。例如,这里是所有A字符的字形:

enter image description here

这些样式变体在输入文本中也没有任何出现。必须通过其他方法进行选择,例如HTML中的font-variant-alternates CSS属性。默认情况下,大多数渲染引擎不会使用任何样式变体,除非明确指示其这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接