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