Fonts (简体中文)

From ArchWiki
Revision as of 14:05, 17 September 2012 by Zhw2101024 (Talk | contribs) (字体类型 :)

Jump to: navigation, search

Tango-preferences-desktop-locale.png本页面需要更新翻译,内容可能已经与英文脱节。要贡献翻译,请访问简体中文翻译组Tango-preferences-desktop-locale.png

附注: please use the first argument of the template to provide more detailed indications.
摘要 help replacing me
包含了在 Arch Linux 中安装和使用字体的信息
合法性
某些字体包可能会遇到一些法律限制。
相关页面
Font Configuration (简体中文)
Java Fonts - Sun JRE
MS Fonts

字体类型

Most computer fonts used today are in either bitmap or outline data formats.

Bitmap fonts
Consist of a matrix of dots or pixels representing the image of each glyph in each face and size.
Outline or vector fonts
Use Bézier curves, drawing instructions and mathematical formulae to describe each glyph, which make the character outlines scalable to any size.

Common extensions

  • bdf and bdf.gz – bitmap fonts, bitmap distribution format and gzip compressed bdf
  • pcf and pcf.gz – bitmaps, portable compiled font and gzip compressed pcf
  • psf, psfu, psf.gz and psfu.gz – bitmaps, PC screen font, PC screen font Unicode and the gzipped versions (not compatible with X.Org)
  • pfa and pfb – outline fonts, PostScript font ASCII and PostScript font binary. PostScript fonts carry built-in printer instructions.
  • ttf – outline, TrueType font. Originally designed as a replacement for the PostScript fonts.
  • otf – outline, OpenType font. TrueType with PostScript typographic instructions.

For most purposes, the technical differences between TrueType and OpenType can be ignored, some fonts with a ttf extension are actually OpenType fonts.

Other formats

The typesetting application, TeX, and its companion font software, Metafont, render characters using their own methods. Some of the file extensions used for fonts by these two programs are *pk, *gf, mf and vf.

FontForge, a font editing application, can store fonts in its native text-based format, sfd, spline font database.

The SVG format also has its own font description method.

前言 :

Arch Linux 是一个定制性很强的发行版,其设计的哲学决定了Arch Linux 不太可能像SUSE、Fedora、Mandriva等发行版一样预设了一套完善的字体配置,Arch 的设计哲学更像Gentoo Linux。Arch Linux需要用户进行一定的定制,用户在定制、配置过程中能学到更多的知识,这也是Arch Linux的设计哲学之一。

字体相关库的简介

1 . LibXft

libXft库是为了给X应用程序提供一个能访问FreeType字体光栅化引擎和X渲染扩展的、便于使用的接口,鉴于FreeType没有提供配置和定制 字体的功能,Xft也担负了这一任务。Xft提供了新的字体命名约定、复杂而精密的字体匹配和选择机制,并对相关功能进行充分的抽象,从而使得一般应用程 序既能够从使用X渲染扩展的文本输出获得益处,又能在不支持这一扩展的X服务器上正常工作。

libXft 是画字函数库, 它使用 Fontconfig match 到了所要的字型之后, 来决定该如何画这些字。libXft 会看情况而决定要不要使用 core protocol 或 XRender 来画字。libXft 主要作GTK 2 (GTK < 2.8.0)程序,QT 程序的画字函数库。

2 .Cairo

一个支持多种输出的向量图形库,也就是说,cairo是种画图的工具库,他可以向多种设备上画图.可以输出到pdf,ps,xlib,XCB,win32,svg。基于GTK ( = > 2.8.0)的程序用cairo 画字而不再使用libXft 。

3 .Fontconfig

Fontconfig 包含两个基本的模块,即读取XML文件并建立内部配置的配置模块和接受请求的字体样板并返回最接近所需字体的匹配模块。

4 .Freetype

Freetype库是一个完全免费 ( 开源 ) 的、高质量的且可移植的字体 引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT,X11 PCF 等。支持单色位图 (homochromous bitmap) 、反走样位图( anti-alias bitmap )的渲染。 Freetype 是高度模块化设计的程序库。Freetype 提供 libXft/cairo 如何画字的信息,包括处理 anti-aliasing 或 hinting. 因此 freetype 的改变会影响到 libXft/cairo 画出来的字,而 Fontconfig 的改变会影响到 libXft/cario 如何去选字来画。

