教程 拉丁语变音符号
No.20 Latin Accents

拉丁语 变音符号

本教程介绍如何让您与其他字体设计师都能用 FontCreator 为自己的字体添加拉丁文变音符号(重音)支持。

教程序号: 20
官方原文: high-logic.com
内容状态: ✅ 基于完整内容创建

变音符号是用于创建复合字符的标记。这些变音符号主要出现在字母的上方或下方,但它们也可以在基础字符内,甚至在两个字母之间。变音符号在几种脚本中用于不同的原因。在拉丁文中,它们主要用于提供发音指导。其中一些标记也被称为重音符号(例如锐音、抑音、扬抑符和波浪号)。

基础字符具有前进宽度,因为它们定义了用于显示轮廓的水平空间。标记通常是无间距的,因为它们只属于基础字符而不改变组合所占用的空间。在从左到右的脚本(如拉丁文)中,这种无间距组合标记通常放置在左侧边距之前(因此字形具有负 LSB),以便与前一个字母组合。

变音符号示例

预组合字符

在设计字体的某个阶段,您可能想要添加预组合字符(例如 Ccedilla、aacute 和 edieresis)。预组合字符实际上是基础字符和一个或多个标记字符的组合,它也有自己的 Unicode 码点。从历史角度来看,它们被添加到 Unicode 中是为了确保该标准支持与已经包含此类预组合字符的其他编码标准之间的转换。

FontCreator(标准版和专业版)允许您通过插入字符和完整复合字形功能自动添加和生成此类字符。您还可以使用字形转换功能,这允许您快速添加对东欧、希腊扩展等的支持。显然,在您设计基础和标记字符后,它们效果最好。

字形转换功能

预组合字符不等于复合字形,但它们配合得很好。复合字形与字形轮廓在字体中的存储方式有关,因为复合字形由一个或多个其他字形的"软链接"组成。复合字形的好处是,当您修改基础或标记字形时,复合字形也会自动更新。

有些文本处理引擎(Illustrator?)会分解预组合字符,但似乎大多数文本处理引擎(Windows、Microsoft 应用程序、Firefox 等)对字符字符串执行 Unicode 规范化形式 C(规范组合)。这将把每个基础字符加上组合标记字符转换为规范预组合等效项(如果字体中可用)。例如,a + ◌̃ 变成 ã,但前提是字体中定义了 ã。

如果字体不支持预组合字符,它将只显示基础和标记,就像它们设计的那样。在这种情况下,标记可能完美地适合 e 和 o 上方,但标记在 w 上可能太靠右,在大写字符上可能太低。

如果您直接输入字体中不可用的预组合字符,则使用另一种字体来显示它,或者您将看到缺失字形(.notdef)。因此,包含预组合字符仍然很重要。

许多语言使用基础和标记组合,这些组合在 Unicode 中不可用作预组合字符(例如 g + ◌̃ → g̃ 和 G + ◌̃ → G̃,如巴拉圭瓜拉尼语中所用)。如前所述,将预组合字符包含到 Unicode 中或多或少是一种遗留机制,Unicode 联盟无意添加更多此类字符。幸运的是,人们可以将其输入为基础字符后跟组合标记字符。但如前所述,标记不会总是以这种方式正确定位。那么我们如何解决这个问题?

OpenType 定位功能

使用 OpenType 字体技术,有另一种方法通过使用 OpenType 定位功能将变音符号定位到基础字符。特定功能是标记到基础(mark)和标记到标记(mkmk)。mark 功能将标记字形相对于基础(或连字)字形定位。mkmk 功能将标记字形相对于另一个标记字形定位,因此您可以堆叠它们。这两个功能都使用附着点,也称为锚点。

在 FontCreator 中,我们可以通过 OpenType 设计器轻松添加 OpenType 功能代码。可以直观地完成,或通过编写功能代码完成。

###
# OpenType Layout feature definitions
# Format: OpenType Feature File Specification version 1.25.1
# Generated by: FontCreator

languagesystem DFLT dflt; 

@marks = [dieresiscomb gravecomb acutecomb circumflexcomb caroncomb ringcomb tildecomb macroncomb];
@basetop = [A-C a-c];
@basemiddle = [D O d o];
@basebottom = [C c];

markClass cedillacomb <anchor -256 0> @bottom;

markClass strokeshortcomb <anchor -385 727> @middle;

