字體

出自 Arch Linux 中文维基

引自維基百科:「計算機字體或電腦字體,簡稱字體,是包含有一套字形與字符的電子數據文件。」

注意: 部分字體許可協議可能會有一些法律限制。

字體格式[編輯 | 編輯原始碼]

現在使用的計算機字體絕大多數都屬於點陣輪廓數據格式。

點陣字體
用點或者像素組成的矩陣代表每種字形的每種形式和尺寸的圖像。
輪廓字體,或稱矢量字體
使用貝塞爾曲線、繪圖指令和數學公式描述每種字形,使得字符輪廓可以適應各種尺寸。

點陣格式[編輯 | 編輯原始碼]

這些格式也可以被 gzip 壓縮。可用的點陣字體請參見#點陣

輪廓格式[編輯 | 編輯原始碼]

  • Adobe 的 PostScript 字體,有多種格式,如打印機 ASCII 字體(Printer Font ASCII,PFA)和打印機二進制字體(Printer Font Binary,PFB)
  • Apple 和 Microsoft 的 TrueType(擴展名為 ttf
  • Microsoft 的 OpenType,基於 TrueType(擴展名為 otfttf

在大多數情況下都可以忽略 TrueType 和 OpenType 之間的技術差異。

其它格式[編輯 | 編輯原始碼]

排版程序 TeX 和配套的字體軟件 Metafont 使用它們自己的傳統方法渲染字體。部分用於這兩個程序的字體文件擴展名有 *pk*gfmfvf。更新的版本也支持 TrueType 和 OpenType 字體。

FontForgefontforge)是一個字體編輯程序,可以以自己基於文本的原生格式 sfdspline font database)儲存字體。

SVG 格式也有自己的字體描述方法。

安裝[編輯 | 編輯原始碼]

可以使用多種方法安裝字體。

Pacman[編輯 | 編輯原始碼]

可以使用 pacman 安裝已啟用的軟件源中的字體和字體集。

可用的字體可以通過查詢包查找(比如以 fontttf 作為關鍵字查找)。

創建字體包[編輯 | 編輯原始碼]

字體應該由 pacman 管理,這可以通過創建 Arch 包完成。這些包也可以在 AUR 中與社區分享。用於安裝字體的包都非常相似;請參見字體打包指南

可以用 fc-query 查看字體的字體族,例如:fc-query -f '%{family[0]}\n' /文件/路徑FcPatternFormat(3) 中描述了輸出的格式。

手動安裝[編輯 | 編輯原始碼]

要安裝不在源中的字體,推薦的方法是#創建字體包。這使得 pacman 在以後能夠更新或者移除它們。

或者,也可以手動安裝字體:

  • 要為單個用户安裝,則安裝到 ~/.local/share/fonts/
    • 多數時候這就足夠了,除非以其他用户的身份運行圖形程序。
    • 之前曾使用過 ~/.fonts/,但現在已被棄用。
  • 要為系統(所有用户)安裝,則安裝到 /usr/local/share/fonts/
    • 可能需要先創建該目錄:mkdir -p /usr/local/share/fonts
    • /usr/share/fonts/ 由包管理器管理,請勿手動修改。

是否要創建子目錄由用户決定,各發行版也有不同。為清晰起見,可將每個字體族放在單獨的目錄裡。Fontconfig 將遞歸搜索默認路徑,確保可以發現子目錄下的文件。

以下是一個目錄結構示例:

 /usr/local/share/fonts/
 ├── otf
 │   └── SourceCodeVariable
 │       ├── SourceCodeVariable-Italic.otf
 │       └── SourceCodeVariable-Roman.otf
 └── ttf
     ├── AnonymousPro
     │   ├── Anonymous-Pro-B.ttf
     │   ├── Anonymous-Pro-I.ttf
     │   └── Anonymous-Pro.ttf
     └── CascadiaCode
         ├── CascadiaCode-Bold.ttf
         ├── CascadiaCode-Light.ttf
         └── CascadiaCode-Regular.ttf

請確保所有用户都有讀取字體文件的權限,即至少將文件 chmod444,目錄為 555

要讓 Xserver 直接載入字體(而不是使用某些字體服務),就需要將新增字體的目錄加入到 FontPath 中。它位於 Xorg 配置文件(例如 /etc/X11/xorg.conf/etc/xorg.conf) 中。更多詳細內容請參見#較舊的應用程式

最後,更新 Fontconfig 的緩存(通常不需要,因為使用 Fontconfig 庫的軟件會這樣做):

$ fc-cache

較舊的應用程式[編輯 | 編輯原始碼]

對於不支持 Fontconfig 的舊應用程式(例如 GTK 1.x 應用程式和 xfontsel),需要在字體目錄中創建索引:

$ mkfontscale
$ mkfontdir

或在一條命令中包含多個目錄:

$ for dir in /字体/目录1/ /字体/目录2/; 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 中的一節內容。請根據實際需要添加或刪除路徑。

 # 讓 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/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"