5 .Pango

Pango 是个开源的整合到GTK+2的渲染国际化文本文件的库,pango 的名字是由 希腊语 "Pan" (Παν; lit. all) + 日语 "Go" (語; lit. language)组合成。也就是All language,Pango负责多国语言文本(如同一个文本文件中由英文,日文,中文等不同的语系组成)的渲染。需要注意的是Pango属于高级的库,不参加画字的过程。


基本概念

参考及引用文献: 关于字体的一些基本概念中文CleraType字体CleraType技术

1. 点阵字体矢量字体

点阵字体也叫位图字体,其中每个字形都以一组二维像素 信息表示。由于位图的原故,点阵字体很难进行缩放,特定的点阵字体只能清晰地显示在相应的字号下。但对于 12-16px 这样小的汉字,点阵字体常常比其它类型的字体在屏幕上更好的显示效果。常见的点阵字体有 bdf,pcf,fnt,hbf 等格式。

对于常见的计算机操作系统,字体的显示算法需要一些字体的信息来优化屏幕显示效果,英文称为 hinting。汉字由于笔画复杂,所以 hinting 的方式与西文截然不同。使用在汉字字体中嵌入预先制作的点阵位图既可以有效地避免 hinting 算法带来的计算开销,同时屏幕上显示的汉字边缘清晰,易于阅读。


矢量字体中每一个字形是通过数学曲线来描述的,它包含了字形边界上的关键点,连线的导数信息等,字体的渲染引擎通过读取这些数学矢量,然后 进行一定的数学运算来进行渲染。这类字体的好处是字体可以无限放大而不产生变形。矢量字体主要包括 Type1 和 TrueType 等几类。

2. 内嵌点阵字的字体

由于CJK字体的结构复杂,在小号字体只有使用点阵才能有清晰的显示效果,但是点阵字体很难进行缩,而且线条单一,在大号字体显示时就显得苍白无力。把点阵字体内嵌到矢量字体就能发挥两者的优点,并且也弥补了两者的不足。小号字体时清晰明朗,大号字体时字型饱满,形态丰富。常见的内嵌点阵字的字体有:北京中易电子公司宋体SimSun 、方正宋体(FZSongti)、文鼎PL上海宋(Uming)、Firefly的文鼎PL新宋(AR PL New Sung)等。

3. Hinting 与 Autohinter

Hinting (字体微调) 是用来最佳化字型显示的方法。由于屏幕的像素有限,向量字型的缩放需要有更多的考虑, 例如当一条线位在两个像素格子中间时, 该取左边的格子还是右边的格子? 如果这方面的控制没有做好,就常常会出现字型的衬线没有对齐,或是小字歪七扭八的情况。 Hinting 是额外的信息, 它告诉 renderer 该如何处理这些细节的部份,使得向量字在小字的时候能够好看。也因此 Hinting 是非常费时费人力的工作,TrueType 字型很多,但是有良好 Hinting 的字型不多。拙劣的 Hinting 就会让字变得很难看。

为了稍微改善这个问题,freetype 有 autohint 的功能,可以自动为没有 hint 的字型做 hinting 的工作。另外由于 TrueType 的 hinting 是有专利的,不能完全自由地使用, autohint 就不受这个限制。autohint 自然无法做得像人力的 hint 一样好,不过至少比没有 hint 要好些。话虽如此,对于许多笔划复杂的文字 (如中文) 目前 freetype 的 autohint 还做得不甚完美,而因为建立完整的 hinting 的难度,即使是英文字,原本就很高,内建有 hinting 的中文字型就少之又少了。所以常常有人抱怨中文字在屏幕上很难看,就是没有理想 hinting, 或者是使用了 autohinter 所造成的一些反效果。

4. AA(Anti-aliasing)

