Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1018401
  • 博文数量: 243
  • 博客积分: 3053
  • 博客等级: 中校
  • 技术积分: 2975
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-02 21:11
文章分类

全部博文(243)

文章存档

2013年(2)

2012年(20)

2011年(5)

2010年(114)

2009年(102)

我的朋友

分类:

2010-10-19 17:43:07

字符集,编码和字体(zz)

 

LATEX Notes v 1.20
Alpha Huang()
2008年7月26日

1 字符集和编码
字符集(Character Set)的二进制编码被称为字符编码(Character Encoding),有时人们也会混用这两个术语。
a 1963年发布的American Standard Code for Information Interchange(ASCII)是最早出现的字符编码,它用7位(bit)表示了27 = 128个字符,只能勉强覆盖英文字符。


b 其后,国际标准化组织(International Organization for Standardization,ISO)推出了 ISO 8859。2^8 = 256个字符显然也不能满足需要,所以 8859 被分为十几个部分,从 8859-1(西欧语言)、8859-2(中欧语言),直到8859-16(东南欧语言),覆盖了大部分使用拉丁字母的语言文字。


c 在 ISO 标准完全定型之前,IBM 就有一系列自己的字符编码,他们称之为代码页(Code Page),其中著名的有 1981 年就被用于 IBM PC 的437(扩展 ASCII)、850(西欧语言)、852(东欧语言)。IBM 代码页通常被用于控制台(Console)环境,也就是 MS-DOS或 Unix Shell那样的命令行环境。


d 微软将 IBM 代码页称为 OEM 代码页,自己定义的称为 ANSI 代码页,后者中著名的有1252(西欧语言)、1250(东欧语言)、936(GBK简体中文)、950(Big5 繁体中文)、932(SJIS 日文)、949(EUC-KR韩文)等。


e 1981 年,中国大陆推出了第一个自己的字符集标准 GB2312,它是一个94 ∗ 94的表,包括7445个字符(含6763个汉字)。GB2312通常采用双字节的EUC-CN编码,所以后者也常常被称为 GB2312 编码;其实 GB2312还有另一种编码方式 HZ,只是不常用。GB2312 不包含朱镕基的“镕”字,政府、新闻、出版、印刷等行业和部门在使用中感到十分不便,于是它在1993 年被扩展为 GBK,后者包括 21886 个字符(含 21003 个汉字),没有形成正式标准。2000 年发布的 GB18030 包含 70244 个字符(含 27533 个汉字),采用四字节编码。GB18030 之前还出现过一个 GB13000,没有形成气候。


f 1990 年ISO 推出了通用字符集(Universal Character Set,UCS),即ISO 10646,意图一统江湖。它有两种编码:双字节的 UCS-2 和四字节的UCS-4。
ISO 之外还有个希望一统江湖的组织:统一码联盟(The Unicode Consortium),它于 1991 年推出了 Unicode 1.0。后来两家组织意识到没必要做重复工作,于是开始合并双方的成果,携手奔小康。从 Unicode 2.0开始,Unicode 采用了与 ISO 10646-1相同的编码。
Unicode主要有三种编码:UTF-8、UTF-16、UTF-32。UTF-8使用一至四个 8 位编码。互联网工程任务组(Internet Engineering Task Force,IETF)要求所有网络协议都支持 UTF-8,互联网电子邮件联盟(Internet Mail Consortium,IMC)也建议所有电子邮件软件都支持 UTF-8,所以它已成为互联网上的事实标准。UTF-16 用一或两个 16 位编码,基本上是UCS-2 的超集,和 ASCII 不兼容。UTF-32 用一个 32 位编码,它是 UCS-4的一个子集。

TEX 是基于单字节编码的,因为 Knuth 当初开发 TEX 时没考虑那么远,也没有现成的标准可以借鉴。
LATEX 对中文的支持主要有两种方法:张林波1开发的 CCT 和 Werner Lemberg2开发的 CJK 宏包。早期 CCT 比较流行,新的 CCT 也可以和CJK配合使用,网上可以找到的最后更新是2003年的。CJK是当前主流,它不仅支持中日韩等东亚文字,还支持几十种其他不同语言的多种编码。
支持简体中文的 LATEX 发行版有吴凌云3的 CTeX 和李树钧4的 China-TeX,繁体中文的有吴聪敏5、吴聪慧兄弟的 cwTeX 和蔡奇伟6的 PUTeX。后面两个台湾的发行版包老师不熟悉,前面两个大陆的发行版都包含MikTeX、CCT、CJK、WinEdt等。

简体中文常用编码是 GBK 和 UTF8 。family 是指宋体、楷体、隶书等,具体引用要看电脑上安装了什么字体。麻烦的是 GBK 和 UTF8 字体不通用,也就是说每种编码需要自己的字体。CJK 自带的 UTF8 简体字体有 gbsn(宋体)和 gkai(楷体)。

