教程 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 功能,如連字或樣式集。