Anti-aliasing (字体抗锯齿) 是将字体在后台先以数倍的大小来绘画,然后再缩成想要的大小,未满一格的格子用灰阶补点。由于原本 X 所支持的 logic 运算不敷使用,所以才用 XRender 的 extension 来达成目的。

Anti-aliasing 会给人一种朦胧的感觉,习惯了Windows XP 下清晰,锐利的字体显示时,Anti-aliasing 会让人不太适应,会让用户觉得Linux下的字体显示不如Windows XP。但是,其实 Anti-aliasing是一种很先进的显示技术 ,当长时间显示器上阅读的时候,Windows XP 下的锐利的字体显示风格,会让眼睛更加容易疲劳,使用Anti-aliasing,字体的显示更加柔和,更加适合长时间的在显示器上阅读文档,减少眼睛的疲劳。

5. Windows® 下的 ClearType 效果

微软提出和改善了 ClearType 技术(字体平滑),归因于液晶显示器的普及,以及苹果公司和 Linux 的竞争。

和 CRT显示器相比,液晶显示器的最大缺点是:插值显示效果惨不忍睹。要达到最好的显示效果,液晶必须显示于屏幕的特定分辨率下,就是对应于它原始发光点大小的显示分辨率,即最大分辨率。而在最大分辨率下,文字都变得很小,这对于长时间的阅读是一种灾难。而原来 Windows 下未经优化的点阵大字体方案明显粗糙而难看,令人无法接受。于是微软推出了 ClearType。

Windows® 下的 ClearType 技术相当于 Linux 下的 Hinting 和 Anti-aliasing,也相当于苹果公司的 Apple Advanced Typography (AAT) 技术。它也是一种字体渲染技术。

Windows Vista 和 Windows 7 已用 ClearType 来取代传统的黑白、锐利的英文字体显示和点阵CJK 显示。

当前,Linux 下也可尝试使用 ClearType 显示效果。参看 Cleartype

字体简介

1 自由(free)的英文字体

Bitstream vera fonts,DejaVu fonts,MS True Type core fonts 等.

DejaVu fonts[community repo]是在Bitstream vera fonts release 1.10 的基础上进行不断扩充的字体。

MS True Type core fonts[ttf-ms-fonts]包含了Arial, Courier New, Times New Roman, Verdana等系列字体的总称。MS True Type core fonts 的licence 是EULA,可以合法的免费使用(感谢微软,嘿嘿!)。


2 自由中文字体

中文

  • ttf-twAUR - (繁體字)國字標準字體(楷書/宋體)母稿——中華民國教育部(AUR).
  • wqy-microheiAUR - 一种Sans-Serif风格的高质量CJK轮廓字体。 (AUR)
  • wqy-zenhei - 嵌入点阵宋体的黑体风格(sans-serif)中文轮廓字体(也支持部分日文和韩文).

日語

  • otf-ipafontAUR - Formal style Japanese Gothic (san-serif) and Mincho (serif) fonts set; one of the highest quality open source font. Default of openSUSE-ja. (AUR)

歐洲的語言 

large unicode coverage.

Microsoft Windows fonts

3 不合版权的中文字体

LingSong :Tahoma+Simsun的“杂交”字体,Tahoma版权属于微软,Simsun字体的版权属于 北京中易电子公司。

Vera Sans YuanTi:Bitstream Vera+simsun点阵+方正准圆+方正粗圆的“杂交”字体。

设置实例

1 开启/关闭 AA ,Autohint 与 Hinting

a. 全部的字体使用autohint 和 antialiasing,渲染度为 hintfull ,通常这是一个很好的全局默认设置。也可以根据个人喜好使用渲染度为hintslight。


       <match target="font">
                <edit name="autohint">
                        <bool>true</bool>
                </edit>
                <edit name="hintstyle">
                        <const>hintfull</const>
                </edit>
                <edit name="antialias">
                        <bool>true</bool>
                </edit>
        </match>


