Archive for the ‘Typography’ Category.

随手翻译了一个 Colophon

Cover

Linux System Programming 封面上的图是在一个正在飞行机器上的人。早在莱特兄弟于 1903 年实现他们第一台“重于空气”的可控飞行器以前,世界上的许多人就已经在用简单而精致的机器探寻飞行的奥秘了。在二世纪或三世纪时,就有中国的诸葛亮在孔明灯中飞行的记录,这是第一个热气球。而在六至七世纪,许多中国人尝试将自己绑在大型的风筝上以在空气中飞行。

此外,据说中国还创造了会转动的玩具,它是直升机的早期版本,这个设计可能在莱昂纳多达芬奇对人类飞行进行早期尝试时给予了他灵感,而在 1845 年,他设计了一台扑翼机,一台试图通过展动翅膀载人于空中飞行的机器。尽管他从未将这台机器建造出来,扑翼机的鸟状结构影响了后续几个世纪对飞行器的设计。

绘于本书封面的这台飞行机器要比 James Means 在 1893 的模型飞行器更为精细,多出了螺旋桨。Means 后来给他的飞行器印制了一份使用手册,其中提到“于 Willard 山巅,Crawford 屋畔,觅一良所”来试验这台机器。

不过这类试验通常是很危险的,在十九世纪后期,Otto Lilienthal 建造了一些单翼机、双翼机和滑翔机,他是第一个展示出飞行是在人类可控的范围内的人,也因此获得了“飞行测试之父”的称号:他曾参与超过 2000 次滑翔机飞行,有时单次飞行距离就超过了一千英尺。他在 1896 年死于一次降落事故,在那次事故中他折断了脊椎。

飞行器还被称作机器鸟或飞行船,也偶尔会叫成人造信天翁 (Artificial Albatross) 这样华美的名字。人们对飞行器的热情现在依然高涨,直到今天还有航空爱好者在建造早期的飞行器。

封面图和章节题图来自 Dover Pictorial Archive。封面的字体是 Adobe ITC Garamond。正文字体是 Linotype Birka,标题字体是 Adobe Myriad Condensed,代码字体则是 LucasFont 的 TheSans Mono Condensed。

注:孔明灯的传说里并没有提到诸葛亮借此飞行,当为老外附会。

对各平台文本渲染技术的一个简短的介绍

上周末参加 thossclub 的讨论,对各平台文本排版与渲染技术做了一个简短的介绍,这个介绍的 slides 可以在这里下载: text-rendering-tech.pdf (6.1 MB, PDF)

文档标记语言的一点思考

近来在水木上讨论文档标记语言的优劣,想起前些天查资料时正好又碰到了一个熟悉的名字: Scribe,于是多花了一点时间查找,没想到找到的资料仍然非常稀少。

Scribe,是 Brian Reid 在 Carnegie Mellon 的 Ph.D Thesis,也是对文档格式研究中所绕不开的一个重要的名字 (另一个,当然是 Don Knuth 的 TeX),这个项目大概在 1976 年开始,1980 年 Reid 发表这篇 Scribe: A Document Specification Language and its Compiler 以后,就甚少有什么改进了,尽管 Reid 的论文中也研究了 Knuth 的工作,但可以认为 Scribe 和 TeX 是同时代的作品。从对后续文档格式的影响说,Scribe 还更大一点,我们熟悉的 SGML (XML 的前身),BibTeX 都受了 Scribe 的影响。在 1982 年,Reid 还因为这一贡献 (Ground-breaking text-formatting language.) 获得了 Grace Hopper Medal

可是 Scribe 在应用上的成就却远远地被 TeX 所抛离,TeX 的生命力,被证明持久至今,而 Scribe 现在却在网上连一个正式的文档格式规范都找不到,一篇超过两页的详细描述都找不到!这是为什么呢?从 wikipedia 的文章中我们或许可以猜到一些隐情。

与 Knuth 慷慨地将 TeX 放入 public domain 不一样,1979 年 Reid 就把 Scribe 卖给了一个叫做 Unilogic 的公司,后来这个公司还持续和 Carnegie Mellon 大学就 Scribe 的知识产权问题扯皮,直到 CMU 放弃。最愚蠢的还不在这里,Scribe 居然在免费提供的 Scribe 程序中安插了后来被称为“time bomb”的东西,也就是说,90 天后如果用户不购买,这个软件就会执行自毁程序。

从 Scribe 如此猥琐的历史看,这个软件、这套格式最终为大众所抛弃,实在一点也不奇怪。

