从三维到二维

Robert BringhurstPalatino: The Natural History of a Typeface 第 96 页中准备结束对凸版letterpress)时代的叙述,并开启后续章节对照排photographic)与数字(或桌面)印刷时代的介绍:

Every font in the Palatino family produced through 1962 was three dimensional, intended for use in a letterpress. Every font in the family made after that date was photographic or digital — and was, in either case, designed for a printed page that has no sculptural dimension.

这本书前半部分给我留下最深印象之一部分的,就是这从三维到二维的过渡。几乎完全成长于数字印刷时代的笔者,很难理解三维造字时代铁与火的浪漫——以至于当字谈字畅播客中多次从铅字出发的时候极难做到感同身受。而在阅读《Palatino》一书之时,大量图片给了我真切的印象:不只是印刷品,之前那些“看得见、摸得着”的立方块也是是曾经的印刷产品的一部分。如果从多层的角度讲,像现在的许多字体属性,曾经是通过一层金属体现出来的,当然现在,仅仅剩下了一个一维变化的数字。这个从立体到平面印刷的剧变之后,整个行业的设计师,是整整少了一个维度的限制、也整整少了一个维度的设计需求。

这是读《Palatino》一书给我留下深刻印象的几点之一。当时在地铁上读到这里,就想认真地把它留下来,而不是随着还书把他忘掉。总体而言,不得不说《Palatino》从某种程度上是改变当代字体爱好者认识的极其难能可贵的历史课本。

Android N 升级与 CJK 字体

Android N 发布已经一月有余,今天终于升级换上。用了一天,一切顺利,此前预览版中的问题没有碰到,就我而言已经可以当作主力系统使用。截至发稿时,适用于 Android N 的 SuperSU 刷机包已经释出,TWRP Recovery 也已可用。

本次升级最令人开心的一点,就是在初次启动进行初次设定的过程中,允许不联网进行设置了。这就免除了此前由于大陆网络原因无法连接 Google 的服务器,不拔卡或连上 Wi-Fi 后会卡在 Google 账户登录步骤上的问题。虽然并不是常用的功能,但的确免除了太多的麻烦,是我最喜欢的细节了。

其他关于 Android N 中与前代 Android 的各项差异,已经有无数的文章加以赘述,在此不再赘述。本文主要讨论一下关于内置中日韩字体 Noto Sans 的最新状况与个人根据需求的改进。

内置中日韩字体 Noto Sans CJK 方式的改变

从 Android L 开始,随着思源黑体(Source Han Sans)的发布,Android 便开始使用 Noto CJK 作为随机中日韩字体。

为了适配不同的使用需求,Noto Sans 很早就在自己的 Github 仓库中释出了采用不同打包方式的多个版本,具体信息可参见 Noto Sans CJK 的版本的介绍和选择指导。在 Android N 以前的系统中,随机附带的字体均为「Region specific OTF subsets」,而 Android N 开始,采用了「CJK OTC fonts (Thin, Light, DemiLight, Regular, Medium, Bold, Black)」的模式。如果从字体文件名上来看,就是从

NotoSans{JP, KR, SC, TC}-[weight].otf

变成了

NotoSansCJK-[weight].ttc

而没变的是,随机附带的仅有 Regular 字重。不过日文、韩文、正体中文、简体中文被打包在一起。

当然,相应的配置文件(仍是位于 /system/etc/font.xml)也发生了变化,关于中日韩字体的描述部分由类似

<family lang="zh-Hans">
    <font weight="400" style="normal">NotoSansSC-Regular.otf</font>
</family>

变成了

<family lang="zh-Hans">
    <font weight="400" style="normal" index="2">NotoSansCJK-Regular.ttc</font>
</family>

这样的形式,可以看到为了支持 OTC(OpenType Collection,后缀为 .ttc)而而增加的 index 属性。

一如往常,若是需要增加相应的字体的话,只需将字体文件拷贝到 /system/fonts/ 目录下,并在配置文件相应的行即可。具体可参见附录部分。

另外,拷贝之后需要格外注意的一点,拷贝过去的字体的文件的的权限需要为 -rw-r--r--(644),否则系统可能不能正常读取这些字体。

比较难过的是系统等宽字体默认还在使用 Droid Sans Mono,我还是手动把他们替换成 Roboto Mono 了(Github)。

虽然能够手动操作,但默认中日韩字体只采用单一字重、仍然没有用上「CJK OTF fonts with different default language」还是挺令人难过的,但对于 OTC 方式的支持,而且介绍页面有了它们的下载链接,不再需要去仓库里一大堆文件总还是方便了一些的。

继续阅读“Android N 升级与 CJK 字体”

字体设计者的努力

I Love Typography 上最新一篇文章 Making Fonts: Proza Libre 介绍了该文章作者在制作 Proza 对应的开源的、屏幕显示版本 Proza Libre 的过程。

字体制作的完整流程对我而言一直是一个几乎无法想像的的存在,尤其当进入到在后续精确调整的时候。要想象这个过程的复杂在于,这个调整的自由度实在太高,如何拿捏调整的尺度,使得字体本身利于显示,达到最优的可视度,又不损失字体的风格与骨架。尤其当涉及到 hinting 的时候,相当于在每个字符对数个曲线锚点的调节的自由度之外又增加了字号这个自由度、并加上了栅格网格的限制。考虑到字符的数量、要对不同字号下分别做出的调整的次数,字体工程师实在是一个让人仰望的专业。

