Ubuntu 6.06 關於字體顯示的修正

以下是 Ubuntu 6.06 關於字體顯示、fontconfig 設定檔的整理,某些問題在網頁瀏覽器 (例如 Firefox) 中最為明顯。

首先看看你的 language-selector.conf 對不對

選擇繁體中文語系的 Ubuntu 6.06 存在著一個 bug,/etc/fonts/language-selector.conf 錯誤連結到 /usr/share/language-selector/fontconfig/none,連結到 zh_TW 才正確。我不清楚這個 bug 是否已經修正,請用以下指令先檢查:

ls -n /etc/fonts/language-selector.conf

如果連結成 none,請用以下指令修正它:

sudo fontconfig-voodoo -f -s zh_TW

這麼一來字型會比之前好看許多。

安裝 AR PL New Sung 作為系統字型

Ubuntu 一開始預設使用的字體不知道為甚麼一直有右括號破損的 bug,不是很美觀,暫且以 AR PL New Sung 作為系統字型吧。第一次用 Ubuntu 記得要先把 /etc/apt/sources.list 換成台灣 ubtw 提供的 sources.list

#下載安裝 AR PL New Sung
sudo apt-get install ttf-arphic-newsung
#更新字型快取
sudo fc-cache -v

要作為系統字型,比較好的方式是直接修改 language-selector.conf,把 AR PL New Sung 加入並排序為中文字型的首選,如果你從未修改過,請先把 /etc/fonts/language-selector.conf 作個備份,然後打開來瀏覽、看看結構:

sudo gedit /etc/fonts/language-selector.conf

別慌!文件裡頭上半部主要是三種字族的設定,分別是 serif、sans-serif、monospace,請依樣畫葫蘆加 AR PL New Sung,加入時注意必須加在中文字型的最上頭,以下是個範例:

<alias>
<!-- serif、sans-serif、monospace 部份都得改 -->
<family>serif</family>
<prefer>
.....
<!-- 這是最後一個英文字型(範例) -->
<family>Kinnari</family>
<!-- 這是你必須加入的 AR PL New Sung,排到中文字型的第一個 -->
<family>AR PL New Sung</family>
<!-- 這是原來的首選中文字型(範例) -->
<family>AR PL ShanHeiSun Uni</family>
.....

