[Ubuntu]明明白白安裝中文字體授權方式:署名,非商業用途,保持一致,轉載時請務必以超鏈接(http://www.fwolf.com/blog/post/170)的形式標明文章原始出處和作者信息及本聲明。

Ubuntu 6.06 dapper對中文的支持應該說是一向不錯的,包括現在默認安裝就包含了scim輸入法。然而,一般安裝的ubuntu雖然能夠顯示、輸入中文了,但總覺得所顯示的中文像歪瓜裂棗,很是彆扭。這是很無奈的,也不是linux的錯,這是因為現在幾乎沒有免費的中文字體庫來給我們用,大家平時使用習慣了的winxp裡面的宋體、還有方正排版系統裡面的仿宋體、公文中的方正小標宋等等,這些字體都是商業公司開發出來用在自己的產品中的,是有版權的,所以linux不能拿過來就用。如果你還沒有聽說過字體有版權的話,上網搜索一下「胡萬進」吧,這位老兄就是當年在微軟從事字體製作的一位員工,他所製作的字體的版權就是歸微軟公司所有。我們國家雖然對IT產業非常關注,但是更關注windows,對開源社區和自由軟體的支持幾乎沒有,直到今天也沒有投資開發出一套免費的字體供大家使用。不過幸好有懷著共產主義信念的好同志,為我們提供了免費的替代方案,現在我們可以使用圓體美化,還有開源的文泉驛(域名2)可以用。

本文則是參考如何使用xp帶的字體來進行中文美化?一文,實踐中文字體的安裝,並對ubuntu的字體體系更加深入的了解一下,這樣以後再安裝任何字體就都不怕了。

一、準備字體文件

我一直認為,如果我擁有了一套windows xp的使用權(通過oem方式),那麼我就同時擁有了對這份windows產品的只用於我個人的任意使用權,這裡面包括了對其中的字體的使用權。所以,本文中將winxp的字體拷貝到linux下使用的做法,應該是沒有侵權的。

windows的字體一般存放在c:windowsfonts目錄下,我拷貝到linux下的字體有:

simfang.ttf 仿宋體simhei.ttf 黑體simkai.ttf 楷體simsun.ttf 宋體和新宋體,原文件名simsun.ttctahoma.ttf tahoma字體tahomabd.ttf tahoma字體的粗體形式verdana.ttf verdana字體verdanab.ttf verdana字體的粗體形式verdanai.ttf verdana字體的斜體形式verdanaz.ttf verdana字體的粗體+斜體形式

拷貝過來的字體文件放在了/home/fwolf/tools/fonts目錄下。

二、將字體加入到linux的可使用字體中

首先把字體文件鏈接到存放字體的目錄中

cd /usr/share/fontsln -s /home/fwolf/tools/fonts xpfontscd xpfontsmkfontscalemkfontdir

這樣作和把字體拷貝到/usr/share/fonts的一個目錄下的效果是一樣的。後面的兩個mkfont命令是生成xpfonts目錄下所包含的字體的索引信息。然後運行fc-cache命令更新字體緩存:

fc-cache

現在,應該說linux就可以使用這些新裝上的中文字體了,看一下openoffic里的截圖吧:

其中仿宋體的字體名是FangSong_GB2312,黑體是SimHei,楷體是KaiTi_GB2312,宋體是SimSun,字體名暫時都不是中文的。

三、修改/etc/fonts/fonts.conf的字體渲染順序

讓我們一邊修改,一邊分析fonts.conf這個文件的內容吧,注意部分注釋(<–和–>之間的內容)和無關緊要或者重複的內容我將跳過不再解釋。

<?xml version=」1.0″?> 聲明這個文件是一個xml文檔<!DOCTYPE fontconfig SYSTEM 「fonts.dtd」> xml文檔的格式聲明(dtd = document type define)<!– /etc/fonts/fonts.conf file to configure system font access –><fontconfig> xml文件需要的根節點 <!–DO NOT EDIT THIS FILE.IT WILL BE REPLACED WHEN FONTCONFIG IS UPDATED.LOCAL CHANGES BELONG IN 『local.conf』.

文檔中提示不要手工修改fonts.conf,個人的設定可以寫入local.conf文件,並且會自動被fonts.conf讀入,不過我現在還不知道怎麼創建這個文件,等知道了再公布出來吧,現在先拿fonts.conf開刀,反正預先已經作了備份。

<dir>/usr/share/fonts</dir><dir>/usr/X11R6/lib/X11/fonts/Type1</dir> <dir>/usr/local/share/fonts</dir><dir>~/.fonts</dir>

所有字體文件存放的位置,其中第一個就是我們剛才放字體文件的目錄/usr/share/fonts。

<!–Accept deprecated 『mono』 alias, replacing it with 『monospace』–><match target=」pattern」><test qual=」any」 name=」family」><string>mono</string></test><edit name=」family」 mode=」assign」><string>monospace</string></edit></match>

將本文件中的別名mono替換成全稱monospace,這是xml的一個自動替換聲明,使用別名的目的應該是為了簡化書寫或者維持對舊版本的兼容。後面還有幾個替換就不再一一介紹了。

<!–Serif faces–> <alias><family>Bitstream Vera Serif</family><family>Vera Sans YuanTi</family> <!– added by lifesinger–><family>Times</family><family>Times New Roman</family>

Serif字型將要使用的字體順序。當要顯示Serif字型的內容時,就從下面這個列表中選擇字體,匹配順序是自上而下。可以看到已經安裝的圓體美化再這裡作了修改。如果我們想把宋體作為首選,就在Bitstream Vera Serif字體前面比葫蘆畫瓢加上一行就可以了。

至於什麼是Serif字型,以及Sans-serif字型,可以看一下細說字體 Sans Serif 與 Serif和serif vs sans serif這兩篇文章,說明的很詳細。我覺得把他們叫做字型或者字族,相對於字體來說,更貼切一些。

下面的Sans-serif faces、Monospace faces段中處理方式相同。

<!–If the font still has no generic name, add sans-serif–><match target=」pattern」>

又是三個替換,大概意思是如果上面的字體匹配還不成功,就嘗試使用sans-serif、serif、monospace的默認字體來替換,最後如果還替換不成功,強制使用sans-serif字體。(不知道這麼理解是否正確)

<!–Some Asian fonts misadvertise themselves as monospaced whenin fact they are dual-spaced (half and full). This makesFreeType very confused as it forces all widths to match.Undo this magic by disabling the width forcing code –><match target=」font」><test name=」family」><string>GulimChe</string></test><edit name=」globaladvance」><bool>false</bool></edit></match>

一些亞洲字體實際使用了等寬字體,但是卻沒有明確的聲明,這段就是為了兼容這個進行的處理,保持不變即可。

<!–The Bitstream Vera fonts have GASP entries suggesting that hinting bedisabled below 8 ppem, but FreeType ignores those, preferring to usethe data found in the instructed hints. The initial Vera releasedidn』t include the right instructions in the 『prep』 table. Fix thisby disabling hinting manually at smaller sizes (< 8ppem)–>

修正Bitstream Vera字體在小於8點的時候的顯示問題,保持不變即可。

<!–Load local system customization file

<include ignore_missing=」yes」>local.conf</include>–>

載入配置文件local.conf,下面的~/.fonts.conf也是一樣。

<!–Provide required aliases for standard names–><alias><family>serif</family><prefer><family>Bitstream Vera Serif</family>

又是三個系列字型的字體別名,不知道這個和前面的類似設置是怎麼個關係,大概前面設置的是備選字體,這裡是推薦字體?不過照例把我們的SimSun加進去。

<!–Artificial oblique for fonts without an italic or oblique version–>

對沒有斜體字的字體的處理方法,保持不變即可。

<!–Synthetic emboldening for fonts that do not have bold face available–>

沒有黑體字的字體的處理方法,保持不變即可。

<!–These are the default Unicode chars that are expected to be blankin fonts. All other blank chars are assumed to be broken andwon』t appear in the resulting charsets–>

Unicode編碼中在所有字體中都應該顯示為空的編碼表,保持不變即可。

<!– Rescan configuration every 30 seconds when FcFontSetList is called–>

每隔30秒鐘就重新檢查一下本設置文件(看設置改變了沒有),保持不變即可。

至此,標準的配置文件就結束了,我們需要作的主要修改也都完成了。重啟X應該就能看到宋體中文的界面了。不過在fonts.conf還可以作一些其他的字體處理設置,這個在圓體美化所帶的那個fonts.conf中有例子,比如:

<!– Win XP 效果 –><match target=」font」><test name=」family」><string>Vera Sans YuanTi</string></test><edit name=」globaladvance」><bool>false</bool></edit></match>

這就是指明在對Vera Sans YuanTi字體的處理中,globaladvance參數設置為false,其他的設置也多是這種語法,具體的含義和效果我就不知道了:)。

