Fonts (正體中文)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
翻譯狀態:本文章是 Fonts 的翻譯版本。最近一次的翻譯時間:2014-01-25。點擊本連結查看英文頁面之後的變更。

Tango-preferences-desktop-locale.png本條目或段落需要進行翻譯Tango-preferences-desktop-locale.png

註記: 在[#字型軟體包]之後都尚未sync到2016-06-27 (討論)

摘自維基百科

電腦字型 (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

建立軟體包

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

字型檔案的家族名稱可以使用 fc-query 指令取得。例如: fc-query -f '%{family[0]}\n' /path/to/file。使用的格式請參考 FcPatternFormat(3) 手冊之說明。

PKGBUILD
pkgname=fontname-fonts
pkgver=1.0
pkgrel=1
pkgdesc="一些關於此字型之描述"
arch=('any')
depends=('fontconfig' 'xorg-font-utils')
source=("http://someurl.org/$pkgname.tar.bz2")
install=$pkgname.install

package() {
  install -Dm644 $pkgname/font.otf "$pkgdir"/usr/share/fonts/family_name/font.otf
  install -Dm644 $pkgname/font_bold.otf "$pkgdir"/usr/share/fonts/family_name/font_bold.otf
}
fontname-fonts.install
post_install() {
  fc-cache -s
}

post_upgrade() {
  post_install
}

post_remove() {
  post_install
}

手動安裝

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

若要將字型安裝到系統 (讓所有使用者都能使用),將字型資料夾移至 /usr/share/fonts/ 目錄。為了使得這些字型檔案能夠被所有使用者讀取,使用 chmod 指令設定正確的權限:檔案至少必須是 0444,而目錄則是 0555。若要安裝給單一使用者,則將自行檔案安裝於 ~/.local/share/fonts 目錄。(注意:~/.fonts/ 的用法已經不被支援了)

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

接著更新 fontconfig 字型快取:

$ fc-cache -vf

舊版應用程式

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

$ mkfontscale
$ mkfontdir

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

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

又或者,若字型被安裝在不同的子資料夾如 /usr/share/fonts

$ for dir in * ; do if [  -d  "$dir"  ]; then cd "$dir";xset +fp "$PWD" ;mkfontscale; mkfontdir;cd .. ;fi; done && xset fp rehash

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

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

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

$ xlsfonts | grep fontname
註記: 許多套件在安裝時會自動設定Xorg以使用字型,若是這種情況,則不需要執行本步驟。

這也可以在 /etc/X11/xorg.conf 或是 /etc/X11/xorg.conf.d 設定檔中全域設置。

以下是一個必須要加到 /etc/X11/xorg.conf 檔案中的例子。請依照特定字型的需求自行增減設定中的路徑。

# Let X.Org know about the custom font directories
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/misc"
    FontPath    "/usr/share/fonts/truetype"
    FontPath    "/usr/share/fonts/TTF"
    FontPath    "/usr/share/fonts/util"
EndSection

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 執行以套用至全系統。

# fc-cache
/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"

終端機字型

註記: 本節是關於 Linux console。對於提供更多功能的其他的終端機(支援全 Unicode 字型、現代的顯示卡等等),請參考 KMSCON 或之類的相關專案。

預設的條件下 虛擬終端機 使用核心內建的字型與 CP437 [1]字元表, 但這是很容易修改的。

Linux 虛擬終端機 預設使用 UTF-8 編碼,但由於使用了標準的 VGA 相容偵緩衝,一個虛擬終端機被限制只能使用標準的 256 或 512 個字符。若一個字型超過 256 個字符,則色彩就會從 16 種降級到 8 種。為了指配正確的符號以顯示給訂的 Unicode,便需要一種特殊的轉換表,unimap。現在大多數虛擬終端機字型都有內建這個功能,傳統上則需要分開載入。

kbd 套件提供了改變虛擬終端機字型及字型對應的工具。可用的字型被存放在 /usr/share/kbd/consolefonts/ 目錄中,這些副檔名為 .psfu or .psfu.gz 的檔案具有內建的 Unicode 轉換表。

Keymaps, the connection between the key pressed and the character used by the computer, are found in the subdirectories of /usr/share/kbd/keymaps/, see Keyboard configuration in console for details.

鍵盤映射 (Keymap) 是按鍵和電腦使用字元的對應關係表,可以在 /usr/share/kbd/keymaps/ 的子目錄下找到。詳細資訊請參照 Keyboard configuration in console

註記: 替換這些字型可能造成某些問題,因為有些程式預期標準的 VGA 風格字型,如某些畫線的圖形軟體。

預覽和測試

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

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

$ showconsolefont

setfont 工具可以暫時改變字型,讓使用者認為那是固定的字型。只要指定字型名稱即可 (這些字型位於 /usr/share/kbd/consolefonts/),例如:

$ setfont lat2-16 -m 8859-2

需注意字型名稱的大小寫呈現,不可混淆。如果對新換的字型不滿意,用以下指令可以還原至預設字型 (就算終端機顯示亂碼,這個指令依然可以執行,將指令「盲打」進去即可):

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

持續性的設定

/etc/vconsole.confFONT 用來在開機時設定字型,對於所有的虛擬終端機都是固定的,詳情請參見 vconsole.conf(5) 的說明。

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

/etc/vconsole.conf
...
 FONT=lat2-16
 FONT_MAP=8859-2

這代表使用 ISO/IEC 8859 字元的第二部分,大小設定為 16。您可以使用其它值更改字型大小 (如 lat2-08)。您可以在維基百科的這張表查詢 8859 規格定義的區域。

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

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

字型軟體包

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

一位 Github 使用者 Ternstor 用 python 腳本產生含有所有官方及 AUR 套件庫字型的 PNG 圖像的 HTML 文件,請參照 [3]

古文字

盲文點字

  • ttf-ubrailleAUR - 包含 Unicode 盲文點字符號的字型

表情符號(顏文字)

設計用來表示表情的圖形化符號集合。

  • emojione-color-fontAUR - a complete, independent, open-source emoji set focused on design correctness
  • twemoji-color-fontAUR - Twitter's open-sourced emoji glyphs
  • ttf-symbola - provides many Unicode symbols, including emoji, in outline style
  • noto-fonts-emoji - Google's own emoji font, like on Android or Google Hangouts

部份新增的符號在 Noto 字型中的顯示不佳。

國際 (非英語系) 使用者

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

$ fc-list -f '%{file}\n' :lang=ar
/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-amiriAUR - A classical Arabic typeface in Naskh style poineered by Amiria Press
  • ttf-qurancomplex-fontsAUR - Fonts by King Fahd Glorious Quran Printing Complex in al-Madinah al-Munawwarah
  • ttf-qurancomplex-fontsAUR - 位於麥地那的 King Fahd Glorious Quran Printing Complex 製作的字型
  • ttf-arabeyes-fontsAUR - Collection of free Arabic fonts
  • ttf-sil-lateefAUR - 來自 SIL 的 Unicode 阿拉伯文字型
  • ttf-sil-scheherazadeAUR - 來自 SIL 的 Unicode 阿拉伯文字型
  • ttf-urdufontsAUR - Urdu fonts (Jameel Noori Nastaleeq (+kasheeda), Nafees Web Naskh, PDMS Saleem Quran Font) and font configuration to set Jameel Noori Nastaleeq as default font for Urdu

緬甸文

中日韓越文字

Pan-CJK
  • 思源字體:Adobe與Google合資開發的,囊括簡體中文、繁體中文、日文、韓文字形和來自 Source Sans 字體家族的拉丁文、希臘文和西里爾文字形的 OpenType 字體。
  • 文泉驛字體
  • ttf-i.bmingAUR - 舊字體風格的中日韓存先字體
中文字
  • 文泉驛字體
    • wqy-zenhei - 文泉驛正黑體,黑體 (無襯線) 的中文輪廓字體,附帶文泉驛點陣宋體 (也支持部分日韓字符)。
    • wqy-bitmapfont - 文泉驛點陣宋體 (襯線) 中文字體。
日文字
  • otf-ipafont - 正規的日文哥特體 (無襯線) 與明朝體 (襯線) 字形集;其中一項高品質的開放原始碼字形。openSUSE-ja 的預設字形。
  • ttf-vlgothicAUR - 日文哥特體字形。Debian/Fedora/Vine Linux 的預設字型
  • ttf-mplusAUR - 現代哥特體的日文輪廓字型。包含所有日文平假名/片假名、Basic Latin、Latin-1 Supplement、Latin Extended-A、IPA Extensions。另外還有大部分日文漢字、希臘字母、西里爾字與越南文字,可以 7 磅 (等比例) 或 5 磅 (等寬) 字重顯示。
  • ttf-monapoAUR - 日文字型,可正確顯示 2ch 的 Shift JIS 藝術創作
  • ttf-sazanami - 自由的日文 TrueType 字型。已經過期無人維護,但在某些環境下可當作備案字型使用。
韓文字

希臘文字

幾乎所有 Unicode 字型都包含希臘字元集 (也包含多調變音符號)。某些額外的字型軟體包未包含完整的 Unicode 集,但擁有高品質的希臘字字形 (當然包含拉丁字):

  • otf-gfsAUR - 由 Greek Font Society 選用的 OpenType 字型
  • ttf-mgopenAUR - 來自 Magenta 的專業 TrueType 字型

希伯來文字

  • culmusAUR - 自由的希伯來文字型集合

印地文字

(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 - 來自 Fedora 專案的印地文 TrueType 字型 (包含 Oriya 字型以及更多)

高棉文字

僧伽羅文字

  • ttf-lklugAUR - 僧伽羅文 (Sinhala) Unicode 字型

塔米爾文字

  • ttf-tamilAUR - 塔米爾文 (Tamil) Unicode 字型

藏文字

數學字型

Microsoft 字型

參閱微軟字型

Apple Mac OS X 字型

等寬字型

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

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

TrueType 字型

點陣字型

無襯線字型

手寫體

襯線字型

未分類字型

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>您的中文字型名稱</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-matplotlibAUR) 使用自己的字型快取,因此更新字型後記得移除 $HOME/.matplotlib/fontList.cache,這樣它才會再產生一次快取並找到新字型 [4][失效連結 2021-11-10 ⓘ]

另請參閱