Fonts (正體中文)

From ArchWiki
Revision as of 07:30, 25 January 2014 by Plesry (talk | contribs)
Jump to: navigation, search

zh-CN:Fonts

Tango-preferences-desktop-locale.pngThis article or section needs to be translated.Tango-preferences-desktop-locale.png

Notes: please use the first argument of the template to provide more detailed indications. (Discuss in Talk:Fonts (正體中文)#)

摘自維基百科

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

Fonts and font collections in the enabled repositories can be installed using pacman. Available fonts may be found by using:

$ pacman -Ss font

Or to search for ttf fonts only:

$ pacman -Ss ttf

Some fonts like terminus-font are installed in /usr/share/fonts/local, which is not added to the font path by default. By adding the following lines to ~/.xinitrc, the fonts can be used in X11:

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

In case the first command causes the following error

$ 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

you'll have to run

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

建立軟體包

You should give pacman the ability to manage your fonts, which is done by creating an Arch package. These can also be shared with the community in the AUR. Here is an example of how to create a basic package. To learn more about building packages, read 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/"
}

This PKGBUILD assumes the fonts are TrueType. An install file (ttf-fontname.install) will also need to be created to update the font cache:

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
}

For a more convenient package creation from ttf-fonts you can also use makefontpkgAUR from the AUR.

手動安裝

The recommended way of adding fonts that are not in the repositories to your system is described in #Creating a package. This gives pacman the ability to remove or update them at a later time. Fonts can alternately be installed manually as well.

To install fonts system-wide (available for all users), move the folder to the /usr/share/fonts/ directory. To install fonts for only a single user, use ~/.fonts/ instead.

For Xserver to load fonts directly (as opposed to the use of a font server) the directory for your newly added font must be added with a FontPath entry. This entry is located in the Files section of your Xorg configuration file (e.g. /etc/X11/xorg.conf or /etc/xorg.conf). See #Fonts with X.Org for more detail.

Then update the fontconfig font cache:

$ fc-cache -vf

手動安裝:進階方式

