教程 OpenType 分數
No.02 OpenType Fractions

使用反向鏈式替換 實現分數

使用 rsub 在 OpenType 字型中實現精準的分數排版,提升分數格式化質量,同時不影響非分數文字。

教程式號: 02-Fractions
官方原文: high-logic.com
內容狀態: ✅ 基於完整內容建立

在 OpenType 字型中實現分數

分數在排版中對於顯示數學表示式、測量值等至關重要。OpenType 字型中的 frac 功能用"常用"(對角線)分數替換由斜槓(U+002F)或分數斜槓(U+2044)分隔的數字(數字)。

實現分數的常用方法

實現 frac 功能的更常用方法之一如下:

@figures = [zero one two three four five six seven eight nine];
@figuresNumerator = [zero.numr one.numr two.numr three.numr four.numr five.numr six.numr seven.numr eight.numr nine.numr];
@figuresDenominator = [zero.dnom one.dnom two.dnom three.dnom four.dnom five.dnom six.dnom seven.dnom eight.dnom nine.dnom];
@slash = [slash fraction];

feature frac {
    sub @figures by @figuresNumerator;
    sub [@slash @figuresDenominator] @figuresNumerator' by @figuresDenominator;
    sub slash by fraction;
} frac;

常用方法的問題:

雖然這種方法有效地格式化分數,但它可能會無意中影響文字塊中的非分數數字和斜槓。例如:

1/2 123/456 4 5/8 m/s
常用方法問題

潛在問題:

  • "m/s" 中的斜槓將被分數斜槓替換。
  • 不打算作為分數一部分的數字(如 "4")將被轉換為分子形式。
  • 這會導致錯誤的渲染並影響可讀性。

使用反向鏈式單個替換(rsub)的新方法

為了解決這些問題,我們可以使用更精確的方法,僅影響實際分數,而保持文字的其他部分不變。一種有效的方法是使用 GSUB LookupType 8(反向鏈式上下文單個替換),這是我們在 2021 年 6 月 開發的技術。

這是建議的解決方案:

@figures = [zero one two three four five six seven eight nine];
@figuresNumerator = [zero.numr one.numr two.numr three.numr four.numr five.numr six.numr seven.numr eight.numr nine.numr];
@figuresNumeratorEx = [fraction @figuresNumerator];
@figuresDenominator = [zero.dnom one.dnom two.dnom three.dnom four.dnom five.dnom six.dnom seven.dnom eight.dnom nine.dnom];
@figuresDenominatorEx = [fraction @figuresDenominator];

feature frac {
    sub @figures slash' @figures by fraction;
    rsub @figures' @figuresNumeratorEx by @figuresNumerator;
    sub @figuresDenominatorEx @figures' by @figuresDenominator;
    sub @figures space' @figuresNumerator by space.frac;
} frac;
新方法結果

新方法的優勢:

  • 上下文精度:
    • 僅影響作為實際分數一部分的數字和斜槓。
    • 保持文字中的其他數字和斜槓不變。
  • 保留非分數內容:
    • 像 "m/s" 這樣的單位保持正確格式。
    • 不打算作為分數的數學表示式或測量值按預期顯示。

優勢總結

  • 避免意外替換:
    • 常用方法會更改所有數字和斜槓,這在連續文字中可能有問題。
    • 新方法有選擇地應用替換,提高排版準確性。
  • 增強可讀性:
    • 讀者可以正確解釋測量值和單位而不會混淆。
    • 分數被適當格式化而不影響周圍文字。
  • 改善使用者體驗:
    • 打字員和設計師可以輸入文字而不必擔心錯誤的字形替換。
    • 字型行為可預測,這對於專業排版至關重要。

最終思考

使用 rsub 實現 frac 功能在處理現實世界的文字場景方面提供了顯著優勢。透過僅在需要的地方應用替換,我們保持文字的完整性並增強字型的整體排版質量。