b. 小于16号的MS core fonts,关闭Antialiasing 和 Autohint,(使用hinting) 。可以根据个人喜欢调节字号的大小。


        <match target="font">
                <test name="family">
                        <string>Andale Mono</string>
                        <string>Arial</string>
                        <string>Comic Sans MS</string>
                        <string>Georgia</string>
                        <string>Impact</string>
                        <string>Trebuchet MS</string>
                        <string>Verdana</string>
                        <string>Courier New</string>
                        <string>Times New Roman</string>
                        <string>Tahoma</string>
                        <string>Webdings</string>
                        <string>Albany AMT</string>
                        <string>Thorndale AMT</string>
                        <string>Cumberland AMT</string>
                        <string>Andale Sans</string>
                        <string>Andy MT</string>
                        <string>Bell MT</string>
                        <string>Monotype Sorts</string>
                </test>
		<test name="pixelsize" compare="less_eq">
				<double>16</double>
		</test>
                <edit name="autohint">
                        <bool>false</bool>
                </edit>
                <edit name="antialias">
                        <bool>false</bool>
                </edit>
        </match>

2 英文字和中文字等宽

TrueType 字体分成两种,一种是可变字距,也就是每个字符宽度不一样,比如 "x" 与 "i",这两个字符就不等宽,它是在每个字符中记录该字符的宽度,大多数的 TrueType 字体都是这种格式。

另一种就是固定字距。也就是每个字符宽度都一样,这样显示或打印時,用会有对齐效果,比较美观,在英语环境中,不会有任何问题,但是CJK 的等宽字体,包含『半角英数字符』与『全角 CJK 字符』,字体引擎会把全角字宽度套用在半角字上,造成半宽字看起来间距太大。

a. 让字体引擎(FreeType)取消CJK字体的指定宽度

	<match target="font">
                <test target="pattern" name="lang" compare="contains">
                        <string>zh</string>
                        <string>ja</string>
                        <string>ko</string>
                </test>
                <edit name="spacing">
                        <const>proportional</const>
                </edit>
                <edit name="globaladvance">
                		<bool>false</bool>
                </edit>
        </match>

3 字体替换

一些网页编写时候,对使用的字体预先设定,(如英文部分使用了simsun,使得英文显示很不美观)所以可以使用字体替换使得字体显示更美观。

a. 把Simsun , SimSun-18030 , AR PL ShanHeiSun Uni等这个几个中文字体的英文部分,用 Tahoma,Arial 等替换。

	<match target="pattern">
		<test name="family">
			<string>SimSun</string>
			<string>SimSun-18030</string>
			<string>AR PL ShanHeiSun Uni</string>
			<string>AR PL New Sung</string>
			<string>MingLiU</string>
			<string>PMingLiU</string>
		</test>
		<edit binding="strong" mode="prepend" name="family">
			<string>Tahoma</string>
			<string>Arial</string>
			<string>Verdana</string>
			<string>DejaVu Sans</string>
			<string>Bitstream Vera Sans</string>
		</edit>
	</match>


b. 把 AR PL ShanHeiSun Uni , AR PL New Sung 字体中12~16号的中文字用 WenQuanYi Bitmap Song 点阵字替换, WenQuanYi Bitmap Song 比 AR PL ShanHeiSun Uni , AR PL New Sung中的内嵌点阵更加完善,美观。


	<match target="pattern">
		<test name="family" qual="any">
			<string>AR PL ShanHeiSun Uni</string>
			<string>AR PL New Sung</string>
		</test>
		<test compare="more_eq" name="pixelsize" >
			<double>12</double>
		</test>
		<test compare="less_eq" name="pixelsize" >
			<double>16</double>
		</test>
		<edit name="family" mode="prepend" binding="strong">
			<string>WenQuanYi Bitmap Song</string>
		</edit>
	</match>

4 使用内嵌点阵字

a. 当字体有内嵌字体时,优先使用内嵌字体。

	<match target="font">
		<edit name="embeddedbitmap" mode="assign">
			<bool>true</bool>
		</edit>
	</match>

注意:libXft 还没有embeddedbitmap选项的支持。可以到这里得到libXft2.1.8.2的embeddedbitmap patch,通过ABS重新编译安装libXft 。

5 必须使用hinting的字体

