FontForge教學 #4

製作重音字母

許多拉丁、希臘及斯拉夫字母具有重音記號。FontForge可從基礎字母中製做出重音字母。

最直接的方法是: 複製 「A」,在「Ã」 貼上,然後 複製「˜」 (tilde) 並 貼入 (Paste Into)「Ã」(注意,貼入Paste Into不同於貼上Paste。 貼上會清空之前的字體,而貼入會將原字體和剪貼簿的字體合在一起。) 接著你可以打開「Ã」,把重音記號放在字體中央的上方。

這種方式頗沒效率,因為如果你要更改「A」的形狀時,還要重建所有由「A」而來的重音字母。FontForge能 參考字體造字。 所以你可以對「A」複製參考索引 (Copy Reference) 並貼上,再複製「˜」的參考索引並貼入,最後當然要調整重音記號的位置。

如此一來,每當你改變「A」的形狀時,「Ã」的形狀和寬度就會神奇地自動改變。

其實FontForge知道「Ã」是依據「A」和「˜」造出來的,所以它懂得自己把「˜」放在「A」上。 Unicode有一個資料庫專門放 (Unicode中) 所有重音字體的組成成份。

舉個例子,開啟tutorial/Ambrosia.sfd然後選擇0xc0-0xff的字體,按下 Element->Build->Build Accented 之後,所有的重音字母就會神奇的做好了。 (事實上有一些字體不是重音字母,所以它們還是空空如也。)

FontForge會自己猜測該如何放置重音記號 (大部份的重音記號會放在字體的最高點之上) ,但有時這樣會沒放好 (如果「u」的兩個豎劃高度有所差距,重音記號就會被放在較高筆劃的上方,而不是兩劃中間的上方) ,所以在自動製造重音字後,你還是得自己瞧瞧。 你應該會想要修正一兩個字 (或者搞不好想重新設計基礎字母) 。

Creating a ligature

Unicode包含很多連體字。 (拉丁字有Æ、Œ、fi……等等。 阿拉伯文的連體字有數百個之多。) 同樣的,Unicode提供了專門存放連體字成份的資料庫。

FontForge沒辦法自動製造好看的連體字,但是它可以把連體字的成份放到字體裡 (按 Element->Build->Build Composite) 。 至少對於拉丁字這樣子製做連體字比較容易。
製造連體字的步驟

ffi ligature as references

ffi after unlinking references

ffi after lowering first f

ffi after doing remove overlap

ffi after adjusting ligature carets

打開Element -> Glyph Info 對話框,替字體命名並標記它為連體字。然後按 Element -> Build -> Build Composite插入連體字各成份的參考索引。 利用Edit-> Unlink References 指令,把參照索引轉為真正的邊線。 調整各成份以使之更美觀。在這裡我把第一個f調低了一點。 利用Element -> Remove Overlap 指令,把參照索引轉為真正的邊線。 最後從原點拖曳連體字的游標置放線 (caret line) ,適當的把各個成份字母隔開。

有些文字處理器可以在連體字的成份之間放置編輯游標。 使用者因而不必知道他所編輯的其實是連體字,反而覺得連體字的各個成份都在。 如果要文字處理器這樣做,那麼字型設計者就得告訴它游標該放在哪裡。 只要FontForge知道誰是連體字,它就會加上適當數量的游標置。 預設放線在原點,但如果你把它們都留在原點,FontForge就不會管它們。 當你做好了連體字,你應該會想要用指標工具從原點拖曳出游標置放線,並且拉到適當的位置。 (只有TrueType和OpenType支援這些。)

注意: OpenType引擎只在它們認為當下的語言環境合宜的時候才會套用這些特性 (在拉丁文環境中,Uniscribe會套用「liga」特性)。 有些應用程式反而從不套用任何的特性 (Word不使用拉丁文的連體字)。 Microsoft 試者詳載Uniscribe會將哪一些字型特性套用在哪一些文字中,但是這個幫助不大,因為Word和Office的作法和連結裡說明的預設作法有所差異。

印度文有很多很多的連體字,但是Unicode沒有為它們都編碼。 如果你想要建造Unicode中沒有的連體字,你可以按照下列方法。 首先將未編碼的字體加入字型之中(如果你用的是Unicode字型,你可以用私有用途區private use area) ,然後命名該字體。 字體的名字很重要,如果你給個好名字,FontForge就能猜出它到底是由哪些成份所構成。 如果你想要做「longs」、「longs」和「l」的連體字,那麼就把它命名為「longs_longs_l」,如果你要做Unicode 0D15、0D40和0D15的連體字,就把它命名為「uni0D15_uni0D4D_uni0D15」。

當你為連體字取好名字,而且插入了各個成份 (可以用Build Composite) ,你應該會想打開字體, 去除參照連結(Unlink Reference),並且編輯字體使之更美觀。

Char Info for Akhand ligature type最後你應該要檢查FontForge是否把你的字體標示為連體字 (如果要細分的話,是「正確的那種」連體字) 。 Element->Glyph Info->Ligature 對話框。你應該會看到一行字,像是:
    liga  m longs longs l
或者
    liga  m uni0D15 uni0D4D uni0D15
第一種情況下你說不定要再加入一行 (按[New...]) :
    liga  m longs_longs l
(假設你已經有了連體字longs_longs) 。 在第二種情況下也許要把連體字類型從「liga」換成「akhn」 (我不很瞭解印度文,所以不知道兩者的差異) ,產生:
    akhn  m uni0D15 uni0D4D uni0D15

-- 上一頁 -- 目錄 -- 下一頁 --