Droid

全世界都在关注 Android 这套手机平台时,字体爱好者们也有惊喜,这就是由 Ascender Corp 设计的一套完整的包含 serif (衬线体), sans-serif (非衬线体) 和 monospaced (等宽) 字体的新字体集: Droid

Droid

根据报道,这套字体将作为 Android 平台的系统 UI (User Interface) 字体,和 Apple 在 iPhone 中选用 Arial 的怪异行为相比,Android 的这个选择肯定会更让人觉得满意。

这套字体目前还没有提供任何形式的下载,虽然 Android 的模拟器的确使用了这套字体,但在提供下载的 SDK 和模拟器源代码中都找不到它的踪迹,也许是通过某种方法压缩存储了。

更新: 这套 Apache License 的字体在这里可以下载,原来它是存放在 emulator 的 system.img 文件中,这是一个磁盘镜像,使用的是 yaffs2 文件系统。其中 Droid Sans Fallback 包含了中文。

最令人高兴的是,Droid Sans 字体中提供了对简体、繁体中文、日文和韩文的支持,根据 specimen 的介绍,涵盖了 GB2312, Big-5, JIS-0208 和 KSC-5601 字符集,使用的是简体中文书写习惯,从 specimen 中可以发现,这是一套类似俪黑/雅黑风格的字体。

TODO List 的乐趣在于写

而不在于完成它。

Helvetica: The Film

helvetica.png

这个 blog 的长期读者也许读过我翻译的 The Scourge of Arial 一文,其中介绍了 Helvetica 的由来。而今年年初,看到 Helvetica: The Film 的公开,忍不住将它称做“年度最期待纪录片”。

目前它已经在欧美各处公映,却没有看到在中国的任何一处上映的计划,如果你能提供帮助:

If you work with a film festival, museum, cinema, or arts group and would like to organize a screening, please contact us via email: helvetica (at) swissdots.com

因为,我们想看 Helvetica我们不能错过它

Arno Pro - PS CS3 Beta 中的一套新字体

Arno Pro 是在 Photoshop CS 3 Beta 1 中出现的一套字体,在我的系统中 (Mac OS X) 安装 PS CS3 后就能在 Font Book 里找到了。Thomas Phinney 是这么说的:

Arno Pro 是 Robert Slimbach 设计的 Adobe Original 系列字体之一,它带有现代威尼斯怀旧风格 (modernized Venetian oldstyle),我认为这个字体和 Adobe Jenson 的关系就和 Minion 和 Garamond Premier 的关系一样。展开来说,Arno 对语言的支持是和未来发布的 Adobe 软件保持一致的。这个随 Photoshop CS3 beta 发布的 Arno Pro 也是一个正在测试中的字体,未来可能有改变,比如字体命名方式上的改变。

下面是 Arno Pro 的一个截图和用 XeTeX 排版的一篇短文 (来自 ctex 论坛上 haginile 提供的源文件)。

另外,以 Arno Pro Regular 08pt 为例,我们注意到 Arno 除包含 85 个基本拉丁字符外,还有 91 个 Latin-1 补充字符,127 个拉丁扩展 A 区字符,34 个拉丁扩展 B 区字符。85 个希腊文字符和 132 个西里尔语符。

从字体外形的丰富程度来看,这套字体包括从 Light, Regular, Semibold 到 Bold, Optical Sizes 从 08pt, 10pt, 12pt, 18pt 到 36pt,再加上 Italic 的版本,共 32 款字体。

从风格而言,我个人觉得还是和 Minion 有点像的,不过 Jenson 的味道也确实一眼就能看出来。

另外我这里 (XeTeX 0.995) 似乎没有正确选择 Optical sizes,这一点比较奇怪,因为 Garamond Premier Pro, Minion Pro 这些在这里都能自动选择的,还得查查是源文件错了还是 XeTeX 的原因…

Picture 1.png

免费的中文黑体 - Adobe Heiti Std

随 Adobe Acrobat/Reader 8 发布的中文字体中,出现了一款叫做 Adobe Heiti Std 的,初步使用之下,感觉非常满意。

hei.pdf 是用 XeTeX 生成的一个样例 PDF。下面的图片分别是 Linotype FontExplorer X 下查看到它的一些属性,和几个简繁差异较大的字的写法示例。另外这个字体一共包含 30591 个字形。

Picture 2.png

Picture 3.png

xcp.py 的一个简单例子

