你肯定已經知道了如何在 InDesign 中打開上下文替代字。而且,你可能也聽說過有些字體用這一功能做出了非常酷的東西。本文就將介紹如何在你的字體裡也創建出這樣的功能。
我們要關注的特性是 calt(上下文變體)和 clig(上下文合字)。這兩者都通過 InDesign 中的「上下文替代字」開關來打開。
那麼,找一款你自己的字體,我們來在其中加入一個替代字符形。這個替代形式應該僅在特定情況下替換常規字符形。作為例子,我們選擇字母 j。
我想在這個例子中,當 j 位於字母 g 之後時,它的末端應該稍微收縮一點。所以我們通過「字符 > 添加字符形…」新建一個字符形。在彈出的文本框中輸入 j=j.alt 並點擊「生成」。這樣就會創建一個名為 j.alt 的字符形,其中帶有一個作為部件的 j。然後你可以在右鍵菜單中釋放部件,並調節末端長度。
你可以這樣在編輯視圖中「輸入」 j 的變體:按下 Cmd-F,在彈出窗口的搜索框中輸入j.alt。
現在,我們需要編寫 calt 特性。按下 Cmd-I 打開「字體信息」,切換到「特性」選項卡。點擊加號按鈕創建新特性,新建的特性會保持名稱選定以便修改。我們將其命名為 calt。在上方的輸入框中,輸入:
如果一切正常,你的特性窗口將如圖所示:
在 sub 和 by 之間,時這一特性所查找的完整上下文內容。本例中,是 g 後接 j。但我們只想替換 j,而不是 g。所以我們在 j 後標記一個單直引號: j』。關鍵詞 by 後面的替換內容,j.alt,僅會對帶有單引號標記的字母生效,本例中即為 j。
我們來試一下特性是否有效。點擊「編譯」按鈕,然後在字體窗口中新建一個編輯選項卡,在左下角的「特性」菜單中選擇 calt 並輸入一個包含「gj」的單詞。
當我們的 j 位於 g 之後時,就會縮短尾巴——這是個不錯的注意。不過,如果前面是其他帶有下降部的字母,比如 q、y 或另一個 j 時,也應當如此。當然了,我們可以在 calt 特性中這樣寫:
sub g j' by j.alt;sub q j' by j.alt;sub y j' by j.alt;sub j j' by j.alt;但是這就很繁瑣,尤其是之後如果想修改什麼內容的話。對於同樣的作用,這裡有一種更為有效的寫法:
sub [g j q y] j' by j.alt;方括號會創建一個「類別」(class),其含義為「這些字母中的任何一個」。所以這個特性就是在說,「如果跟在 g、j、q 或 y 中的任何字母之後,就將 j 替換為 j.alt。」
在替換結果中也可以使用類別。你只需要確保兩個類別包含同等數量的內容,且順序一致。假如我們還有一個對應字母 ĵ 的 jcircumflex.alt,那麼特性代碼可以這樣:
sub [g j q y] [j jcircumflex]' by [j.alt jcircumflex.alt];當你經常使用一個類別時,就不想一次次地反覆輸入整個類別。尤其是當你發現類別中漏掉了一個字符形,你就要全盤修改。有一個更好的辦法是,點擊加號按鈕並創建一個類別定義。你可以通過雙擊 xxxx 來對其進行重命名,和重命名特性標籤時的操作相同。類別名稱必須由大寫字母 A-Z 或小寫字母 a-z 開頭,也可包含下劃線 _、句點 . 和數字。名稱不限於四個字母長。我將這一類別命名為 descender_on_the_right,並在其中添加 gj q y:
現在,我們可以像這樣重寫 calt 特性:
sub @descender_on_the_right [j jcircumflex]' by [j.alt jcircumflex.alt];@ 符號用於標記類別名稱。如果你不寫 @,Glyphs 會將其識別為字符形名稱並報錯。
就是這樣了。實際上,這還不是全部內容。在下一篇,OpenType 特性(三):上下文替換中,我們會更進一步,編寫高階的上下文特性代碼。
by Rainer Erich ScheichelbauerChinese translation by Willie Liu (劉育黎) from 3type (三言).