2023年7月27日 星期四

以 FontForge 免費開源軟體 修改字型

首先到 FontForge 官網「https://fontforge.org/」,或他們 GitHub 專頁「https://github.com/fontforge/fontforge/」,下載最新版安裝檔,目前最新版是「20230101」版。

安裝好後,若要更改 FontForge 的介面語言,需到安裝目錄,通常在「C:\Program Files (x86)\FontForgeBuilds\」,找到 fontforge.bat 這個檔案,按右鍵編輯,找到「::set LANGUAGE=en 」,在下方新增一行「set LANGUAGE=zh_TW」,儲存之後再開啟程式就變成繁體中文了。使用時盡量以系統管理員身分執行,我是直接在捷徑按右鍵,選內容 -> 相容性,勾選「以系統管理員的身分執行此程式」。執行軟體會要求開啟或新建字型,必須確定檔案位置才會開始匯入,然後進入字型預覽窗格。

主選單按「元件→字型資訊」(Ctrl+Shift+F) 出現視窗後,在名稱頁修改字型名稱、字重、版本等資訊。在一般頁設定字型的Em尺寸、上下緣、底線位置及高度。之後的每一頁都有相關設定可以修改。

主選單按「檢視→前往」(Ctrl+Shift+>) 出現視窗後,輸入要去的位置,比如說直排標點的開頭位
置「U+FE10」。

主選單按「元件→變換」(Ctrl+\) 出現視窗後,可以指定變化方式,例如旋轉逆時針90度、位移XY軸各多少值、還有歪斜神縮等等。

主選單按「檔案→執行命令稿」(Ctrl+.) 開啟指令視窗,可以貼上指令碼,下方可指定使用 Python 或 FF 語法。


情境一,直式標點沒有上下左右置中,使用已經置中的橫式標點字圖來取代:
U+FE10←(,)U+FF0C
U+FE11←(、)U+3001
U+FE12←(。)U+3002
U+FE13←(:)U+FF1A
U+FE14←(;)U+FF1B
U+FE15←(!)U+FF01
U+FE16←(?)U+FF1F
這幾個字逐個去找字圖複製貼上,不如使用以下 Script 即所謂命令稿來批次執行:
================ 直式標點取代之FF語法 ================
Reencode("unicode4")
Select(0uFF0C)
Copy()
Select(0uFE10)
Paste()
Select(0u3001)
Copy()
Select(0uFE11)
Paste()
Select(0u3002)
Copy()
Select(0uFE12)
Paste()
Select(0uFF1A)
Copy()
Select(0uFE13)
Paste()
Select(0uFF1B)
Copy()
Select(0uFE14)
Paste()
Select(0uFF01)
Copy()
Select(0uFE15)
Paste()
Select(0uFF1F)
Copy()
Select(0uFE16)
Paste()
================ 直式標點取代之FF語法 ================


情境二,以台灣慣用的「」取代中國習用的“”引號:
「 (U+300C) → “ (U+201C)
」 (U+300D) → ” (U+201D)
『 (U+300E) → ‘ (U+2018)
』 (U+300F) → ’ (U+2019)
「(U+300C) → 〝 (U+301D)
」(U+300D) → 〞 (U+301E)
可使用以下 Script 來批次執行:
================ 引號取代之FF語法 ================
Reencode("unicode4")
Select(0u300C)
Copy()
Select(0u201C)
Paste()
Select(0u300D)
Copy()
Select(0u201D)
Paste()
Select(0u300E)
Copy()
Select(0u2018)
Paste()
Select(0u300F)
Copy()
Select(0u2019)
Paste()
Select(0u300C)
Copy()
Select(0u301D)
Paste()
Select(0u300D)
Copy()
Select(0u301E)
Paste()
================ 引號取代之FF語法 ================
以上二段指令之 Copy() 可以改成 CopyReference() 語法,就會採用連結字圖而非複製取代方式,照理說檔案會變小,但是相容性適用性比較不能確保,一般還是直接改掉比較安全可靠。


情境三,將0u2030以後的所有非標號非拉丁文字逆時針旋轉90度,製作偽直排字型:
================ 非拉丁文字改方向之FF語法 ================
SelectAll()
SelectFewer(0u0,0u202F)
SelectFewer(0u3008,0u3011)
SelectFewer(0u3014,0u301F)
SelectFewer(0uFE63)
SelectFewer(0uFE66)
SelectFewer(0uFF08,0uFF09)
SelectFewer(0uFF0D)
SelectFewer(0uFF1C,0uFF1E)
SelectFewer(0uFF3B)
SelectFewer(0uFF3D)
SelectFewer(0uFF5B)
SelectFewer(0uFF5D,0uFF60)
SelectFewer(0uFF62,0uFF63)
SelectFewer(0x110b4d,0x110b7c)
SelectFewer(0x110b81,0x110b86)
SelectFewer(0x110db5,0x110db8)
SelectFewer(0x110dd4)
SelectFewer(0x110df3,0x110df4)
Rotate(90,0,0)
Move(880,-120)
================ 非拉丁文字改方向之FF語法 ================
文字轉向的位置偏移量各字型不同,主要以字型資訊裡設定的字體位置來微調。
上述語法也可以只做到選擇,轉向與移動按「元件→變換」(Ctrl+\)以圖形化介面做操作。




完成編輯以後,主選單按「檔案→產生字型」(Ctrl+Shift+G) ,這邊我儲存成TrueType格式。網路上大部分人建議下方的「儲存之前進行驗證」不要勾選,不然會花很多時間。