教程 Creating Handwritten Fonts with Contextual Alternates
No.19 Creating Handwritten Fonts

创建带有 上下文替代的手写字体

Learn how to create handwritten fonts with contextual alternates using FontCreator's OpenType features. 本教程介绍如何使用 FontCreator 的 OpenType 特性创建带有上下文替代的手写字体。

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

简介

  • 为什么选择手写字体?
    • 手写字体提供个性化、有机的感觉,使其成为创意项目的理想选择。但为了避免重复字形的机械外观,我们可以引入 OpenType 布局功能来替换单词的首尾字母,并用伪随机替代品交换其他字母。
  • 我们将涵盖的内容
    • 如何使用上下文替代替换首尾字母。
    • 如何为单词内的字母创建伪随机替代品。
    • 深入探讨使用 calt 功能进行这些替换。
手写字体示例

理解 OpenType 布局功能

  • 为什么上下文替代很重要

    • 上下文替代通过根据字形在单词中的位置提供替代版本,增强手写字体的视觉多样性。
  • 文本形状引擎的挑战

    • 检测单词边界以及形状引擎如何处理文本可能很棘手,但我们将提供一个在所有支持 OpenType 布局功能的软件中都能工作的解决方案。

步骤 1:为替换准备字体

  • 创建替代字形
    • 对于每个字母,为词首、词尾和中间位置准备替代字形。此外,您可以创建多个替代品用于随机替换。
  • 命名您的字形
    • 为您的替代字形使用清晰的命名约定:a.starta.between1a.between2a.end 分别用于起始、两个中间和结束版本。

步骤 2:实现 OpenType 功能

  • 介绍 calt 功能

    • calt(上下文替代)功能是实现上下文替换的关键。我们将设置查找表来识别单词边界并替换适当的字形。
  • 功能代码分解

    • 在 FontCreator 中,转到 OpenType 设计器,单击底部的代码编辑器按钮,并用此 fea 代码替换现有代码(或合并它):
###
# OpenType Layout feature definitions
# Format: OpenType Feature File Specification version 1.25.1
# Generated by: FontCreator
#

languagesystem latn dflt; # Latin default

@letter = [a-z];
@letter.start = [a.start];
@letter.between1 = [a.between1];
@letter.between2 = [a.between2];
@letter.end = [a.end];

lookup SingleSubstitutionEnd { # GSUB lookup type SingleSubstitution
    sub @letter by @letter.end;
} SingleSubstitutionEnd;

lookup SingleSubstitutionBetween { # GSUB lookup type SingleSubstitution
    sub @letter by @letter.between1;
} SingleSubstitutionBetween;

lookup SingleSubstitutionStart { # GSUB lookup type SingleSubstitution
    sub @letter by @letter.start;
} SingleSubstitutionStart;

lookup SingleSubstitution1 { # GSUB lookup type SingleSubstitution
    sub @letter.between1 by @letter.between2;
} SingleSubstitution1;

feature calt { # Contextual Alternates
    lookup ChainingContextStart { # GSUB lookup type ChainingContext
        ignore sub @letter.start @letter';
        ignore sub @letter.between1 @letter';
        ignore sub @letter @letter';
        sub @letter' lookup SingleSubstitutionStart @letter;
    } ChainingContextStart;

    lookup ChainingContextBetween { # GSUB lookup type ChainingContext
        sub @letter.start @letter' lookup SingleSubstitutionBetween @letter;
        sub @letter.between1 @letter' lookup SingleSubstitutionBetween @letter;
    } ChainingContextBetween;

    lookup ChainingContextEnd { # GSUB lookup type ChainingContext
        ignore sub @letter' @letter;
        sub @letter.start @letter' lookup SingleSubstitutionEnd;
        sub @letter.between1 @letter' lookup SingleSubstitutionEnd;
    } ChainingContextEnd;

    lookup ChainingContextRotate { # GSUB lookup type ChainingContext
        sub @letter.between1 @letter.between1' lookup SingleSubstitution1;
    } ChainingContextRotate;
} calt;

步骤 3:测试和完善您的字体

  • 在 FontCreator 中测试
    • 使用 FontCreator 的预览功能在各种上下文中测试上下文替换。
  • 确保兼容性
    • 确保您的字体在各种支持 OpenType 功能的软件中都能工作,例如 Adobe 软件、Microsoft Word 和网络浏览器。

结论

  • 总结
    • 使用 OpenType 布局功能设计手写字体增加了复杂性,但结果可以使字体感觉更加动态和独特。
  • 后续步骤
    • 一旦您掌握了上下文替代,请考虑添加更高级的 OpenType 功能,如连字或样式集。