为什么某些程序中某些组合变音符号会移至右侧?

1 google-chrome unicode

我注意到在 Chrome(以及 Word)中,某些组合变音符号显示在它们所应用的字符的右侧,而不是覆盖它或位于其上方/下方。例如,在本页上,对我来说,所有符号都位于字母“o”的右侧,而它们应该水平居中于“o”。

如果您查看此块的官方 Unicode 图表,很明显这是错误的行为。那么为什么 Chrome 在正确显示其他变音符号时却无法正确显示它们呢?

Juk*_*ela 5

使用组合标记指定的变音符号可能放错位置的主要原因有以下三个:

\n\n
    \n
  1. 某些程序(例如旧版本的 Word)无法正确实现变音符号。他们应该以注意基本字符的度量的方式放置标记,例如 \xe2\x80\x9cA\xe2\x80\x9d 上面的变音符号应该高于 \xe2\x80\x9ca\ 上面的相同变音符号xe2\x80\x9d,但有些程序只是简单地在基本字符字形上叠加一个变音符号字形。
  2. \n
  3. 如果基本字符和组合变音符号来自不同的字体,它们通常无法匹配。这通常会导致轻微的位移。例如,如果您打开 Word,将字体设置为 Times New Roman,键入一个字母,然后 U+20D0 COMBINING LEFT HARPOON ABOVE 字符(例如,通过输入 20d0 AltX),您会得到另一种字体的变音符号,因为 Times New Roman (例如大多数字体)还没有\xe2\x80\x99t 得到它。
  4. \n
  5. 一些组合变音符号在字体中的实现不正确。例如,U+20D0 就是这种情况,其字体数量惊人,包括 Arial Unicode MS,您的浏览器可能就是从该字体中获取该字体的。
  6. \n
\n\n

提到的页面中出现的许多变音符号都有不正确的实现。例如,Arial Unicode 中的 U+20D0 是在字体规格(在字体文件本身中)中定义的,因此它具有相当大的提前宽度,与变音符号通常应具有的零相反。实际上,它的实现就像普通的空格字符一样。这也适用于 Asana Math、Cambria Math 和 Sun Ext-A,因此要么字体实现者互相复制了\xe2\x80\x99s 错误,要么这个错误是基于对字符身份的一些共同误解。这也可能是有意设计的,见下文。

\n\n

所以,你可以做什么?在文字处理器或出版程序中,选择合适的字体。这可能会影响您对基本字体的选择,因为通常变音符号应取自与基本字符相同的字体。合适的选择似乎是 DejaVu Sans、GNU Freefont 字体、Latin Modern Math、STIX、Symbola、XITS。然而,选择可能会受到进一步限制:鱼叉变音符号通常用于数学符号,并且数学表达式通常应使用衬线字体来呈现。在网页上,您可以在声明中编写替代字体列表font-family,仅使用可接受的字体,但问题是大多数用户\xe2\x80\x99不会在他们的系统中使用其中任何字体,因此您最终可能会使用合适的免费字体作为可下载字体(网络字体)。

\n\n

作为用户,您可以更改浏览器\xe2\x80\x99s的默认字体设置,以便所选字体包含所需的字符。这可能会产生严重的影响,因为它会影响页面未设置字体的所有文本。此外,没有一种字体可以满足所有需求,因此您可能需要根据正在查看的页面类型更改设置。当我将默认字体设置为 STIX 时,示例页面对于组合鱼叉来说对我来说看起来不错,但对于那里的所有其他变音符号来说则不然。

\n\n

使用 Word 2007 或更高版本时,您还可以执行其他操作。使用强大的方程工具(文档很少,但请参阅我的电子书《编写数学表达式》),您可以构造一个带有基本字符和位于其上方的变音符号的表达式,就像您可以在两个字符中使用指数、分数、积分等一样:维度数学符号。下面的屏幕截图首先显示了 Cambria Math 中斜体的带有鱼叉的 o(实际上是 \xe2\x80\x9cfake italic\xe2\x80\x9d),然后使用方程工具构建了相同的结构,其中使用了相同的字体!

\n\n

在此输入图像描述

\n\n

这里的重点是方程工具负责定位字符。鱼叉是一个间隔字符,这并没有什么坏处。它\xe2\x80\x99s 那就更好了。事实上,某些字体可能故意以这种方式实现它,以便它在这样的上下文中工作。

\n