Fonts (正體中文)

From ArchWiki
Revision as of 14:43, 25 January 2014 by Plesry (Talk | contribs) (翻譯接近完成)

Jump to: navigation, search
翻譯狀態: 本文章是 Fonts 的翻譯版本。最近一次的翻譯時間:2014-01-25。點擊本連結查看英文頁面之後的變更。

摘自維基百科

電腦字型 (computer font),或稱字型 (font),是包含字 (glyph)、字元或符號 (如 dingbats) 的電子檔案資料。」

注意,某些字型的授權有訂定合理使用限制。

字型格式

現今電腦所使用的字型中,絕大部分屬於點陣 (bitmap) 或輪廓 (outline)資料格式。

點陣字型
由點 (像素) 陣列構成的圖像,代表每種字樣、大小的字 (glyph)。
輪廓字型
又稱作向量 (vector) 字型。使用貝茲曲線 (Bézier curve)、繪圖指引和數學公式描繪每個字,產生的字元可以縮放至任意大小。

常見副檔名

  • bdf, bdf.gz – 點陣字型,bitmap distribution format 的縮寫,以及用 gzip 壓縮的 bdf
  • pcf, pcf.gz – 點陣字型,portable compiled font 的縮寫,以及用 gzip 壓縮的 pcf
  • psf, psfu, psf.gz, psfu.gz – 點陣字型,PC screen font 與 PC screen font Unicode 的縮寫,以及用 gzip 壓縮的版本 (跟 X.Org 不相容)
  • pfa, pfb – 輪廓字型,PostScript font ASCII 與 PostScript font binary 的縮寫。PostScript 字型內建印表機指令。
  • ttf – 輪廓字型,TrueType font 的縮寫。原本設計為 PostScript 字型的替代品。
  • otf – 輪廓字型,OpenType font 的縮寫。TrueType 附帶 PostScript 排版指令。

TrueType 與 OpenType 的技術差異,在大部分的用途之下可被忽略。某些 OpenType 字型使用了 ttf 副檔名。

其他格式

排版程式 TeX 與字型軟體 Metafont 有它們自己算繪字元的方法。這兩個程式使用的字型副檔名有 *pk, *gf, mfvf

FontForge 字型編輯程式會將字型存為自己的文字檔格式 sfd,這是 spline font database 的縮寫。

SVG 格式也有一套自己的字型描述方法。

安裝

安裝字型的方式有很多種。

Pacman

透過 pacman 可以安裝啟用軟體庫的字型。使用以下指令搜尋可供使用的字型:

$ pacman -Ss font

或只搜尋 ttf 字型:

$ pacman -Ss ttf

某些字型,像是 terminus-font,會安裝在 /usr/share/fonts/local,這個目錄預設沒有被加進字型路徑。將以下內容加入 ~/.xinitrc,就可以在 X11 使用這類字型:

xset +fp /usr/share/fonts/local
xset fp rehash

如果執行第一行指令後出現以下錯誤

