在什么情况下,字体每个unicode字符有多个字形,这是如何处理的?

时间:2017-03-20 22:11:26

标签: svg unicode fonts

我一直在阅读SVG字体规范,我偶然发现了this tidbit

  

glyph-name =“< name> [,< name>] *”

     

字形的名称。建议字形名称在字体中是唯一的。 字形名称可用于Unicode字符数不能提供足够信息来访问正确字形的情况,例如每个Unicode字符有多个字形时。字形名称可在字距调整定义中引用

强调我的。这似乎表明我对什么字体的理解是错误的。我总是将它们理解为unicode代码点(字符的计算机表示)与字形(字符的可视化表示)的一对一映射。它给我留下了几个问题。

  • 字体渲染引擎如何选择为具有多个字形的代码点显示哪个字形?
  • 那个字符如何存储在字符串中?额外信息如何决定使用多个字形中的哪一个附加到unicode代码点?
  • 有没有人见过一个字体的真实世界示例,该字体具有单个unicode代码点的多个字形?

1 个答案:

答案 0 :(得分:1)

您正在寻找的神奇词语是连字

某些字体包含用于替换特定字符序列的特殊字形,通常使用一个或多个字母的替代形式以获得更好的布局。这些在脚本字体和某些语言的字体(如阿拉伯语)中最常见。

这种字体的一个例子是Zapfino。下面的图像包含五个字形:前四个分别是一对字符,最后一个是七个字母的字符。

Zapfino ligatures

这些连字纯粹存在于字体渲染引擎中。上面提到的字符串只是:

st  ff  fi  fl
Zapfino

没有演示修饰符。

Zapfino也是第二点的一个很好的例子:字体可以包含完全相同字符的多个字形。例如,这里是字符A的所有字形:

enter image description here

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