教程 拉丁語變音符號
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 功能程式碼