由於 XFree86 將從 4.3 版開始,加入 fontconfig 以及 Xft 字型技術,與 XFree86 原本的核心字型技術(XLFD)並存,在可預見的將來,慢慢地會有愈來愈多的應用程式會揚棄古老的 XLFD 字型引擎,改採全新的 fontconfig & XFt 當作預設的字型引擎,所以,必須儘早了解新的字型技術,到底有什麼優點。
我利用了新年假期,仔細地研究了 fontconfig & Xft,並且完成了適用亞洲地區的 patch,由於研究過程的資料很繁雜,一時之間,無法做一個有系統的整理,先跟各位報告我所完成的部份:
一、解決字型破碎的根本問題。
我簡單地修改了 freetype2,將 BYTECODE INTERPRETER 給 enable。
二、增加 Xft 所缺少的粗體、粗斜體顯示。
由於 Xft 本來就沒有粗體相關的設計,所以我修改了 fontconfig 的設定檔(/etc/fonts/fonts.conf),增加『偽粗體』的設定,並且對 Xft 的字型載入程式動手腳,將粗體字向右 shift 一點(pixel),讓字看起來就像真的變粗一樣,所以,我稱之為『偽粗體』。
三、解決某些字型字距過大的問題。
不論是否開啟了 antialias 都不會再有字型變形的問題。字距過大是因為某些字型的英數字型是固定字距,但因為含有 CJK 字型,所以系統會以 CJK 字型的寬度,當作英數字型的寬度,造成半形的英數字跟全形 CJK 字型一樣寬,這裡,我是修正 Xft,讓 Xft 將之當作可變字距解決的。
四、讓字型名稱(family name)可以具有英文名稱以外的名稱。
這麼說,可能還不是很清楚,我說明白一點好了,也就是像 M$ windows 一樣,可以看到並使用中文的字型名稱,想像一下,您也可以告訴系統,我要用『新細明體』而不用像以前一樣,只能用『PMingLiU』這個名稱而已,再精確一點地說,字型系統可以同時接受『PMingLiU』以及『新細明體』這兩種名稱,字型系統會知道這指的是同一個字型,並不會發生錯亂。
看起來好像不是很重要,不用中文字型名稱,不是也可以用得很好嗎?是的,大多數的情況下,用不用中文名稱的確不是很重要,but!您要知道,很多人可能會使用數種或是數十種的字型,來做簡報或是美術方面的工作,您能單從英文字型名稱看出那是哪一種字體嗎?我想,應該很難吧!如果將英文字型名稱換成中文呢?是不是就一目了然了^^,所以讓我花費最多心力的,反而是這部份。
我寫『中文字型完全解決方案』的目的,並不是教大家如何去 patch 程式,或是修改一堆設定檔;想想,您為什麼要浪費時間在解決字型的問題上!您並不想做一個字型的專家,卻被逼得不得不去了解系統字型運作原理,這是何苦來哉!?為什麼就不能像 Windows 一樣,將字型 copy 到系統 fonts 目錄就馬上能使用?是的 fontconfig 的出現,就是要朝這個方面邁進。
如何使用 fontconfig?fontconfig 拋棄了傳統 XLFD 的方式,您並不需要自己去設定字型的詳細資料,只要簡單地將字型檔,複製到 /usr/share/fonts/ 之下,然後再下指令 fc-cache 即可,它會包辦一切後續動作,並且字型立即生效,不需要像過去一般,結束階段作業,才能使用新字型。
看起來一切都很完美不是嗎?然而,很不幸地,fontconfig 以及 Xft 並未對亞洲地區的字型做完整的支援,如果(我是說如果)您仔細看過 fontconfig & Xft 的原始碼,您就知道,一切仍以西方世界主觀價值為主,身為亞洲人的我們,用起來總是不大對味,只有自己動手了。
我一直沒有提到如何設定 fontconfig?其實,我不願意讓大家動手修改設定檔,真的,意義不大,增加困擾而已,我已經將大部分應該人工設定的部份,加入 fontconfig 的程式中,所以不需要再動手改它。
至於 Xft 部份,由於屬於系統層,不會與使用者直接接觸,所以,我就略過不提。
我 Patch 過的套件可以在這裡找到:
http://firefly.idv.tw/setfont-xft/RPMS/
想研究的話,Source RPMS 在這裡:
http://firefly.idv.tw/setfont-xft/SRPMS/
一定要更新的套件如下,如果您使用 GNOME 當作桌面環境,那麼以下三個套件就可以了。
http://firefly.idv.tw/setfont-xft/RPMS/ ... 3.i386.rpm
http://firefly.idv.tw/setfont-xft/RPMS/ ... 8.i386.rpm
http://firefly.idv.tw/setfont-xft/RPMS/ ... 5.i386.rpm
如果您用 KDE 3.0 以上,又想看到中文的字型名稱,請繼續下載以下兩個套件:
http://firefly.idv.tw/setfont-xft/RPMS/ ... 5.i386.rpm
http://firefly.idv.tw/setfont-xft/RPMS/ ... 3.i386.rpm
※※ 請注意!安裝過程如果出現相依性套件,多半是缺少了 xxxx-devel ,請下載缺少的套件即可,不必到處找。
※※ 目前只有 RedHat 8.0 的套件,如果您並非使用 RedHat 8.0,請勿安裝,但您可以下載 Source RPMS,針對您的版本,略做更改重新編譯即可。
看螢幕快照在這裡:
http://firefly.idv.tw/setfont-xft/
好了,希望大家試用看看,如果有其他意見或更好的建議,請不吝賜教
_________________
落盡鉛華束長髮,一筆狂草稱女俠。
踏遍三江五湖路,更攜書劍闖天涯。
─ 螢火飛