字體包[編輯 | 編輯原始碼]

以下是一個有選擇的列表,其中包括 AUR 以及官方存儲庫中的許多字體包。標記為「Unicode」的字體具有廣泛的 Unicode 支持。

提示:Archfonts 是一個可用於生成官方存儲庫和 AUR 中所有 TTF 字體的概述的 Python 腳本。

點陣[編輯 | 編輯原始碼]

注意: pango 1.44 放棄支持 FreeType,轉而支持 HarfBuzz,所以不再支持傳統 BDF/PCF 點陣字體,因此一些應用程式(例如 gnome-terminal)將不再能夠使用此類字體,結果顯示方塊而不是字形。參見 FS#63297Pango issue #386HarfBuzz issue #1897

拉丁文字[編輯 | 編輯原始碼]

字體族[編輯 | 編輯原始碼]

提供基本字體集的包:

Packages not providing a base font set:

舊版 Microsoft 字體包:

  • Microsoft 字體 (ttf-ms-fontsAUR) – Andalé Mono, Courier New, Arial, Arial Black, Comic Sans, Impact, Lucida Sans, Microsoft Sans Serif, Trebuchet, Verdana, Georgia, Times New Roman
  • Vista 字體 (ttf-vista-fontsAUR) – Consolas, Calibri, Candara, Corbel, Cambria, Constantia

等寬[編輯 | 編輯原始碼]

支持 編程連字的字體標有 ⟶ 符號。更多等寬字體參見#點陣#字體族

相關網站:

無襯線[編輯 | 編輯原始碼]

襯線[編輯 | 編輯原始碼]

非拉丁文字[編輯 | 編輯原始碼]

古代文字[編輯 | 編輯原始碼]

  • ttf-ancient-fontsAUR —— 包含 Aegean、Egyptian、Cuneiform、Anatolian、Maya 和 Analecta 文字的 Unicode 符號的字體

阿拉伯文[編輯 | 編輯原始碼]

  • ttf-amiriAUR —— 一個典型的阿拉伯文謄抄體 (Naskh) 字體,一開始由 Amiria Press 採用。其拉丁字符基於 Crimson (otf-crimson) [1] [2]
  • ttf-arabeyes-fontsAUR —— 自由的阿拉伯文字體集合
  • ttf-qurancomplex-fontsAUR —— 位於麥地那的 King Fahd Glorious Quran Printing Complex 製作的字體
  • ttf-sil-lateefAUR —— 來自 SIL 的 Unicode 阿拉伯文字體
  • ttf-sil-scheherazadeAUR —— 來自 SIL 的 Unicode 阿拉伯文字體(傳統阿拉伯文字體的替代品)

孟加拉文[編輯 | 編輯原始碼]

詳見 Localization/Bengali#Fonts

盲文[編輯 | 編輯原始碼]

  • ttf-ubrailleAUR —— 包含 Unicode 盲文符號的字體。

中日韓越文字[編輯 | 編輯原始碼]

泛 CJK[編輯 | 編輯原始碼]
提示:中文用户在安裝思源cjk全集或者noto-cjk全集後,部分文字顯示為日文異形字體,可參看Arch Linux Localization#修正簡體中文顯示為異體(日文)字形 進行解決。
中文[編輯 | 編輯原始碼]

參見 Localization/Chinese#Fonts

日文[編輯 | 編輯原始碼]

參見 Localization/Japanese#Fonts

韓文[編輯 | 編輯原始碼]

參見 Localization/Korean#Fonts

越南語[編輯 | 編輯原始碼]
  • ttf-hannom – 用於喃字的越南語 TrueType 字體

西里爾文字[編輯 | 編輯原始碼]

另請參閱#拉丁文字

  • ttf-paratypeAUR – Font family by ParaType: sans, serif, mono, extended cyrillic and latin, OFL 許可證
  • otf-russkopisAUR – A free OpenType cursive font for Cyrillic script

希臘文字[編輯 | 編輯原始碼]

幾乎所有 Unicode 字體都包含希臘代碼集 (也包含多調變音符號)。某些額外字體包雖然不包含完整的 Unicode 集,但擁有高質量的希臘字字形 (也包含拉丁字):

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

希伯來文字[編輯 | 編輯原始碼]

  • opensiddur-hebrew-fontsAUR – Large collection of Open-source licensed Hebrew fonts. There are also few Latin, Greek, Cyrillic, Arabic, and Amharic.
  • culmusAUR —— 不錯的自由的希伯來文字體集合。
  • alefbetAUR – 2 Hebrew fonts (at the moment): the commonly used "David Libre", and the handwriting font "Gveret Levin".
  • ttf-ms-fontsAUR —— 包含 Arial 和其他字體。

印地文字[編輯 | 編輯原始碼]

另請參閱 Localization/Indic#Fonts

高棉文字[編輯 | 編輯原始碼]