markClass gravecomb <anchor -24 1038> @top;
markClass acutecomb <anchor -339 1038> @top;
markClass circumflexcomb <anchor -324 1038> @top;
markClass tildecomb <anchor -367 1038> @top;
markClass macroncomb <anchor -415 1038> @top;
markClass dieresiscomb <anchor -357 1038> @top;
markClass ringcomb <anchor -295 1038> @top;
markClass caroncomb <anchor -324 1038> @top;

feature mark { # Mark Positioning
    lookup MarkToBaseBottom { # GPOS lookup type MarkToBase
        pos base C <anchor 658 0> mark @bottom;
        pos base c <anchor 529 0> mark @bottom;
    } MarkToBaseBottom;

    lookup MarkToBaseMiddle { # GPOS lookup type MarkToBase
        pos base D <anchor 366 727> mark @middle;
        pos base O <anchor 661 727> mark @middle;
        pos base d <anchor 733 1269> mark @middle;
        pos base o <anchor 558 519> mark @middle;
    } MarkToBaseMiddle;

    lookup MarkToBaseTop { # GPOS lookup type MarkToBase
        pos base A <anchor 663 1454> mark @top;
        pos base B <anchor 652 1454> mark @top;
        pos base C <anchor 658 1454> mark @top;
        pos base a <anchor 540 1038> mark @top;
        pos base b ...

编写此类代码很繁琐,但可能很有用。但如果您想要基于锚点的功能,则不需要它,因为 FontCreator 可以为您完成所有艰苦的工作!

OpenType 功能生成

向字体添加基于锚点的功能的最快方法是自动生成锚点,然后使用它们自动生成 OpenType 布局功能。您的字体需要组合标记。如果您的字体缺少它们,可以通过运行东欧转换脚本来添加它们。如果您的字体缺少锚点,只需选择所有字形并选择完整复合字形 → 基于锚点重新定位,以添加和定位几个基于拉丁文字符的锚点。

通常,对于放置在基础字形上方的变音符号,基础锚点在大写时垂直定位在 CapHeight,在小写字符时定位在 x-Height。常规标记的锚点垂直定位在 x-Height,但有一些例外,如 "k" 和 "t"。对于字形下方的变音符号(如 dotbelow 和 cedilla),锚点将设置在基线上。

不建议更改锚点的垂直位置,上下移动标记的轮廓要方便得多。在字形编辑窗口中移动锚点时按住 SHIFT 键会将移动限制为水平或垂直。或者可以使用锚点工具窗口设置其位置。

现在转到 OpenType 设计器,单击左上角的工具栏项,在此对话框中,选择基于锚点的定位,然后单击确定按钮。

OpenType 设计器 - 基于锚点的定位

OpenType 功能和查找现在已添加到您的字体中,如上所示。您可以输入预览文本来测试您的功能。您可以输入字母或斜杠后跟字母的字形名称。

越南语堆叠重音

如果字体包含组合的越南语声调标记,请确保这些字形使用正确的字形命名约定。例如,如果您创建了一个由 circumflexcomb 和 gravecomb 组成的字形,则将该字形命名为 circumflexcomb_gravecomb。

最大化变音符号

如果您想为大写和小写字母使用不同的标记,请添加带有 .case 后缀的标记变体(例如 gravecomb.case),并将其顶部锚点垂直定位在 CapHeight。.case 变音符号应该为大写字形正确定位,这通常远高于 CapHeight。

有些变音符号太宽,无法适应像 i 和 j 这样的窄字形,并且可能与相邻字形冲突。如果这导致文本可读性困难,请为这些例外添加带有 .narrow 后缀的标记变体。

具有小型大写字母和/或小型大写字母的字体可能会受益于额外的变体标记。对于小型大写字母,使用 .smcp;对于小型大写字母,使用 .pcap。如果您想为小型大写字母和小型大写字母都使用标记,则只添加带有 .cap 后缀的标记。

如果您坚持上述命名约定,OpenType 功能生成器就知道如何包含基于锚点定位的正确功能和查找。

添加变体标记后,请务必对受影响的复合字形重新应用完整复合字形 → 基于锚点重新定位。

自动重新定位字形成员

默认情况下,对锚点所做的更改不会传播到复合字形,因此您也需要对这些更改重新应用完整复合字形 → 基于锚点。这可能很繁琐,您甚至可能在每次更改后忘记手动执行此操作。为了确保您的复合字形始终与锚点同步,您可以从上下文菜单中将复合字形设置为自动附加。

2019 年 7 月 20 日更新 - 添加了关于越南语堆叠重音的文本

2022 年 8 月 20 日更新 - 用 Adobe fea 语法替换了 OTLFD 功能代码