天天看點

[Ubuntu]明明白白安裝中文字型

[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:/windows/fonts目錄下,我拷貝到linux下的字型有:

simfang.ttf 仿宋體

simhei.ttf 黑體

simkai.ttf 楷體

simsun.ttf 宋體和新宋體,原檔案名simsun.ttc

tahoma.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/fonts

ln -s /home/fwolf/tools/fonts xpfonts

cd xpfonts

mkfontscale

mkfontdir

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

fc-cache

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

[Ubuntu]明明白白安裝中文字型

其中仿宋體的字型名是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 when

in fact they are dual-spaced (half and full). This makes

FreeType 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 be

disabled below 8 ppem, but FreeType ignores those, preferring to use

the data found in the instructed hints. The initial Vera release

didn’t include the right instructions in the ‘prep’ table. Fix this

by 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 blank

in fonts. All other blank chars are assumed to be broken and

won’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中文字型配置的變化

繼續閱讀