蒙古語和通古斯語[編輯 | 編輯原始碼]

  • ttf-abkaiAUR – Fonts for Sibe, Manchu and Daur scripts (incomplete, currently in development)

波斯文字[編輯 | 編輯原始碼]

壯侗語系[編輯 | 編輯原始碼]

  • fonts-tlwgAUR – Collection of scalable Thai fonts
  • ttf-laoAUR – Lao TTF font (Phetsarath_OT)

藏緬語族[編輯 | 編輯原始碼]

Emoji 和符號[編輯 | 編輯原始碼]

Unicode 標準的一部分用於稱為「emoji」的象形字符。

Emoji 字體有不同的格式:CBDT/CBLC(Google)、SBIX(Apple)、COLR/CPAL(Microsoft)和 SVG(Mozilla/Adobe)。

只要安裝了一種支持 Emoji 的字體,它就應當開箱即用。根據標準,Emoji 字體的回退需要額外的代碼來處理。

有關 Emoji 的發現和輸入,參見 應用程式列表/工具#文字輸入

軟件 CBDT/CBLC SBIX COLR/CPAL SVG Emoji font fallback
Freetype
Pango Freetype
WebKitGTK Freetype
Qt Freetype [3] [4] [5]
Chromium Freetype
Firefox Freetype ,參閱 Firefox#字體問題以獲得解決方案。
注意: Qt 只能同時使用字體列表中的前 255 個[6]。請確保你的首選後備字體中有 Emoji 字體。

CBDT/CBLC:

SVG:

僅輪廓字體:

  • ttf-symbolaAUR —— 提供許多 Unicode 符號,包括 Emoji。

顏文字,有時被稱為「日式表情符號」,由來自各種字符集的字符組成,包括 CJK 和印度字符。下面的一組包涵蓋了大部分現有顏文字中所使用的字符:gnu-free-fontsttf-arphic-umingttf-indic-otf

數學[編輯 | 編輯原始碼]

此外,texlive-coretexlive-fontsextra 中包含許多數學字體,例如 Latin Modern Math 和 STIX 字體。有關配置參見 TeX Live#Making fonts available to Fontconfig

其他作業系統字體[編輯 | 編輯原始碼]

後備字體順序[編輯 | 編輯原始碼]

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>
提示:
  • 如果系統的 locale 是中文,請將 LC_LANG 設置為 und,否則中英文都會使用中文字體渲染。
  • 修改配置後可以用 fc-match -a monospace | head 檢查後備字體設置是否正確。

無襯線和等寬字體也可以增加一樣的設置,更多信息請參考 fontconfig 手冊。

另請參閱 字體配置#設置默認和後備字體

字體別名[編輯 | 編輯原始碼]

有幾種字體別名實際上代表着別的字體,以讓應用程式可以使用類似的字體。最常見的別名是:serif 代表襯線字體(如 DejaVu Serif);sans-serif 代表無襯線字體(如 DejaVu Sans);以及 monospace 代表等寬字體(如 DejaVu Sans Mono)。然而,這些別名所代表的字體有可能會變化,但 KDE 和其他桌面環境的字體管理工具通常不會顯示對應關係。

如果想通過別名反向查找是展現了哪種字體,請運行:

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

在這種情況下 monospace 別名展現的是 DejaVuSansMono.ttf 字體。

提示與技巧[編輯 | 編輯原始碼]

列出所有已安裝的字體[編輯 | 編輯原始碼]

可以使用以下命令列出系統上所有已安裝且可用的 Fontconfig 字體。

$ fc-list

列出特定語言的已安裝字體[編輯 | 編輯原始碼]

應用程式和瀏覽器根據 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

列出特定 Unicode 字符的已安裝字體[編輯 | 編輯原始碼]

要搜索支持特定 Unicode 碼點的等寬字體:

$ fc-match -s monospace:charset=1F4A9

Set terminal font on-the-fly[編輯 | 編輯原始碼]

For terminal emulators that use X resources, e.g. xterm or rxvt-unicode, fonts can be set by using escape sequences. Specifically, echo -e "\033]710;$font\007" to change the normal font (*font in ~/.Xresources), and replace 710 with 711, 712, and 713 to change the *boldFont, *italicFont, and *boldItalicFont, respectively.

$font uses the same syntax as in ~/.Xresources and can be anything the terminal emulator will support. (Example: xft:dejavu sans mono:size=9)

應用程式專用的字體緩存[編輯 | 編輯原始碼]

Matplotlib (python-matplotlib) 使用自己的字體緩存,因此更新字體後記得刪除 $HOME/.matplotlib/fontList.cache$HOME/.cache/matplotlib/fontList.cache, $HOME/.sage/matplotlib-1.2.1/fontList.cache 等文件,這樣它才會重新生成緩存並找到新字體 [8]

終端中的雙向文本[編輯 | 編輯原始碼]

要在終端中正確的顯示阿拉伯語和希伯來語,請運行 BiCon(bicon-gitAUR)。

參見[編輯 | 編輯原始碼]