字体
在排版学中,字体是由一个或多个字型组成的集合,每个字型由具有共同设计特征的字形组成。字体的每一种字型都有特定的字重(wiight)、风格(style)、宽度(width)、倾斜度(slant)、斜体(italicization)、装饰(ornamentation)、家族(family)等概念。最初的字体主要体现在印刷上面,而随着计算机的发展,现在字体狭义的被认为是计算机字体。
字形和字型之间的概念并不一样,字形不依赖于任何形式纯粹表示一个字(即我字,无论是手写还是计算机显示他们都是一个字形),而字型有设计的概念,例如黑体的我和宋体的我具有相同的字形但是他们的字型不同。
字体类型
字体分为点阵字体(Bitmap font)和轮廓字体(outline font),目前点阵字体基本上已经被淘汰。
点阵字体
点阵字体通过点阵表现字形,其本质就是一组图片。每一个字体变体都包含一组完整的字符,一个字符占用一张图片。目前由于其他类型字体在视觉效果和功能上已经超过他了,所以不在被广泛使用。其主要用于一些嵌入式系统中,常见的就是 linux 终端以及 windows 修复控制台中会使用。不过点阵字体还有一个使用场合就是显示特别小的中文字体。
轮廓字体
又被成为描边字体,这类字体使用曲线描述轮廓,可以通过字号来放大缩小而不变形。目前被广泛使用。
字体格式
目前字体格式主要有用于印刷的 PostScript 字体以及用于计算机的 TrueType 字体和 OpenType 字体。
PostScript 字体
该字体由 Adobe 公司为专业数字排版开发,使用 PostScript 语言描述,字型以三次贝塞尔曲线描述。最初用于打字机和印刷行业。 不过由于授权价格昂贵目前在计算机字体中很少被使用。
TrueType 字体
最初是苹果公司为了对抗 PostScript 字体(由于授权价格昂贵)而开发的一种电脑轮廓字体类型标准。之后微软也加入了开发,所以该字体在 windows 和 MacOS 中被广泛使用,后来 Linux 也加入进来,更得到了广泛的支持。这种类型的字体的扩展名为.ttf
。而在中日韩(CJK)操作系统中又引入了TrueType Collections(TTC)
概念,允许将多个字体合并为一个文件。
OpenType 字体
采用 PostScript 语言描述,结合 TrueType 字体的优点由 Adobe 和微软联合开发用于取代 TrueType 字体的新字体格式。其扩展名为.otf
(实际上他同样兼容.ttf
和.ttc
格式)。而.otc
则表示 OpenType Collections 来组合多个字体集,OpenType 是目前被使用最广泛的字体格式。
在 linux 和 MacOS 中由 FreeType 提供对 OpenType 的支持
字体剖析
衬线(Serif)和无衬线(Sans serif)
一些字体中的字母笔画首尾具有装饰性的细节,称为衬线。具有衬线的字体就是衬线体,反之就是无衬线体。在传统印刷中,衬线字体通常用于正文印刷,因为他被认为比无衬线体更易于阅读。而相对于无衬线字体用于短篇或标题,因为其抛弃衬线只剩下主干,造型也简单有力,更加具有现代感,在广告、标题等具有瞬间的识别度。
在最初的操作系统中广泛使用衬线字体(最初 xp 使用的宋体)。后来随着无衬线字体的增加,由于其无棱角易于渲染被广泛使用,例如 windows Vista 之后使用微软雅黑来作为预设字体。
最广为人知的衬线字体有西方的
Times New Roman
以及中文的宋体。而无衬线体有 Arial 和 Helvetica 等,中文的有黑体和圆体。
宽度比例
根据字体的宽度比例分为等宽字体(monospace)和比例字体(proportional)。其中比例字体的字形宽度富有变化,例如 l 就要比 m 小一些,通常认为比例字体更加易读,因此他们在印刷出版中更为常见。而等宽字体则字形具有相同的宽度,他们通常用于编程或者表格中,这样能更加方便的对齐。
在字体宽度比例中,西文字体和中文字体有很大区别,中文字体由于是方块字所以天生就是等宽的 。对于中文字体的等宽理解通常是中英文混排的情况。 中文字体作为方块如果为 1 的话,要想英文与中文对齐就是将英文拉长到 1,这也就是我们俗称的全角。当然也可以将中文缩放到与英文一样不过没人这么做。通常我们说的半角就是中英文各自维护自己的字宽度,所以通常中英文混排并不能对齐。
如果想实现中英文的等宽,最常见的处理方法就是让中文等于 2 个英文宽度,这类字体被称为 duospaced 字体。在中文语境下也可以被认为是一种等宽字体。实际上大部分等宽英文字体的宽度都是 0.6,如果想要对齐就必须让英文之间的间距缩小。当然也有宽度是 0.5 的等宽英文字体,这样就可以实现中英文的的等宽了。
字体尺寸
字体尺寸(size)表示的是其高度,单位是 pt(point) 译做磅,在中文中也采用号来作为单位。72pt 相当与 1 英寸:
印刷字号 | 中国点数 | Word 点数 | 毫米数 |
---|---|---|---|
八号 | 4.5 | 5 | 1.581 |
七号 | 5.25 | 5.5 | 1.845 |
小六 | 6.875 | 6.5 | 2.29 |
六号 | 8/7.875 | 7.5 | 2.65 |
小五 | 9 | 9 | 3.18 |
五号 | 10.5 | 10.5 | 3.70 |
小四 | 12 | 12 | 4.23 |
四号 | 14/13.75 | 14 | 4.94 |
小三 | 15 | 15 | 5.29 |
三号 | 16/15.75 | 16 | 5.64 |
小二 | 18 | 18 | 6.35 |
二号 | 21 | 22 | 7.76 |
小一 | 24 | 24 | 8.47 |
一号 | 27.5/28 | 26 | 9.17 |
小初 | 36 | 36 | 12.70 |
初号 | 42 | 42 | 14.82 |
特号 | 54 | - | 18.979 |
大特号 | 63 | - | 22.142 |
特大号 | 72 | - | 25.305 |
中文的印刷字号来自活板印刷的铅活字,以互不成倍数的几种活字为标准,加倍或减半自成体系,其中分为四个体系序列:
- 四号序列(一号、四号、小六号): 一号是四号一倍、小六是四号一半
- 五号序列(初号、二号、五号、七号): 初号是二号一倍,二号是五号一倍,七号是五号一半
- 小五号序列(小初号、小二号、小五号、八号): 以小五号为基准
- 六号序列(三号、六号): 三号是六号的一倍
最初只有三个体系,即四五六,其中只有一号到七号这七种字号,后来又扩展了一个小五号序列。之后随着 Word 的流行,由于 word 出于技术原因,存在字号必须是 0.5pt 的倍数等这样那样的制约,所以与实际活字制版不太一样。不过现在大部分情况下都使用 pt 来表示字体的尺寸,他能提供更小的维度的设置。
字重
字重(weight)表示字体的粗细,通常一个字体都会包含 4~6 个级别的字重,其中又以Light、Normal 和 Blod 是大多数字体都具备的:
- 100: 淡体 Thin ( Hairline )
- 200: 特细 Extra-light ( ultra-light )
- 300: 细体 Light
- 350: 次细 Demi-Light
- 400: 标准 Regular ( normal / book / plain )
- 500: 适中 Medium
- 600: 次粗 Demi-bold / semi-bold
- 700: 粗体 Bold
- 800: 特粗 Extra-bold / ( Ultra-bold )
- 900: 浓体 Black ( Heavy )
- 950: 特浓 Extra-black ( Ultra-black )
需要注意字重是需要字体提供支持的,大部分字体都会提供: Light Normal 和 Bold 这三个字重。
字体样式
样式(style)指正常以及斜体。而斜体又分为italic type
和oblique type
。其中前者就是我们常说的斜体,字体在倾斜的同时会伴随这字形的变化,而后者只是简单的将原字体倾斜也称为伪斜体。需要注意的是斜体是需要字体提供支持的,如果一个字体没有斜体那么通常程序会将正常的字体加以倾斜形成伪斜体。
字体宽度
某些字体还提供了同一个尺寸下的不同宽度(width),通常由以下单词度量:
- compressed: 压缩
- condensed: 浓缩
- narrow: 狭窄
- normal/regular: 标准
- extended: 扩展
- expanded: 超展
每一个级别在不同字号上有不同的宽度。通常来说等宽字体是针对于同一种类型而言的,例如同为等宽的西文字体和 CJK 字体在一起排版就不是等宽的了。而通常的做法是使两个西文字符的宽度与一个 CJK 字符的宽度相等来进行排版。为了实现这中排版方式通常的做法就是使用不同的字号配合字体宽度,例如一个西文字体选择 16pt 的 narrow 宽度,而中文字体选择 14pt 的 normal 宽度来实现等宽。还有一种是将两种字体封装为一个字体集来实现。
商业字体
由于 CJK 字体的特殊性,通常字体包含两种:CJK 字体和西文字体。
西文字体
Arial
是一款随 windows 系统分发的无衬线 TrueType 字体,由 MonoType 公司设计与 Helvetica 竞争的一款字体。
Time New Roman
即泰晤士新罗马字体,应该是最被广为人知的衬线字体。在字体设计上属于过渡型衬线体,对后来的字体产生了很深远的影响。另外由于其中规中矩、四平八稳的经典外观,所以经常被选择为标准字体之一。同样由 MonoType 公司设计最初被用于泰晤士报上,早在 windows3.1 版本中就被附带发行。
Courier New
Courier 字体最初是 IBM 公司设计给打字机使用的等宽衬线字体(由于打字机的构造要求等宽),并且 IBM 并没有要求其专利,所以该字体在很长一段时间都是整个打字机制造业的事实标准,甚至在最初该字体也是编程语言的行业标准。而 Courier New 是 Courier 的一个变体,涵盖了 Courier New、Courier New Blod、Courier New Italic 和 Courier New Bold Italic。
CJK 字体
字体是有表示范围的,一个表示西方文字的字体是无法显示中文的,而像中日韩这样的非字母类文字,其字体制作并不容易。
所有这些用于在电脑在表示表意文字的字体被成为 CJK 字体。这这类字体有被分为几种特定的字型例如宋体(衬线体)、黑体(非衬线体)以及多种手写体(楷体、隶书和草体等)。
宋体
最初是在复刻临安书棚本时将笔画加以直线化,呈现出硬朗表情的一种字体。笔画有粗细变化,而且一般是横细竖粗,末端有衬线,点捺钩等结构有尖端,是正文排版的主力字体。
中易宋体和中意仿宋
中易宋体(SimSun)和新宋体(NSimSun)是由北京中易中标公司制作并具有版权的两种 TrueType 字体,由于随 windows 和 office 一起分发,(文件名是SimSun.ttc
),所以我常说的宋体实际上就是指中易宋体。但是其在小字号时显示不够清晰,其最佳字号范围不大,在小于 8pt 以及大于 14pt 以上就会出现模糊。在之后被微软雅黑所替代。
仿宋体,简称仿宋,又称宋朝体,是仿制宋朝雕版书籍字体而来的一种汉字传统印刷字体风格。仿宋体是一种采用宋体结构、楷书笔画的较为清秀挺拔的字体,笔画横竖粗细均匀 ,常用于排印副标题、诗词短文、批注、引文等,在一些读物中也用来排印正文部分。中易仿宋(Simfang)也是随着 windows 系统分发的。
华文中宋和华文仿宋
这两个字体由中国常州华文印刷新技术有限公司(SinoType)制作并持有版权的一种 TrueType 字体,也被广泛使用。其中华文中宋(StZhongS)体由宋体逐渐演变而来,同样遵循了横细竖粗的特点,想对于中易宋体而言较方正醒目,无论字体大小都能够保持清新。华文仿宋(StFangS)是随着 Office 分发的。
国家标准中党政机关公文格式中规定,公文正文中各要素一般使用 3 号仿宋体字。所以大部分红头文件中的正文都是仿宋。并且在工程制图中所使用的手写字体也是仿宋体。
黑体
黑体是类似于西文的无衬线字体,其笔画厚度均匀,由于其醒目的特点,常用于标题、导语、标志、界面字体等。在最初由于技术限制并且笔画较多小字的黑体清晰度比较差,所以一开始都是用于大字的文章标题,并且计算机显示也多数使用宋体。但是随着技术的发展,无衬线字体易读、清晰的特点越发显现,现在大部分最新的计算机设备(包括手机)内置字体都换成了黑体。黑体整体分为两类,笔画起止转折之处都是方形为标准黑体,如果起止转折之处是圆形的则为圆体。
微软雅黑
微软雅黑(msyh.ttf)是微软委托方正集团设计的一种 OpenType 类型字体。其在 windows Vista 之后一直作为 windows 系统的默认字体。
方正兰亭黑
同样有方正集团设计,基本修补了微软雅黑目前所存在的问题,由于系出同源,和微软雅黑体外观基本一致,但标点符号得到了很好的修整,而且有更细的细黑和纤黑作为配套。这款黑体系列字体包括了纤黑、细黑、兰亭黑、粗黑、特黑、特黑长、特黑扁七款字体,带全了 GBK 字符基本不会出现缺字的情况。这样就形成了一个系列的字体,在设计师进行文本设计时,提供了很好的层次选择。
开源字体
字体通常都是版权字体,使用需要高额的授权费。由于 linux 的开源特性,这些版权字体并不能在其中使用。不过不少团体和公司都提供了对应的开源兼容版本。
西文字体
liberation
liberation是一个开源的字体的集合,旨在提供与Times New Roman、Arial 和Courier New 字体。分别对应了衬线字体、无衬线字体和等宽字体:
- liberationMono : 类似与Courier New 的等宽字体
- liberationSans : 类似与Arial 的无衬线字体
- liberationSerif : 类似与Times New Roman 的衬线字体
每种字体还提供了 Regular、Bold、Italic 和 BoldItalic 四种类型来表示标准、粗体、斜体和粗斜体。
source
source 翻译为思源字体集,是adboe-fonts开源的 OpenType 格式的字符集,其即包含西文也包含 CJK 字体。其中西文包含:
- source-serif: 思源西文衬线字体
- source-sans: 思源西文无衬线字体
- source-code-pro: 等宽字体,专门为用户界面和编程环境进行了优化
每中字体提供了常规、特细、细、半粗、粗、黑这六种字重,同样也提供了斜体。并且所有的 Source 字体都提供了一种可变字体。
ubuntu
ubuntu 字体家族是一个开源的 OpenType 字体,在 Ubuntu 10 之后成为 Ubuntu 发行版的默认字体。
code-font
这部分的字体主要是用于编程使用,他们的一个特点就是都是等宽字体,而现代的编程字体都提供了连字符的支持。并且一个优秀的编程字体都为1 I l
以及0 O
之间进行了区分。
cascadia
cascadia是微软开源的一款用于编程的等宽字体,最初与 windows Terminal 一起发布,目前是 visual code 的默认字体。其特殊之处在于提供了连字符支持。包含两个版本:
- Cascadia code:标准版本,包含连字符的支持
- Cascadia Mono:删除连字符的标准等宽字体
JetBrains Mono
是 JetBrains 开源的编程等宽字体,具备所有编程字体应有的特性。
FiraCode
是 firefox 开源的等宽字体,同样具备完整的编程字体特性。
CJK 字体
是容纳表意文字的字体,特别被中日韩使用。
source-han
source-han 同样是 adobe 开源的 OpenType 格式的字符集,其中包含的是 CJK 字体,同样具有三种类型:
- source-han-serif: 思源宋体,衬线字体
- source-han-sans: 思源黑体,非衬线字体
- source-han-mono: 思源等宽
由于是 CJK 字体所以每种字体提供了简体正文、台湾繁体中文、香港繁体中文、日语和韩语五种类型。提供了 7 种字重。同样提供了可变字体。
文泉驿
文泉驿是一个开源汉字字体项目,在最初的开源世界中文字体非常匮乏,而常用的宋体、黑体等都是版权字体只能在 windows 和 MacOS 中使用,所以就提出了这个项目。不负重望文泉驿也是第一个完整覆盖 GBK 字符集的开源字体。目前大部分 Linux 发行版的默认中文字体就是文泉驿。目前包含三个字体集合:
- wqy-bitmapfont: 文泉驿点阵宋体,一种衬线字体
- wqy-microhei: 文泉驿微米黑,是一种非衬线字体
- wqy-zenhei: 文泉驿正黑体,也是一种非衬线字体
霞鹜文楷
霞鹜文楷他是开源世界的另类,因为开源世界几乎没有一款真正可用的楷体,直到 2020 年底日本字体厂商在 github 上开源了 7 款日文字体,它是兼具仿宋和楷体的特点的字体,可读性很高。最初 DIY 字体爱好者先后使用其他字体来填补这款字体以使用简体中文环境。但是风格及其不统一,于是就有开源大佬手动补全了该字体并开源。
noto
之所以将noto单独列出来是因为它的野心非常的大,它隶属于谷歌开源字体工程。其中的常用英文和 CJK 版本就是与 adobe 共同开发的 source 的重新打包,但是它另外又制作了各种小语种例如Noto Sans Malayalam
马来西亚语,Noto Sans Thai
泰国语等等,旨在完成世界上所有语言的制作(可以认为是为了覆盖所有 Unicode 的字符集合)。由于 ttf 也好 otf 也好最多都支持 65535 个字符,所以不可能通过一个字符包含所有的 Uncode 字符,它通常被分割为多个包来发布,但是他们的名字大部分是可以猜测的:
- noto Sans: 无衬线字体
- noto Serif: 衬线字体
- noto Sans Mono: 等宽字体
对于简体中文来说就是
noto Sans SC
这样的形式。
nerd-fonts
nerd-fonts是一个开源项目,他在目标字体中添加大量的字形(大部分都是图标),这就可以在让终端显示特殊的字符了。尤其在 vim、emacs 等插件中被广泛使用。大部分编程相关的字体在项目主页中都提供了封装。他实际上是一个集大成者,例如有一个专门用于状态栏的字符集powerline-extra-symbols就被包含在 nerd-fonts 中。
中英文等宽
严格意义来说他们不算一个字体,而是将多个字体打包成中英文等宽。通常的做法就是两个英文的宽度与一个中文的宽度相同,也就是真正意义的实现半角。
Sarasa Gothic
更纱黑体是谷歌开源的noto sans/losevka
和source-han 合并而来的。也就是说在一个字体集中同时包含中英文字体。这在一些不支持同时设置两种字体的程序中尤其有用。并且其还有一个特点就是提供了等宽字体,其中的中文字符是英文宽度的两倍,这在编写文档的时候尤其是表格对齐非常方便。
github 上还有一个对他的进一步封装Sarasa Term SC Nerd加入了nerd-fonts 补丁。
noto sans mono cjk sc
前面说的实际上都是自己打包组成的字体,而由官方支持的只有一个就是Noto Sans Mono CJK SC字体。它实际上是Noto Sans SC
和Noto Sans Mono
打包但是调整了英文的间距,让中文是两个英文的宽度。
调整字号
spacemacs 的chinese layer中推荐的是使用不同的字号来实现等宽,这个前提是编辑器要支持:
;; Note: The Hiragino Sans GB is bundled with MacOS X.
;; If you are not using MacOS X, you should change it to another Chinese font name.
(spacemacs//set-monospaced-font "Source Code Pro" "Hiragino Sans GB" 14 16)
Linux 下字体
Linux 下字体管理由fontconfig实现,注意他仅仅是字体配置和自定义软件库。它是面向用户的,并不依赖 x 环境。
手动安装字体非常简单,只需要将 .ttf .ttc .otf .otc 这类文件放置到对应位置即可:
/usr/local/share/fonts
: 系统端$HOME/.local/share/fonts
or$HOME/.fonts
: 用户端
也可以在/etc/fonts/fonts.conf
中自定义目录。需要注意字体文件的权限应当为 644 否则可能无法使用。
放置完成后只需要运行fc-cache
更新系统缓存即可。
要想查看目前安装了哪些字体,可以使用
fc-list
来查看。有时候我们不知道如何设置字体的时候这个很有用。
fc-cache
、fc-list
等都由fontconfig这个底层工具库提供,该工具是 freedesktop 组织提供的
Debian 中字体
首先 Debian 内置的字体包有几个规则:
- 对于 TrueType(TTF) 和 OpenType(OTF)字体包会以
fonts-
开头 - 对于具有 VF(variable font)即特殊变体的会包含
-variable
- 非自由字体位于 contrib 包中
常用的字体包:
- fonts-recommended: Debian 开发人员收集的适用于大多数 GUI 系统的字体
- fonts-liberation: 西文字体三剑客
- ttf-mscorefonts-installer: Microsoft 的核心字体,注意没有中文字体,可以看作是 fonts-liberation 的商业版本,尽管会多一些,它位于 contrib 包中
- fonts-noto-cjk: 思源字体,包括 Sans Mono Serif 全部,只不过只有普通和粗体两个字重。还有一个fonts-noto-cjk-extra包括所有字重
- fonts-wqy-microhei: 问泉译雅黑
- fonts-wqy-zenhei: 问泉译正黑