有朋友问到 xcp.py 究竟怎么用,是我不对,说了半天连个例子都没举出来,光看两句介绍当然无法理解。我自己记性也不好,怕以后忘了,现在赶紧写下来:

\documentclass{article}

\usepackage{fontspec}

% 定义英文字体,更换为你希望使用的
\setromanfont{Minion Pro}

% 定义中文字体,可将 SimSun 更换为你希望使用的字体
\newfontinstance{\zhfont}{SimSun}
\newcommand{\zh}[1]{{\zhfont #1}}

% 设置中文断行,必备
\XeTeXlinebreaklocale “zh” 
\XeTeXlinebreakskip = 0pt plus 1pt 

\begin{document}

TeX 提供了一套功能强大并且十分灵活的排版语言,它多达 900 
多条指令,并且 TeX 有宏功能,用户可以不断地定义自己适用的
新命令来扩展 TeX 系统的功能。许多人利用 TeX 提供的宏定义
功能对 TeX 进行了二次开发,其中比较著名的有美国数学学会推
荐的非常适合于数学家使用的 AMS-TeX 以及适合于一般文章、报
告、书籍的 LaTeX 系统。

\end{document}

将此文件存为 foo.tex,对它

python xcp.py foo.tex > foo.out.tex
xelatex foo.out.tex
mv foo.out.pdf foo.pdf

就可以得到你需要的 PDF 啦。如果你有兴趣,还可以看看 foo.out.tex 是什么样子的:

\documentclass{article}

\usepackage{fontspec}

% 定义英文字体,更换为你希望使用的
\setromanfont{Minion Pro}

% 定义中文字体,可将 SimSun 更换为你希望使用的字体
\newfontinstance{\zhfont}{SimSun}
\newcommand{\zh}[1]{{\zhfont #1}}

% 设置中文断行,必备
\XeTeXlinebreaklocale “zh” 
\XeTeXlinebreakskip = 0pt plus 1pt 

\begin{document}

TeX \zh{提供了一套功能强大并且十分灵活的排版语言,它多达} 900 
\zh{多条指令,并且} TeX \zh{有宏功能,用户可以不断地定义自己适用的%
新命令来扩展} TeX \zh{系统的功能。许多人利用} TeX \zh{提供的宏定义%
功能对} TeX \zh{进行了二次开发,其中比较著名的有美国数学学会推%
荐的非常适合于数学家使用的} AMS-TeX \zh{以及适合于一般文章、报%
告、书籍的} LaTeX \zh{系统。}

\end{document}

可见导言区都没有修改,只是对正文区进行了预处理。

我们可以打开 PDF 看看,效果如图:

PDF produced

可见中文使用了宋体,英文使用了 Minion Pro,正是我们需要的效果。

XeTeX Chinese Preprocessor 0.2

两个功能

  1. 使用 Python 来对 XeTeX 文档进行处理,进行自动的中文与英文字体的切换。
  2. 消除两行连续的中文之间多余的空格。

如何获取

从下面的地址下载:

http://xcp.googlecode.com/svn/trunk/xcp.py

可以到 http://code.google.com/p/xcp/ 查看相关信息和提交 Issues。

使用方法

现在这个版本应该可以处理任何包含中文的 XeTeX 文档了。使用方法很简单,在文档的导言区加上:

\usepackage{fontspec}

\setromanfont{Garamond Premier Pro} % 此处指定英文字体

\newfontinstance\zhfont{SimSun}     % 此处指定中文字体
\newcommand{\zh}[1]{{\zhfont #1}}

然后调用:

python xcp.py foo.tex > bar.tex

编译得到的 bar.tex 即可。

几点说明

  1. 默认接受 UTF-8 格式的文档,如果你使用了其他编码,可以修改 xcp.py 第 5 行的 encoding=’utf-8′ 为你使用的编码,在 http://docs.python.org/lib/standard-encodings.html 可以找到 Python 支持的所有编码。

  2. 默认在 \begin{document} 之后才开始处理,到 \end{document} 结束处理,所以记住把 \title{} 之类放在这中间,其中的汉字才能被处理。如果你用的不是 LaTeX 而是 ConTeXt,可以相应的改成 \starttext\stoptext

  3. 需要 Python 2.4。并建议把文件格式转换为 Unix 的。

  4. 如果需要避免它处理部分代码,则可以使用 @{} 标记,这样 {} 中间的内容都不会被处理。比如 @{中文} 将被转换为 {中文},而不是 {\zh{中文}}