$ xset +fp /usr/share/fonts/local/
xset:  bad font path element (#0), possible causes are:
    Directory does not exist or has wrong permissions
    Directory missing fonts.dir
    Incorrect font server address or syntax

需要執行

# cd /usr/share/fonts/local;mkfontdir

建立軟體包

您應該將管理字型的工作交給 pacman。字型可以打包成一份 Arch 軟體包,還可以透過 AUR 和社群分享。這裡有一個建立基本軟體包的範例。若想要更了解如何組建軟體包,請閱讀 PKGBUILD

pkgname=ttf-fontname
pkgver=1.0
pkgrel=1
pkgdesc="custom fonts"
arch=('any')
depends=('fontconfig' 'xorg-font-utils')
source=("http://someurl.org/$pkgname.tar.bz2")
install=$pkgname.install

package() {
  install -d "$pkgdir/usr/share/fonts/TTF"
  cp -dpr --no-preserve=ownership "$srcdir/$pkgname/"*.ttf "$pkgdir/usr/share/fonts/TTF/"
}

這份 PKGBUILD 假定字型為 TrueType 類型。之後還必須建立一份安裝檔案 (ttf-fontname.install) 更新字型快取:

post_install() {
  echo -n "Updating font cache... "
  fc-cache -fs >/dev/null
  mkfontscale /usr/share/fonts/TTF /usr/share/fonts/Type1
  mkfontdir /usr/share/fonts/TTF /usr/share/fonts/Type1
  echo "done"
}

post_upgrade() {
  post_install
}

post_remove() {
  post_install
}

若需要更方便的 ttf 字型建立方式,可以使用 AUR 提供的 makefontpkgAUR

手動安裝

要為系統新增一個軟體庫未收錄的字型,建議方法是#建立軟體包。採用這個方式讓 pacman 之後能夠移除或升級字型。不過您也可以用手動的方式安裝字型。

若要將字型安裝到系統 (讓所有使用者都能使用),將字型資料夾移至 /usr/share/fonts/ 目錄。如果只要為單一使用者安裝字型,則改移至 ~/.fonts/ 目錄。

要讓 X 伺服器可以直接載入字型 (不使用「字型伺服器」),需要將新增字型的所在目錄加為 FontPath 項目。這個項目位在您的 Xorg 設定檔案 (例如 /etc/X11/xorg.conf/etc/xorg.conf) 的 Files 區。更多詳細資訊請參閱#讓字型搭配 X.Org

接著更新 fontconfig 字型快取:

$ fc-cache -vf

手動安裝:進階方式

如果您有特殊的字型收集需求:使用商業字型、使用不同格式的字型、安裝/移除字型檔相當頻繁,或只是希望可以更能夠控制存取自己的字型資源,那就相當適合用手動的方式來安裝維護字型。採用這種方案會獲得很多好處:

  • 避免重複安裝不同版本、格式的同一種字型家族 (一個常見原因是算繪問題)。
  • 字型可使用多個非標準的實體來源 (例如額外的硬碟、分割區)。
  • 避免依賴隱晦又佔體積的本地字型來源 (例如 TeX Live & 09-texlive-fonts.conf,或是從 AUR 抓下來的某個字型集合);您可能只需要其中 5 種字型,卻連帶安裝其它 55 種不需要的字型。
  • 避免字型算繪問題,因為您的 fontconfig 設定檔已被調成和與安裝在系統的那份不同的格式。
  • 只要觀察主字型目錄下的內容,就能夠確定系統上有哪種格式的字型家族可供應用程式使用。您不需要複雜、佔用大量資源的字型管理程式;gtk2fontsel 和基本的指令工具 (如 fontconfig 軟體包下的 fc-query) 就可以將這件差事辦得又快又好。
  • 當您安裝或升級單一字型,所有應用程式都可以使用該版本,包含 LaTeX 相關軟體。
  • 有必要的話,可以快速啟用 / 停用某個字型家族,因為您知道它們在哪個目錄下 (除錯時很好用)。
  • 不需擔心有任何多餘的 /etc/fonts/conf.avail/nn-foo.conf fontconfig 檔案會潛在跟您的算繪設定起衝突 (特別是當您使用自訂的字型設定與修補過的函式庫)。
  • 長遠來看,可以省下那些因軟體包管理者的失誤,解決問題和清除衝突所浪費的寶貴時間。

實作上有幾種方式,有必要的話可由任何軟體包管理員採用。以下所舉出的實作方式相當有效率,即使字型數目眾多也相當安全。

  • 我們要將字型來源位置 (例如 /usr/share/fonts.avail:這是我們要存放字型的位置) 和包含字型家族軟連結的目錄 (/usr/share/fonts) 給分隔開來。
  • 將每個字型家族分別放在一個明確命名的子目錄下。命名規則必須一致且明確,例如這樣:
<ttf|otf|t1>-<字型作者或組織(選用)>-<字型家族名稱>

字型來源目錄的內容會長得像這樣:

$ ls /usr/share/fonts.avail

/usr/share/fonts.avail/otf-heuristica
/usr/share/fonts.avail/ttf-liberation
/usr/share/fonts.avail/ttf-ms-arial
...
  • 我們不會動到 TeX Live 的字型目錄,以避免 LaTeX 軟體發生任何問題。既然我們可以使用多個位置,我們將在 /usr/share/fonts 建立軟連結,讓應用程式可以存取特定的字型家族:
# cd /usr/share/fonts
# ln -s ../fonts.avail/otf-heuristica .
# ln -s /opt/texlive/texmf-dist/fonts/truetype/public/opensans ttf-texlive-open.sans

結果如下:

$ ls /usr/share/fonts

ttf-liberation        -> ..fonts.avail/ttf-liberation
ttf-ms-arial          -> ..fonts.avail/ttf-ms-arial
otf-heuristica        -> ..fonts.avail/otf-heuristica
otf-texlive-tex.gyre  -> /opt/texlive/texmf-dist/fonts/opentype/public/tex-gyre
ttf-texlive-open.sans -> /opt/texlive/texmf-dist/fonts/truetype/public/opensans
...

最後,依照慣例執行:

# fc-cache && mkfontscale && mkfontdir

TeX Live Wiki 文章內也有一個類似做法,比較簡單,但較適用於單一使用者的情境,而非全域設定。

舊版應用程式

對於不支援 fontconfig 的舊版應用程式 (例如 GTK+ 1.x 應用程式和 xfontsel),必須在字型目錄下建立索引:

$ mkfontscale
$ mkfontdir

或者,用一行指令將多個資料夾包含進來:

$ for dir in /font/dir1/ /font/dir2/; do xset +fp $dir; done && xset fp rehash

有時候 X 伺服器會無法成功載入字型資料夾,這時您需要重新掃描所有 fonts.dir 檔案:

# xset +fp /usr/share/fonts/misc # 告知 X 伺服器新的目錄
# xset fp rehash                # 強制進行新的掃描

檢查字型是否被包含進來:

$ xlsfonts | grep fontname

Pango 警告訊息

若您的系統有在使用 Pango,它會從 fontconfig 讀取字型來源。

(process:5741): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type='PangoRenderFc', script='common'
(process:5741): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type='PangoRenderFc', script='latin'

如果您看到與上面類似的錯誤,或者應用程式內的字元變成了方框,您需要新增字型並更新字型快取。這個範例使用 ttf-liberation 字型演示,並以 root 執行以套用至全系統。

# pacman -S ttf-liberation
  -- 略過部分輸出,假設安裝已經成功 -- 

# fc-cache -vfs
/usr/share/fonts: caching, new cache contents: 0 fonts, 3 dirs
/usr/share/fonts/TTF: caching, new cache contents: 16 fonts, 0 dirs
/usr/share/fonts/encodings: caching, new cache contents: 0 fonts, 1 dirs
/usr/share/fonts/encodings/large: caching, new cache contents: 0 fonts, 0 dirs
/usr/share/fonts/util: caching, new cache contents: 0 fonts, 0 dirs
/var/cache/fontconfig: cleaning cache directory   
fc-cache: succeeded

您可以測試預設字型是否已經設置:

# fc-match
LiberationMono-Regular.ttf: "Liberation Mono" "Regular"

讓字型搭配 X.Org

為了讓 Xorg 可以找到並使用您新安裝的字型,必須將字型路徑加入 /etc/X11/xorg.conf (另一個 X.Org 設定檔也可以)。

這是必須加入 /etc/X11/xorg.conf 的範例內容。根據您的字型需求新增/移除路徑。

# 讓 X.Org 知道自訂字型目錄
Section "Files"
    FontPath    "/usr/share/fonts/100dpi"
    FontPath    "/usr/share/fonts/75dpi"
    FontPath    "/usr/share/fonts/cantarell"
    FontPath    "/usr/share/fonts/cyrillic"
    FontPath    "/usr/share/fonts/encodings"
    FontPath    "/usr/share/fonts/local"
    FontPath    "/usr/share/fonts/misc"
    FontPath    "/usr/share/fonts/truetype"
    FontPath    "/usr/share/fonts/TTF"
    FontPath    "/usr/share/fonts/util"
EndSection

終端機字型

虛擬終端機使用核心內建字型,預設顯示 ASCII 字元,這兩種設定都可以輕易改變。

終端機字型限定為 256 或 512 個字元。可供使用的字型存放在 /usr/share/kbd/consolefonts/ 目錄。

鍵盤映射 (Keymap) 是按鍵和電腦使用字元的對應關係表,可以在 /usr/share/kbd/keymaps/ 的子目錄下找到。

預覽和測試

提示: 一個整理過的預覽影像資料庫:Linux 終端機字型截圖

showconsolefont 指令會以表格形式顯示可用字與字元:

$ showconsolefont

setfont 工具可以暫時改變字型,讓使用者可以決定是否要採為預設值。只要指定字型名稱即可 (這些字型位於 /usr/share/kbd/consolefonts/):

$ setfont Lat2-Terminus16

您可以用 -m 選項指定使用什麼字元集:

$ setfont Lat2-Terminus16 -m 8859-2

如果對新換的字型不滿意,用以下指令可以還原至預設字型 (就算終端機顯示亂碼,這個指令依然可以執行 -- 將指令「盲打」進去即可):

$ setfont
註記: setfont 只作用於目前正在使用的終端機。其它終端機無論活躍與否都不受影響。

更改預設字型

/etc/vconsole.confFONTFONT_MAP 變數可用來改變預設字型。

若要顯示 Č, ž, đ, šŁ, ę, ą, ś 之類的字元,使用 lat2-16.psfu.gz 這個字型:

FONT=lat2-16

這代表使用 ISO/IEC 8859 字元的第二部分,大小設定為 16。您可以使用其它值更改字型大小 (如 lat2-08)。您可以在維基百科的這張表查詢 8859 規格定義的區域。如果您經常在沒有 X 伺服器的終端機上工作,建議可以使用一種 Terminus 字型。比如說 ter-216b,代表包含 latin-2 部分,大小 16,粗體字。ter-216n 是正常磅數的版本。Terminus 字型大小最大可以到 32。

現在設定適當的字型映射,若使用 lat2-16 則會是:

FONT_MAP=8859-2

若要為早期的使用者空間套用指定字型,在 /etc/mkinitcpio.conf 使用 keymap 勾子。更多資訊請參閱 Mkinitcpio#HOOKS

如果開機時字型沒有任何變化,或只變化一下就回復原樣,則有可能是因為圖形驅動啟動時字型被重設,然後終端機被切至幀緩衝 (framebuffer)。提早載入圖形驅動可以避免這個問題。若要在套用 /etc/vconsole.conf 之前將幀緩衝準備好,請參閱核心模式設定#提早啟動 KMS[1] 或其它方式。

字型軟體包

以下是收錄於官方軟體庫和 AUR 的字型軟體包列表,種類繁多,可依照需求選用。若字型有廣泛的萬國碼 (Unicode) 支援,會加註 "Unicode" 標記,詳情請參閱字型專案或相關的維基百科頁面。

一位 Github 使用者 Ternstor 用 python 腳本產生 extra, communityAUR 庫內字型的 PNG 圖像,您可以在那裡預覽以下所提到的字型。

盲文點字

國際 (非英語系) 使用者

應用程式與瀏覽器會根據 fontconfig 設定和 Unicode 文字可用的字型來選擇其顯示字型。用指令 fc-list :lang="雙字母的語言代碼" 列舉系統安裝了哪些可對應該語言的字型。例如,列舉已經安裝的阿拉伯文字型,以及支援阿拉伯字的字型:

$ fc-list :lang=ar | cut -d: -f1
/usr/share/fonts/TTF/FreeMono.ttf
/usr/share/fonts/TTF/DejaVuSansCondensed.ttf
/usr/share/fonts/truetype/custom/DroidKufi-Bold.ttf
/usr/share/fonts/TTF/DejaVuSansMono.ttf
/usr/share/fonts/TTF/FreeSerif.ttf

若要在多國語言的網站 (如維基百科、Arch Linux wiki) 正確描繪字形,安裝這些軟體包:ttf-freefont, ttf-arphic-uming, ttf-baekmuk

阿拉伯文和烏爾都文

緬甸文

中日韓越

中文
  • ttf-twAUR - 台灣 (中華民國) 教育部標準楷書、宋體字型 (AUR)
  • wqy-microhei - 無襯線形式的高品質中日韓越 (CJKV) 輪廓字型。
  • wqy-zenhei - 黑體 (無襯線) 的中文輪廓字型,附帶點陣宋體 (也支援部分日韓字元)。
  • ttf-arphic-ukai - 楷書 (帶有筆觸) Unicode 字型 (建議啟用反鋸齒)
  • ttf-arphic-uming - 明體 (印刷) Unicode 字型
  • opendesktop-fonts - 新宋字型,之前為 ttf-fireflysung
  • wqy-bitmapfont - 點陣宋體 (襯線) 中文字型
  • ttf-hannom - 中文、越南文 TrueType 字型
日文
  • otf-ipafont - Formal style Japanese Gothic (sans-serif) and Mincho (serif) fonts set; one of the highest quality open source font. Default of openSUSE-ja.
  • ttf-vlgothicAUR - Japanese Gothic fonts. Default of Debian/Fedora/Vine Linux (AUR)
  • ttf-mplusAUR - Modern Gothic style Japanese outline fonts. It includes all of Japanese Hiragana/Katakana, Basic Latin, Latin-1 Supplement, Latin Extended-A, IPA Extensions and most of Japanese Kanji, Greek, Cyrillic, Vietnamese with 7 weights (proportional) or 5 weights (monospace). (AUR)
  • ttf-ipa-monaAUR, ttf-monapoAUR - Japanese fonts to show 2channel Shift JIS art properly. (AUR)
  • ttf-sazanami - Japanese free TrueType font. This is outdated and not maintained any more, but may be defined as a fallback font on several environments.
韓文

西里爾文

Also see #Monospaced, #Sans-serif and #Serif

希臘文

Almost all Unicode fonts contain the Greek character set (polytonic included). Some additional font packages, which might not contain the complete Unicode set but utilize high quality Greek (and Latin, of course) typefaces are:

  • otf-gfsAUR - Selection of OpenType fonts from the Greek Font Society (AUR)
  • ttf-mgopenAUR - Professional TrueType fonts from Magenta (AUR)

希伯來文

  • culmusAUR - Nice collection of free Hebrew fonts (AUR)

印地文

(This one contains a "look of disapproval" that might be more to your liking than the bdf-unifont one mentioned elsewhere in this document)
  • lohit-fontsAUR - Indic TrueType fonts from Fedora Project (containing Oriya Fonts and more) (AUR)

高棉文

僧伽羅文

塔米爾文

藏文

數學

Microsoft 字型

參閱微軟字型

Apple Mac OS X 字型

  • ttf-mac-fontsAUR - Mac OS X TrueType 字型
  • ttf-macAUR - Mac OS X TrueType 字型。這個軟體包沒有內含 ttf 字型 (只有 otf 字型),使用者必須自備這些字型。

等寬

有一些建議要給各位。每個使用者所偏好的字型不同,因此要找到您心目中的理想字型,就請多加嘗試。 如果您沒有太多時間,可以閱讀 Dan Benjamin 的部落格文章:Top 10 Programming Fonts (前十名適合寫程式的字型)。

這裡有 Trevor Lowing 整理的一長串字型清單:http://www.lowing.org/fonts/

TrueType

點陣

無襯線

Script

襯線

未分類

X11 的字型採用順序

Fontconfig 會自動選擇符合目前需求的字型。這麼說好了,假設有一個包含英文和中文的視窗,如果預設字型不支援中文,就會換成有中文字支援的字型來顯示。

Fontconfig 透過 $XDG_CONFIG_HOME/fontconfig/fonts.conf,讓每個使用者都可以設定自己的偏好順序。 如果您希望在自己偏好的襯線字體後面加上一種中文字型當候補,檔案會看起來像這樣:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<alias>
   <family>serif</family>
   <prefer>
     <family>您偏好的拉丁字襯線字型名稱</family>
     <family>您的中文字型名稱e</family>
   </prefer>
 </alias>
</fontconfig>

您也可以新增無襯線和等寬字型的部分。更多資訊可參考 fontconfig 手冊。

字型別名

Linux 下有數個字型別名,實際上它們指向別的真實字型,這是為了讓所有應用程式使用的字型能夠相似。最常見的別名有:serif 襯線字型 (如 DejaVu Serif);sans-serif 無襯線字型 (如 DejaVu Sans);以及 monospace 等寬字型 (如 DejaVu Sans Mono)。不過這些別名所代表的字型可能會有變化,且通常它們不會顯示在 KDE 和其他桌面環境的字型管理工具之中。

若要查詢別名所代表的字型,執行:

$ fc-match monospace
DejaVuSansMono.ttf: "DejaVu Sans Mono" "Book"

在上面的範例中,DejaVuSansMono.ttf 是 monospace 別名所指向的字型。

小提示

從官方軟體庫安裝字型

您可以將官方軟體倉庫有提供的字型全部抓下來安裝。

所有字型
# pacman -S $(pacman -Ssq font)
所有 TrueType 字型
# pacman -S $(pacman -Ssq ttf)

應用程式專用的字型快取

Matplotlib (python-matplotlibpython2-matplotlib) 使用自己的字型快取,因此更新字型後記得移除 $HOME/.matplotlib/fontList.cache,這樣它才會再產生一次快取並找到新字型 [2]

另請參閱