serif、sans-serif、monospace 這三個部份都加入 AR PL New Sung 後,你也可以把喜歡的英文字型設定到所有字體的最上面 (第一個字體會被系統取做為系統英文字型),一樣三個部份都要設定,然後儲存檔案,並確定「系統→偏好設定→字型」中是設定成預設的 serif,等寬是 monospace,瀏覽器的字型設定也使用預設的 serif 、sans-serif、monospace,確認後重新啟動 gnome 生效。 (Ubtw-wiki:#如何不用重開機下重新啟動 GNOME ?)

為甚麼要這麼大費周章修改 language-selector.conf 呢?直接用「系統→偏好設定→字型」作設定不好嗎?設定 gnome 字型的 UI 是好用,但指定中文字體就會直接取用該字體內含的的英文字型,修改 language-selector.conf 我們則可以設定讓系統英文字以英文字型顯示,中文以中文字型顯示。

安裝微軟細明體後,遇到網頁內文字指定「細明體」或「新細明體」時,字體糊掉?(未安裝微軟細明體請略過)

其實這不是糊掉,而是系統中的 fontconfig 設定檔預設設定啟用了字體反鋸齒所產生的效果。這牽涉到兩個問題:第一,在西方語系中使用的字體,使用反鋸齒效果能讓文字看起來更美觀,但在中文字體則不完全是那樣,18 px 以下的點陣字使用反鋸齒反而會像是糊掉,難看得很。

然而你會發現就算 language-selector.conf 裡早就已經設定停用所有中文字族 (Song、Sun、Kai、Ming) 18 pixel 以下的反鋸齒,遇到某些網頁還是會有字體糊掉的情形,例如這兩個網站:網路追追追CCSX makes ACG NEWS,這是第二個問題,也是問題的核心,這些網站都將網頁字型指定為「細明體/新細明體」,而在 Ubuntu 中卻少了關於「細明體/新細明體」的設定,因為系統祇認得(新)細明體的英文字型名稱「MingLiU/PMingLiU」。

找到問題的實際原因就好辦,原來是系統不認得以中文字表示的(新)細明體,不存在於上述中文字族中,也就沒有停用反鋸齒,導致遇到網頁指定以中文字表示的(新)細明體時,火狐認得,但字就這麼糊掉了。

解決的方法我們不修改 language-selector.conf 或是 fonts.conf,而是在 /etc/fonts/conf.d/ 下建立專門的檔案,並連結成數字開頭的檔案讓 fontconfig 能夠讀到,也能方便管理,這是 fontconfig 提供的聰明辦法。現在我們來建立一個修正微軟細明體問題的檔案,內容是停用(新)細明體 18 px 以下的反鋸齒效果,不管是英文或中文名稱都做了設定:

下载: mingliu.conf
  1. <fontconfig>
  2. <!-- Disable antialias feature of MingliU & PMingliU when pixelsize less than 18 -->
  3.         <match target="font">
  4.                 <test name="family">
  5.                 <string>MingLiU</string><string>PMingLiU</string><string>細明體</string><string>新細明體</string>
  6.                 </test>       
  7.                 <test name="pixelsize" compare="less_eq"><int>18</int></test>
  8.                 <edit name="antialias" mode="assign"><bool>false</bool></edit>
  9.                 <edit name="hinting" mode="assign"><bool>true</bool></edit>
  10.         </match>
  11. </fontconfig>

把檔案下載下來存成 mingliu.conf,用 sudo 權限複製到 /etc/fonts/conf.d/:

sudo cp mingliu.conf /etc/fonts/conf.d/

並做一個數字開頭的軟連結啟用它 (停用只消移除軟連結,很聰明吧?):

sudo ln -s /etc/fonts/conf.d/mingliu.conf /etc/fonts/conf.d/50-mingliu.conf

重新啟動瀏覽器即可生效!
這個檔案是參考些文章後自己亂改的,有錯或是有更好的方法歡迎指教!

字太小了!限制最小字體大小

英文字小一點似乎很美觀,但中文字過小就難以辨識了,gnome-splash 就有這個問題。12 px (8pt) 是中文可用大小的底線,看倌們可依自己的喜好來設定:

  1. <fontconfig>
  2.     <match target="font">
  3.         <test name="pixelsize" compare="less">
  4.         <double>12</double>
  5.         </test>
  6.         <edit name="pixelsize" mode="assign">
  7.         <double>12</double>
  8.         </edit>
  9.     </match>
  10. </fontconfig>

下載後放到 /etc/fonts/conf.d/ 並做連結:

#放到 /etc/fonts/conf.d/
sudo cp minimal-font-size.conf /etc/fonts/conf.d/
#做連結
sudo ln -s /etc/fonts/conf.d/minimal-font-size.conf /etc/fonts/conf.d/10-minimal-font-size.conf

重新啟動 gnome 生效。 (Ubtw-wiki:#如何不用重開機下重新啟動 GNOME ?)
用此方法便可以不必再設定 Firefox 的最小字型,一勞永逸!

參考與延伸:
Dapper 字型設定的一些問題
黑眼珠 | 過小的字有意義嗎?
Font-Size Samples by piaip
serif vs sans serif
ubtw-wiki:如何安裝其他字體?
Fontconfig

Comments (3) left to “Ubuntu 6.06 關於字體顯示的修正”

  1. -TMA-1- » links for 2006-07-17 wrote:

    [...] lancetw的新天地 » Ubuntu 6.06 關於字體顯示的修正 (tags: Tech Linux Ubuntu Fonts) [...]

  2. DeCay_LaLa wrote:

    請問英文的字型要如何改變?
    我以同樣的方式修改第一個英文字型
    可是結果都沒有變= ="

  3. lancetw wrote:

    系統→偏好設定→字型,裏面除了固定寬度用 monospace 其他必須設定成 Sans or Serif,或是乾脆直接在 系統→偏好設定→字型 裡設定你要的英文字型也是個好方法。抱歉現在才回 XD

Post a Comment

*Required
*Required (Never published)