Making Fonts: Proza Libre 这篇文章的可贵之处在于,作者难得地以一个视频的形式展示了自己在 hinting 信息制作过程中的工作流程。

观看这个构建的过程在两个方面给我留下了深刻的印象。

多自由度、搜索、作坊式的工作方式

其一是,整个调整的过程与我们所想象的自动化、能够整体性地进行描述不同,实际的修改过程是充满作坊味的:尽管借助了 ttfautohint 的辅助,整个过程实际充斥着大量的对于特例的修改,这包括对不同字号每个锚点转化为位图时位置所需要进行的像素级的移动。

虽说 hinting 的意义就在于对于特例的修正,但对于一个被显示在屏幕上的似乎以精确著称的图形是经过这样过程调整而形成,多少令人不适。

这样说来可能比较难懂,但我实在觉得,若是以一个怀疑论的视角去审视这个过程,多少会让人觉得,后序调整对前序调整实际是有很大的依赖性。这种依赖性会导致移动路径太多,而我们不断进行单次调整最终只能达到一个较优解,而较优解的不唯一性导致这样的的调整过程实际是不可重复的。

用一个图形化的表述可能就是,当我们做一个调整时,我们实际是被限制在一个维度上的。当我们在这个维度内我们实际期望能达到最优解(即图中的最小值)。但在这一维度中我们实际只能了解到一个点附近的斜率,因此若想达到最优点,就需要增大「搜索范围」,或对多个「自由度」同时进行搜索,但这一点实际上是很难做不到的(在实际处理之下自由度数达到十几或几十)。这有点类似于化学上增大激活能或改变反应路径的思路。

当我们想要达到一个最低点的时候,我们往往只能达到一个局域的极小值。
当我们想要达到一个最低点的时候,我们往往只能达到一个局域的极小值。

通过原文作者对于 hinting 过程的描述,实际每一个字符的「搜索过程」实际上是各不相同的,这也就意味着即便是同一个人进行两次调整,也会得到不一样的结果。这样不可重复的结果会让人觉得非常难受。但实际科学研究也是如此。这样说来,字体制作的调整步骤与科学研究的共通性令人印象深刻。

参数化与自动化构建

另一个给我印象深刻的原因是,文章作者使用了一系列分立的工具,而要完成每一次刷新,要经历数个步骤,包括:

  1. 修改配置文件
  2. 使用 ttfautohint 编译为 ttf
  3. 将编译结果上传到某网站自动生成网页字体及相对应的 CSS 文件
  4. 将网页字体 woff 等拷贝到 Dreamweaver 工作目录
  5. 等待 Dreamweaver 完成上传
  6. 在浏览器测试网站完成截图的生成,等待
  7. 截图另存为本地,选择文件名
  8. 与上一次测试结果进行比较

这样一个工作流程对我来说基本已经是难以接受了。单论每次将截图保存的步骤,就会令我费一番脑筋。这样的工作与我绘制实验图像的过程极为相似。我无法接受多次修改试验数据源得到最优,每一次都要在 Origin 这样的绘图软件中重新打开,绘制,调整一系列参数,保存导出,并插入到文档中,而期望通过一个工具链系列自动化地完成这些步骤(通过 Python 完成处理,并通过编译文档自动更新图片)。

目前这样一套「自动化」的构建思路在建筑行业开始流行,建筑领域对它的称呼为参数化设计(parametric design),似乎会是短时间内工业设计、艺术与科技结合的设计短时间内热门的方向。在字体制作过程领域,采用类似方案而获得了较高自动化程度的例子 Belleve Invis 构建 Iosevka 字体的的过程。但由于一整套工具链都是 belleve 自己从头开发的,可见实际大部分字体的构建都不是这种参数化的思路。

这种参数化的思路不是一个彻底的自动化方案,但在短时间内似乎会减少(我认为可能存在的)微调期间的痛苦,尤其是在调整过程中减少精力的分散(完成构建过程)。不过就从身边人对 Word 等所见即所得的编辑软件的热衷来看,这种强迫症患者自我安慰式的解决方案所存在的必要性实际是存疑的。

总的来讲,Making Fonts: Proza Libre 这样一篇文章是一篇有趣的文章,让我们得以一窥字体工程师的工作过程,总体而言是令人耳目一新的。了解了这样的流程,也就对这一行业有了更深层次的理解,似乎就是许多人挤破头而想要进行的实习工作的意义所在吧,不同的是,这样的过程实际在屏幕跟前,就是可以完成的。不知道其他行业是否能有效地进行这一类型的展示呢?

字体的美与实用

许翰文先生在自己的博客《為了解決實際問題而生的字型的》短文系列的开篇 Swift — 為了解決實際問題而生的字型(一)中开宗明义:

字體最引人入勝的地方,是它之於平面上多了一份實用性。

这关于字体(字型)的美的描述真是既简洁又准确。在有限资源的条件下,追求美的不懈努力总是无比动人。

关于字体字型的内容本博客之前涉及的不多,那么后面会尝试着写几篇。可能还是会从构成的方面为主谈谈?唉,这种时候只能感叹此话题可讨论的方面实在太多,而自己的知识储备又实在太不充足。

以上。