Manual installation and maintenance of your font resources may be especially useful if your collection is more specialized, e.g. if you use commercial fonts, if you use fonts in different formats, if you often install and remove font files, or if you just feel you need more control and better access than offered by the package manager. There are numerous benefits to such an approach:

  • You can avoid installation of multiple copies of the same family in different versions and formats (one of the most common reasons for rendering issues).
  • You can use multiple and non-standard physical sources of font files (e.g. an additional hard drive, a separate partition).
  • You can avoid relying on huge and cryptic local font sources which possibly contain 5 families you need and 55 you don't need (TeX Live & 09-texlive-fonts.conf, random font collections from the AUR, etc).
  • You can avoid rendering issues because your fontconfig settings were tuned to a different format but the one installed in your system.
  • You can quickly verify which families in which format(s) are present in the system and available for applications by visually inspecting the content of the main font directory (as a result, you don't need sophisticated and heavy-on-resources font management applications: gtk2fontsel and basic CLI tools like fc-query from fontconfig package will do the job even better and faster).
  • When you install or upgrade a single font, the same version will be available for all applications, including LaTeX related software.
  • If necessary, you can quickly enable / disable a particular family because you know where exactly it can be found (useful for debugging).
  • You don't need to worry about redundant /etc/fonts/conf.avail/nn-foo.conf fontconfig files, potentially conflicting with your rendering settings (especially when you are using a customized font configuration and patched libraries).
  • In the long run, you save time needed to resolve issues and eliminate conflicts caused by careless use of the package manager.

In practical terms, there are at least a few ways to achieve this, which, if necessary, can be adopted by any package manager. The one described below has proven to be very efficient and secure even with large font collections.

  • We are going to separate font source locations (e.g. /usr/share/fonts.avail: this is where our fonts will be stored) from a directory containing symbolic links to the families in use (/usr/share/fonts).
  • Each family is going to be located in a separate, clearly named subdirectory. The naming convention should be consistent and unambiguous, for instance:
<ttf|otf|t1>-<optional_global_group_or_foundry_name>-<font_family_name>

This way the content of the source directory will look like this:

$ ls /usr/share/fonts.avail

/usr/share/fonts.avail/otf-heuristica
/usr/share/fonts.avail/ttf-liberation
/usr/share/fonts.avail/ttf-ms-arial
...
  • We are not going to touch TeX Live font directories to avoid issues with LaTeX software. Instead, since we can use multiple locations, we will create symlinks in /usr/share/fonts, giving applications access to particular families:
# 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
...

Finally, you may want to run the usual:

# fc-cache && mkfontscale && mkfontdir

A similar approach can be found in TeX Live Wiki article, but it's way simpler and describes a per-user scenario rather than a global implementation.

舊版應用程式

With older applications that do not support fontconfig (e.g. GTK+ 1.x applications, and xfontsel) the index will need to be created in the font directory:

$ mkfontscale
$ mkfontdir

Or to include more than one folder with one command:

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

At times the X server may fail to load the fonts directory and you will need to rescan all the fonts.dir files:

# xset +fp /usr/share/fonts/misc # Inform the X server of new directories
# xset fp rehash                # Forces a new rescan

To check that the font(s) is included:

$ xlsfonts | grep fontname

Pango 警告訊息

When Pango is in use on your system it will read from fontconfig to sort out where to source fonts.

(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'

If you are seeing errors similar to this and/or seeing blocks instead of characters in your application then you need to add fonts and update the font cache. This example uses the ttf-liberation fonts to illustrate the solution and runs as root to enable them system-wide.

# pacman -S ttf-liberation
  -- output abbreviated, assumes installation succeeded -- 

# 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

You can test for a default font being set like so:

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

Fonts 與 X.Org

In order for Xorg to find and use your newly installed fonts, you must add the font paths to /etc/X11/xorg.conf (another X.Org configuration file may work too).

Here is an example of the section that must be added to /etc/X11/xorg.conf. Add or remove paths based on your particular font requirements.

# 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/local"
    FontPath    "/usr/share/fonts/misc"
    FontPath    "/usr/share/fonts/truetype"
    FontPath    "/usr/share/fonts/TTF"
    FontPath    "/usr/share/fonts/util"
EndSection

終端機字型

The virtual console uses the kernel built-in font and ASCII character set by default, but both can be easily changed.

A console font is limited to either 256 or 512 characters. Available fonts are saved in /usr/share/kbd/consolefonts/ directory.

Keymaps, the connection between the key pressed and the character used by the computer, are found in the subdirectories of /usr/share/kbd/keymaps/.

預覽和測試

Tip: An organized library of images for previewing is available: Linux console fonts screenshots.

The available glyphs or letters in the font can also be viewed as a table with using showconsolefont:

$ showconsolefont

The setfont utility may be used to temporarily change the font, so that the user can consider its use as the default. Just pass the name of the font (they are located in /usr/share/kbd/consolefonts/):

$ setfont Lat2-Terminus16

Optionally, you can specify character set to be used using the -m option:

$ setfont Lat2-Terminus16 -m 8859-2

If the newly changed font is not suitable, a return to the default font with the following command (even if the console display is totally unreadable, this command will still work - just type the command "blindly"):

$ setfont
Note: setfont only works on the console currently being used. Any other consoles, active or inactive, remain unaffected.

更改預設字型

The FONT and FONT_MAP variables in /etc/vconsole.conf are used to change the default font.

For displaying characters such as Č, ž, đ, š or Ł, ę, ą, ś using the font lat2-16.psfu.gz:

FONT=lat2-16

It means that second part of ISO/IEC 8859 characters are used with size 16. You can change font size using other values (e.g. lat2-08). For the regions determined by 8859 specification, look at the Wikipedia table. You can use a Terminus font which is recommended if you work a lot in console without X server. ter-216b for example is latin-2 part, size 16, bold. ter-216n is the same but normal weight. Terminus fonts have sizes up to 32.

Now, set the proper font mapping, for lat2-16 it will be:

FONT_MAP=8859-2

To use the specified font in early userspace, use the keymap hook in /etc/mkinitcpio.conf. See Mkinitcpio#HOOKS for more information.

If the fonts seems to not change on boot, or change only temporarily, it is most likely that they got reset when graphics driver was initialized and console was switched to framebuffer. To avoid this, load your graphics driver earlier. See for example Kernel Mode Setting#Early KMS start, [1] or other ways to setup your framebuffer before /etc/vconsole.conf is applied.

字型軟體包

This is a selective list that includes many font packages from the AUR along with those in the official repositories. Fonts are tagged "Unicode" if they have wide Unicode support, see the project or Wikipedia pages for detail.

Github user Ternstor has created a python script that generates PNG images of all fonts in extra, community and the AUR so you can preview all the fonts below.

盲文點字

非英語系使用者

Applications and browsers select and display fonts depending upon fontconfig preferences and available font glyph for Unicode text. To list installed fonts for a particular language, issue a command fc-list :lang="two letter language code". For instance, to list installed Arabic fonts or fonts supporting Arabic glyph:

$ 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

To properly render fonts for multilingual websites like Wikipedia or this Arch Linux wiki, install these packages: ttf-freefont, ttf-arphic-uming, ttf-baekmuk

Arabic & Urdu

Birman

中日韓越

(Mainly) 中文
  • ttf-twAUR - Kai and Song traditional Chinese font from the Ministry of Education of Taiwan (AUR).
  • wqy-microhei - A Sans-Serif style high quality CJKV outline font.
  • wqy-zenhei - Hei Ti Style (sans-serif) Chinese Outline font embedded with bitmapped Song Ti (also supporting Japanese (partial) and Korean characters).
  • ttf-arphic-ukai - Kaiti (brush stroke) Unicode font (enabling anti-aliasing is suggested)
  • ttf-arphic-uming - Mingti (printed) Unicode font
  • opendesktop-fonts - New Sung font, previously is ttf-fireflysung package
  • wqy-bitmapfont - Bitmapped Song Ti (serif) Chinese font
  • ttf-hannom - Chinese and Vietnamese TrueType font

= 日文

  • 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.
韓文

Cyrillic

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)

Indic

(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)

Khmer

Sinhala

塔米爾文

Tibetan

數學

Microsoft 字型

See MS Fonts.

Apple Mac OS X 字型

  • ttf-mac-fontsAUR - Mac OS X TrueType fonts
  • ttf-macAUR - Mac OS X TrueType fonts (This package does not come with the ttf fonts (only the otf fonts), they have to be provided on their own.

等寬

Here are some suggestions. Every user has their own favorite, so experiment to find yours. If you are in a hurry, you read Dan Benjamin's blog post: Top 10 Programming Fonts.

Here is a long list of fonts by Trevor Lowing: http://www.lowing.org/fonts/.

TrueType

點陣

無襯線

Script

襯線

未分類

Fallback font order with X11

Fontconfig automatically chooses a font that matches the current requirement. That is to say, if one is looking at a window containing English and Chinese for example, it will switch to another font for the Chinese text if the default one does not support it.

Fontconfig lets every user configure the order they want via $XDG_CONFIG_HOME/fontconfig/fonts.conf. If you want a particular Chinese font to be selected after your favorite Serif font, your file would look like this:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<alias>
   <family>serif</family>
   <prefer>
     <family>Your favorite Latin Serif font name</family>
     <family>Your Chinese font name</family>
   </prefer>
 </alias>
</fontconfig>

You can add a section for Sans-serif and monospace as well. For more informations, have a look at the fontconfig manual.

字型別名

In Linux there are several font aliases which represent other fonts in order that applications may use similar fonts. The most common aliases are: serif for a font of the serif type (e.g. DejaVu Serif); sans-serif for a font of the sans-serif type (e.g. DejaVu Sans); and monospace for a monospaced font (e.g. DejaVu Sans Mono). However, the fonts which these aliases represent may vary and the relationship is often not shown in font management tools such as those found in KDE and other desktop environments.

To reverse an alias and find which font it is representing, run:

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

In this case DejaVuSansMono.ttf is the font represented by the monospace alias.

小提示

從官方軟體庫安裝字型

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

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

應用程式專用的字型快取

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

另請參閱