四、中文字體顯示優化

按照上面的方法配置好以後,宋體能夠顯示了,但是字體有些發虛,那麼一種簡單的方法就是在 系統->首選項->字體(system->preference->font) 中選擇單色(Monochrome),但是這樣所有的字體包括英文字體都會有一點點的小鋸齒,那麼替代的方法就是通過修改fonts.conf,去掉宋體的反鋸齒,並且用黑體替代宋體的粗體。在fonts.conf中添加:

<!– 用黑體替代宋體的粗體 –><match target=」pattern」><test name=」family」><string>SimSun</string></test><test name=」weight」 compare=」more_eq」><const>bold</const></test><edit name=」family」 mode=」assign」><string>SimHei</string></edit></match><!– 關閉宋體的AA –><match target=」font」><test qual=」any」 name=」family」><string>SimSun</string></test><edit name=」antialias」 mode=」assign」><bool>false</bool></edit></match><!– 解決不能識別中文字體名稱的問題 –><match target=」pattern」><test name=」family」><string>宋體</string></test><edit name=」family」 mode=」assign」><string>SimSun</string></edit></match><match target=」pattern」><test name=」family」><string>新宋體</string></test><edit name=」family」 mode=」assign」><string>SimSun</string></edit></match><match target=」pattern」><test name=」family」><string>仿宋_GB2312</string></test><edit name=」family」 mode=」assign」><string>FangSong_GB2312</string></edit></match><match target=」pattern」><test name=」family」><string>楷體_GB2312</string></test><edit name=」family」 mode=」assign」><string>KaiTi_GB2312</string></edit></match><match target=」pattern」><test name=」family」><string>黑體</string></test><edit name=」family」 mode=」assign」><string>SimHei</string></edit></match>

為什麼要用黑體替代宋體的粗體呢,因為宋體字體其實是不含粗體的,windows下也是,只是windows採用了更高級一些的方法來間接實現了宋體的粗體而已。

小結

以上就是簡單的中文字體設置方法,和我對fonts.conf的簡單理解,希望能對大家有用,也希望過路大俠指正錯誤和不足之處。另外還可以參考一下一個詳細的漢化美化方案(freetype/fontconfig/xft),分析得比我深入多了。

參閱:

  • Ubuntu FeistyFawn中文字體配置的變化
  • 推薦閱讀:

    查看原文 >>
    相关文章