a. 有些 CJK 字体要the byte code interpreter (hinting)才能正确的显示,因为这些字体使用了hinting的一些技术制作。常见的MingLiu 就是这类字体。


        <match target="font">
                <test name="family">
                        <string>MingLiU</string>
                        <string>PMingLiU</string>
                </test>
                <edit name="autohint">
                        <bool>false</bool>
                </edit>
                <edit name="hinting">
                        <bool>true</bool>
                </edit>
        </match>


中文字体配置

中文用户可以使用文泉驿出品的字体配置工具来很容易地配置替代字体的优先级。进入[1],选择好自己的优先级候,单击“生成”,用生成的文本替换

  • ~/.fonts.conf

文件夹的内容即可。

添加字体

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: please use the first argument of the template to provide a brief explanation. (Discuss in Talk:Fonts (简体中文)#)

现在为 Linux 系统添加字体要比以前容易得多。下面我帖一篇小技巧,以便帮助一般用户更好地理解如何为自己的 Linux 系统添加字体。 首先必须要了解我们把字体放在了哪里。通常我们会把它们放在:

  • /usr/share/fonts
  • /usr/X11R6/libs/X11/fonts

这将会让每一个系统用户都可以使用它们, 当然这需要使用根用户权限。将它们拷贝到:

  • ~/.fonts

目录也不失为一个好主意。

有一些字体已经为使用 Arch Linux 的用户预先做好了 pkg 包,可以通过以下命令来搜索它们:

pacman -Ss fonts

如果你需要安装它们,则运行:

pacman -S artwiz-fonts ttf-cheapskate ttf-ms-fonts

这些字体将会被安装到 /usr/X11R6/libs/X11/fonts 目录。 为了能够正确显示字符,推荐CJK(中文/日语/韩语)用户同时安装“ttf-arphic-uming”和“ttf-arphic-ukai”字体。

另一种选择是使用KDE控制中心里的KDE字体安装。如果你正在使用KDE,它的效果将非常完美。

当然你也可以手动将字体拷贝到上述三个目录,然后以根用户身份运行:
fc-cache -vf

一般来说,你可以方便地在诸如 Gnome、Xfce4及KDE等 X 窗口环境中使用这些字体。然而,一些 GTK1 和旧的程序不支持 fontconfig 。(是否真的如此呢?希望大家可以查阅一下相关资料并指正。)你需要在你的字体目录中运行如下命令(当然需要启动终端来运行):

  mkfontscale
  mkfontdir
  ln -s /usr/X11R6/lib/X11/fonts/encodings/encodings.dir yourfontdirectory/encodings.dir
  

之后通常你需要重启 X。

如果你想分享你的字体或不希望进行上述手工操作,那么你可以自行制作 Arch 安装包。首先以 tar.bz2 格式打包你需要安装的字体,然后修改下面的 PKGBUILD 和 .install 文件,通过 ABS 方式来完成安装:

# PKGBUILD
  pkgname=fonts-extra
  pkgver=1.0
  pkgrel=1
  depends=('xfree86')
  pkgdesc=\"Fonts extra\"
  source=(fonts-extra.tar.bz2)
  install=fonts-extra.install
  build()        {
    mkdir -p $startdir/pkg/usr/X11R6/lib/X11/fonts/local
    mv $startdir/src/*.ttf $startdir/pkg/usr/X11R6/lib/X11/fonts/local
  }
# fonts-extra.install:
  # arg 1:  the new package version
  post_install() {
    echo -n \"updating font cache... \"
    /usr/bin/fc-cache
    cd /usr/X11R6/lib/X11/fonts/local
    /usr/X11R6/bin/mkfontscale
    /usr/X11R6/bin/mkfontdir
    ln -s /usr/X11R6/lib/X11/fonts/encodings/encodings.dir /usr/X11R6/lib/X11/fonts/local/encodings.dir
    echo \"done.\"
  }

  # arg 1:  the new package version
  # arg 2:  the old package version
  post_upgrade() {
    post_install $1
  }

  # arg 1:  the old package version
  pre_remove() {
    /bin/true
  }

  op=$1
  shift

  $op $*