2009年3月19日 星期四

字型設定-fontconfig

fontconfig 是大部份 linux 應用程式所遵循的字型設定
若要自行設定字型,您不可以不知道
他的設定檔在 /etc/fonts 目錄下
主要的檔案是 fonts.conf
上游已寫好可現成取用的設定檔則放在 /etc/fonts/conf.avail 目錄
將您要用的設定連結到 /etc/fonts/conf.d 目錄
然後執行 fc-cache 就會
(1)檢查是否有語法錯誤,並且
(2)新開啟的應用程式就會馬上套用新的設定
您可以參考 fonts-conf (繁體中文版 fonts-conf 手冊簡體中文版 fonts-conf 手冊)
若看英文沒什麼困難,直接在終端機用 man 來看
$ man fonts-conf
我們要用 fontconfig 來設定您要用的字型及效果

(1)您偏好的字型
在 fontconfig 中分成三個字族:
sans (sans-serif,無襯線字體),通常這是大部份程式預設使用的字體
serif (有襯線字體)
monospace (等寬字體),通常終端機會使用此字體
有襯線字和無襯線字的差別,請看 http://blog.bs2.to/post/EdwardLee/3401

SUSE/openSUSE 中的 /etc/fonts/suse-post-user.conf
就是設定偏好的字體
摘錄關於 sans-serif 的一段
<alias>
<family>sans-serif</family>
<prefer>
<family>Arial</family>
<family>Albany AMT</family>
<family>Verdana</family>
<family>DejaVu Sans</family>
<family>Liberation Sans</family>
<family>SUSE Sans</family>
<family>Bitstream Vera Sans</family>
<family>Nimbus Sans L</family>
<family>Luxi Sans</family>
<family>Mukti Narrow</family>
<family>Nachlieli CLM</family>
<family>Helvetica</family>
<family>Khmer OS System</family>
<family>Lohit Punjabi</family>
<family>Lohit Oriya</family>
<family>Pothana2000</family>
<family>TSCu_Paranar</family>
<family>BPG Glaho</family>
<family>Terafik</family>
<family>FreeSans</family>
<family>Meiryo</family>
<family>MS PGothic</family>
<family>MS Gothic</family>
<family>HGPGothicB</family>
<family>HGGothicB</family>
<family>IPAPGothic</family>
<family>IPAGothic</family>
<family>Sazanami Gothic</family>
<family>Kochi Gothic</family>
<family>CMEXSong</family>
<family>FZSongTi</family>
<family>AR PL ShanHeiSun Uni</family>
<family>FZMingTiB</family>
<family>AR PL SungtiL GB</family>
<family>AR PL Mingti2L Big5</family>
<family>UnDotum</family>
<family>Baekmuk Gulim</family>
<family>Baekmuk Dotum</family>
</prefer>
</alias>

如果您沒裝到日文字型,應該您的 sans-serif 字型
在英文部份會對應到 DejaVu Sans
中文字型則對應到 AR PL ShanHeiSun Uni
(11.1 中 CMEXSong 和 FZMingTiB 都不再安裝了)
所以您的 gtk2-base 的程式應該都可以正常顯示中英文
qt-base 的程式也支援 fontconfig 的設定檔
但是『敏感程度』不同
若在 zh_TW 環境中,他會優先選擇中文字型來當成預設字型
結果英文部份就沒這麼好看了
下一篇再針對 qt-base 程式來設定

您可以參考 http://blog.bs2.to/post/EdwardLee/16981
原本 SUSE/openSUSE 中的 /etc/fonts/suse-post-user.conf 的
<alias> 標籤全部改成
 <alias binding="strong">

您會發現 qt-base 的程式也會遵循 fontconfig 優先使用英文字型
可惜是在 flash 中的中文就會壞掉了...(目前只發現這個問題)
如下圖所示
寄件者 font-settings

正常畫面應為
寄件者 font-settings


(2)用點陣字顯示偽粗體中文
不知道從什麼時候開始
gtk2 程式的偽粗體會使用平滑(反鋸齒)字型
像是自由軟體技術交流網
寄件者 font-settings

同一個網頁在 Konqueror 中看起來則是
寄件者 font-settings

如果您想要改成點陣的粗體(不一定比較好看,純個人偏好)
可以用下面這個 30-fake-bold-dont-antialias.conf
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<!--
Synthetic emboldening for fonts that do not have bold face available
-->
<!--#沒有粗體的字型使用模擬粗體-->
<match target="font" >
<!-- check to see if the font is just regular -->
<test compare="less_eq" name="weight" >
<int>100</int>
</test>
<!-- check to see if the pattern requests bold -->
<test target="pattern" compare="more_eq" name="weight" >
<int>180</int>
</test>
<!-- set the embolden flag -->
<edit mode="assign" name="embolden" >
<bool>true</bool>
</edit>
<!-- disable antialias for small font-->
<test compare="less" name="pixelsize" >
<double>15.5</double>
</test>
<edit name="antialias" >
<bool>false</bool>
</edit>
</match>
</fontconfig>

將這檔案放在 /etc/fonts/conf.avail/ 中
做一個連結到 /etc/fonts/conf.d/ 底下
再執行 fc-cache 即可
重新啟動 firefox 畫面如下
寄件者 font-settings


(3)設定最小字型
字太小實在沒什麼意義
但是字太大有時會影響到排版的問題
數字部份您自己嘗試看看
當您的螢幕解析度愈大時
您需要設定更大的數字
用下面的設定檔 20-minimal-font-size.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match target="font">
<test name="pixelsize" compare="less">
<double>11.5</double>
</test>
<edit name="pixelsize" mode="assign">
<double>11.5</double>
</edit>
</match>
</fontconfig>

完成後的圖
寄件者 font-settings

請仔細看一下右邊登入的部份
差別就一點點,但是舒服很多了

以上兩個設定檔,您也可以在 swyear 套件庫的 chinese-fonts-setting 套件中找到
參考資料:果正兄的字型扎記有很多關於字型的文章,十分值得參考

2 則留言:

lhao 提到...

这篇文章真好,让我明白了不少,谢谢!

SuseGeek寂客 提到...

真的寫的不錯!字型的調校真的頗重要!改天我也來改改看,有問題再發問!^^