2 字体
字形是一个字符的具体图形表现形式,一个字符可以有多个字形,比如汉字中的“強/强”、“戶/户/戸”;字样是一组相同风格样式的字形的集合,比如中文字样有宋、仿、楷、黑、隶、篆等;一种字样可以对应电脑上的几种字体。
2.1 字样
拉丁字母的字样主要有三大类:Serif(Roman)、Sans Serif 和 Mono-space (Typewriter)。Serif 的笔画边缘部分有些装饰,类似于中文的宋体、仿宋、楷体、魏书等。Sans Serif 的笔画则是平滑的,类似于中文的黑体。Sans 这个词来源于法语,就是“没有”的意思。Monospace 则是等宽字样。
每一类字样都可以有加粗(bold)、斜体(italic)、倾斜(oblique)等修饰效果。Italic 通常对原字样进行过重新设计,它修饰精细,多用于Serif; Oblique 也称作 slanted,基本上是把正体倾斜,多用于 Sans Serif。通常 oblique看起来比italic要宽一些。

2.2 字体格式
2.2.1 点阵字体和矢量字体
电脑上用的字体(font)按数据格式可以分为三大类:点阵字体(bitmap)、轮廓(outline)字体和笔画(stroke-based)字体。
点阵字体通过点阵来描述字形。早期的电脑受到容量和绘图速度的限制,多采用点阵字体。点阵字体后来渐渐被轮廓字体所取代,但是很多小字号字体仍然使用它,因为这种情况下轮廓字体缩放太多会导致笔画不清晰。
轮廓字体又称作矢量字体,它通过一组直线段和曲线来描述字形。轮廓字体易于通过数学函数进行缩放等变换,形成平滑的轮廓。轮廓字体的主要缺陷在于它所采用的贝塞尔曲线(B´ezier curves)在光栅(raster)设备(比如显示器和打印机)上不能精确渲染,因而需要额外的补偿处理比如字体微调(font hinting)。但是随着电脑硬件的发展,人们一般不在意它比点阵字体多出的处理时间。
笔画字体其实也是轮廓字体,不过它描述的不是完整的字形,而是笔画。它多用于东亚文字。

2.2.2 常见字体
常见的轮廓字体技术有:Type 1 和 Type 3、TrueType、OpenType、METAFONT 等。
Adobe的Type 1和Type 3基于PS,它们采用三次贝塞尔曲线。Type1 支持微调,它使用一个简化的 PS 子集;Type 3 不支持微调,但它可以使用全部 PS功能,因此既可以包含轮廓字体也可以包含点阵字体信息。

1991 年,Apple 发布了 TrueType,它采用二次贝塞尔曲线。二次曲线处理起来比三次曲线快,但是需要更多的点来描述。所以从 TrueType到 Type 1的转换是无损的,反之是有损的。1994 年,Apple 着手研究
TrueType 的下一代技术:TrueType GX,它后来演变为Apple Advanced Typography(AAT)。

1996 年,微软和 Adobe 联合发布了 OpenType。它比起 AAT 的优势有:跨平台、开放和易于开发、支持更多的语言比如阿拉伯语。

早在 1984 年 Knuth 就发布了 METAFONT,它与 TrueType 和 Open-Type的区别是,不直接描述字形轮廓,而描述生成轮廓的笔的轨迹。笔的形状可以是椭圆形或多边形,尺寸缩放自如,字形边缘也柔和一些。两种
字体可以用同一个 METAFONT 文件,当然还有不同的参数。METAFONT技术如此先进,却没有流行开来。对此 Knuth 解释道,要求一位设计字体的艺术家掌握60 个参数太变态了,那是用来折磨数学家的。

Type 1 和 Type 3 把字体信息存储在两种文件里:metrics 和 glyph文件。metrics 文件有 AFM(Adobe font metrics)和 PFM(printer fontmetrics),glyph 文件有 PFA(printer font ASCII)和 PFB(printer fontbinary)。LATEX 使用的 metrics 格式是TFM(TeX Font Metrics)。

TrueType 的文件后缀是 .ttf,OpenType 的是 .ttf 和 .otf。METAFONT虽然用矢量图形来定义字形,实际输出的却是一种点阵格式:PK (packed raster)。

上述字体按技术的先进性,从高到低的排序为:OpenType、 True-Type、Type 1、Type 3、PK,我们应优先选用 OpenType 和TrueType。

2.2.3 合纵连横
Adobe 收取的 Type 1 专利许可费一度十分昂贵,穷人们只好用免费的Type 3。为了打破这种垄断,Apple 开发了 TrueType。1991 年 TrueType发布之后,Adobe随即公开了Type 1的规范,Type 1字体从贵族堕落为平民,因而流行开来。1980 年代中后期,Adobe 的大部分盈利来自于 PS 解释器的许可费。面对这种垄断局面,微软和 Apple 联合了起来。微软把买来的 PS 解释器TrueImage 授权给Apple,Apple则把 TrueType 授权给微软。

微软得陇望蜀,又企图获得 AAT 的许可证,未遂。为了打破 Apple 的垄断,微软联合 Adobe 在1996年发布了 OpenType。Adobe 在2002 年末将其字体库全面转向 OpenType。

CJK 自带的 UTF-8 编码字体 gbsn 和 gkai只包含 GB2312 字符集,而CTeX 只提供 GBK 编码字体,因此中文用户通常需要自己安装配置 UTF-8编码的 TrueType 字体。
在使用TrueType 之前,用户通常需要作以下准备工作:
1. 用转换程序 ttf2tfm 生成TFM。
2. 配置字体定义文件 .fd。
3. 配置 ttf2pk ,因为 DVI 浏览器和 dvips 都会自动调用 ttf2pk 来生成 PK。
4. 配置 dvipdfmx。


阅读(1513) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~