现场纪要
[Page 1] 大家好,今天我分享的主题是:《中文排版需求》的进展。我是钱争予,W3C 中文排版工作组的成员,目前也是《中文排版需求》的编辑之一。
[Page 2]《中文排版需求》关注的是什么呢?所谓「中文」,实际上指的是以汉字为核心的书写系统;而所谓「排版需求」,其实是泛指各种字体排印的需求。
[Page 3]「字体排印」这个词,是 typography 这个英语术语的一种翻译方式。它本身是一个生造词,是由「字·体·排·印」四个独立的词,复合构成的。这种翻译方式的最大特点,就是用比较直白的方式,很全面地覆盖了 typography 这个术语的方方面面。今天的分享,我会尝试从「字·体·排·印」这四个方面来归类和整理具体的内容,跟大家分享过去大概两年时间内,《中文排版需求》这份文档的进展情况,以及我们编辑组的一些工作方式和关注的重点。
[Page 4] 其实,我今天的分享还有一个副标题,叫做「中文字体排印需求的现状」。因为我相信,通过整理和回顾编辑组的工作,我们可以非常直观地感受到当下 web 中文字体排印需求的真实现状。目前,编辑组很多工作,都会围绕 GitHub 的 issue 和 pull request 来展开。所以,在分享的过程中,我也会把相关的 issue 或者 PR 的编号写在幻灯片的左下方,方便感兴趣的朋友去检索。好,下面我们就进入正题——
[Page 5] 首先就是「字」。字,指的就是文字,从活字印刷到当下的计算机排版,文字始终都是字体排印的基础。
[Page 6] 在 web 的语境中,或者更一般化地来说,在信息可交换的背景下,我们无法回避的一个基本问题就是:一个具体的字形,它所对应的抽象字符究竟是什么——这个抽象字符,在 Unicode 的语境下,其实就是码位。我们都知道,中文用户分布的地区很广,包括中国大陆、港、澳、台、新加坡,那么如果我们再去看看「汉字」的使用范围,就就要扩展到日本、韩国、越南等更大的区域。不同地区就会有不同的行业传统、字体排印术语、本地化的编码字符集标准——即使都放到 Unicode 的语境下,不同地区对同一字符所选择的 Unicode 码位也有可能不一致;如果把字体设计的差异也考虑进来,情况会更复杂一些。——这其中,有一类问题,我相信大家都遇到过,那就是标点符号。
[Page 7]《中文排版需求》在修订的过程中,也注意到了一些标点符号在字符选择上存在分歧。比如,省略号、浪纹线、间隔号,这些符号实际上有多种字符可供选择。无论是字典也好,还是我们的国家标准 GB/T 15834《标点符号用法》,这些权威文献都没有明确规定某个符号应该选用哪个计算机字符。因此,在多个备选项之间,是没有标准答案的。《中文排版需求》要做的,就是承认这个现状,并且陈述这种现实状况的复杂性。我们的修订过程,也就是去收集、并且去推敲每一个备选字符的合理性,最终将合适的备选项,尽可能全面地收录到文档里面。
[Page 8] 接下来是第二个方面,「体」,也就是字体。《中文排版需求》侧重关注的是正文字体。因为相比于美术字,正文字体在内容呈现和信息传达中具有更基础的地位,同时,正文字体在设计和工程两方面的实践中,也都表现出更强的规范性和更稳定的分类体系。
[Page 9] 目前市面上的中文字体产品可以说是五花八门,覆盖了非常多的应用需求。其中,很值得我们关注的是「思源」这个开源字体项目。这个项目教科书式地向我们展示了 CJK 字体在字体工程方面的技术空间——包括:
- 怎样去处理不同地区之间字形或笔画规范方面的差异。
- [Page 10] 怎样用 OpenType 特性正确地实现标点符号的横排版本和竖排版本;怎样结合 Unicode 变体选择器(variant selector),在纯文本环境中针对不同地区的排版需求,去优化标点符号。
- [Page 11] 同时,思源黑体、思源宋体也从去年开始,都陆续发布了可变字体的版本——向我们展示了可变字体技术在 CJK 正文字体上的应用。而可变字体技术其实也是 webfont 的重要基础设施,比如它带给我们最直观的一个优化,就是有可能大大缩减字体文件的体积。
但是在这些基础之上,中文正文字体的需求,在 web 上还是没有被完全满足——这也是《中文排版需求》持续关注的点。
[Page 12] 我们要知道,中文的正文字体,有四大类最基本的风格,也就是:宋、黑、仿、楷。宋体和黑体,长期以来都被对应到西文的 serif、sans serif 分类上,已经成为事实标准。仿宋 fangsong 也已经被写入到 CSS Fonts Module Level 4,成为了一个新的、独立的 generic family。但是楷体的情况呢?楷体,作为正文字体的一个大类,实际上它的重要性不亚于其他三类——一个最简单的例子就是,我们初等、中等教育所使用的语文教科书,其中最基本的正文字体就是楷体。楷体是否能被简单地对应到 CSS 的 cursive 分类,这里其实是要打一个问号的。因为,作为正文字体的「楷体」实际上是一种「正体字」,而西文的 cursive 常常被类比成汉字的「行书」或「草书」。因此,这里实际上涉及到文字学,以及书法和字体设计相关的争议,还需要进一步的讨论。
[Page 13] 回到《中文排版需求》的文档本身,我们进一步修订了四大类正文字体的介绍和用途,并且更新了字体样张。新版样张遵循这样的原则:
- 展示用的文案去除标点符号,并且繁体和简体各占一半;
- 宋黑仿楷,每一类都选入同等数量的示例字体,并且在同一类中,收录不同粗细的字体实例;
- 尽量选择获得途径相对简易的字体,方便我们的开发者和设计师快速查照——具体来说,我们选了常见操作系统或是大众软件内置的字体,以及一些公开渠道可获得的教育用途的字体,还有一些则是业界知名度相对较高的或是大厂商出品的字体;
- [Page 14] 在字形规范上,尽可能均衡去地覆盖台湾的国字标准字体,大陆的《通用规范汉字表》字形,以及所谓的「旧字形」(也就是传承字形);
- 另外,我们也希望样张能更多地去覆盖不同的、有细微风格差异的字体设计——比如:黑体会在笔画造型上兼顾照排时代传承下来的喇叭口笔形和当下更流行、更具现代感的纯等线笔形;仿宋体会兼顾仿古的聚珍仿宋版的正方骨架,和偏现代的长仿宋骨架——这样做的目的是,让非母语的开发者或设计师,都能够对中文字体的四大类有比较全面的感知,而不是把对字体分类的认知,局限在少数特定的字体文件上。
[Page 15] 再接下来是「排」,排版——这方面可以说是《中文排版需求》篇幅最多的内容,也是最核心的东西。排版的细枝末节非常多,大到页面构成、网格布局,小到两个具体的字符之间的相对位置应该怎样安排——都是排版的问题。因为时间有限,今天在这里就只举几个代表性例子——这些也是我们在修订过程中,所遇到的比较重要的细节:
[Page 16] 第一个是排版方向问题。这个问题在西文排版中实际相对简单。但是中文排版存在着两种同等重要的书写方向,也就是所谓的「横排」和「竖排」——横排中文,行内字符是从左到右递进,段落是从上到下递进,书籍的页面是右起左翻(右半边是起始页,向左侧翻页);竖排中文,行内是从上到下,段落是从右到左,书页则是左起右翻。
- 书写方向,首先关系到我们如何定义页面的正反面(所谓的 recto page/verso page)——这会直接影响 EPUB 类的电子书,以及其他分页布局的应用场景。如何定义「正面」(recto page),实际上就是在一个分页布局的体系内,如何定义「起始页」的问题。
- 同时,表格排版中也有相关问题。我们会发现,港台地区,倾向于把垂直的一组单元格叫做「行」,而大陆正好相反,倾向于把水平的一组单元格叫做「行」——这是因为,不同地区参照的默认书写方向是不同的,港台选择的竖排的参考方向,大陆选择横排的参考方向。对此,我们借鉴了 CSS 逻辑属性(logical properties)的定义,引入了「逻辑方向」——不管横排还是竖排,统一地把文字的递进方向称为「行」,把段落的递进方向称为「列」。
- 行列的「逻辑方向」表述,在过去的中文字体排印资料中,其实非常少见。这次采用这样的措辞方式,编辑组也是来回讨论了几次,同时也有来自社区的贡献者跟我们一起参与相关的讨论和修订。通过这样的修订,我们最终将横排和竖排两种模式调和起来,比较自然地去解决不同地区之间「行」和「列」的命名冲突。
[Page 17] 第二个是中文排版的网格问题,网格系统本质上是一套模数化的布局系统。我们以横排为例:
- 横排中文在水平方向(行内文字的递进方向),需要以正文的字号作为模数,也就是一些设计师很强调的规则,叫做「行长或栏宽是字号的整数倍」。
- 而在垂直方向,则有一套所谓的「占行」规则。这套规则跟西文排版的垂直韵律(vertical rhythm)很相似。虽然这部分需求实作的程度还不够完善,但已经有 CSS Rhythmic Sizing 草案在推进。
[Page 18] 第三个就是很多排版技术专家、字体排印爱好者都非常关注的 micro-typography 需求——所谓的「微观字体排印」。比如标点挤压、标点悬挂、空格占字这些细节规则。在这方面,《中文排版需求》也在陆续的补充和细化,整体的原则是:首先从原理出发,提供排版方法的模型或构造思路,避免直接抛出一些数值;同时给出一些实际的应用案例,供开发者们参考。
[Page 19] 第四个是「行间」以及「字间」排版,一种相对特殊的排版需求。
- 在古籍、传统文献中,行间的排版常常用于标点(比如活字印刷时代有所谓的「单面装」「双面装」,这里的单面、双面,指的就是在一行的单侧或者是两侧排列标点符号);而字间的排版,常常用于注释(比如,古籍中的「双行注」,就是在竖排的行内,也就是字与字之间来排版注释文本)。
- [Page 20] 现代中文文本中,一方面我们保留了一小部分的行间标点(比如下划线、着重号),另一方面,又衍生出了一类非常重要的排版需求——那就是拼音/注音的排版。有时我们也借用日文排版的术语,把这类需求统称为 ruby 排版需求。而注音排版实际上有地区差异,在大陆这边常见的是行间的排版——比如在横排的语文课本里,拼音会标注在汉字的上方;而台湾注音符号的排版传统,则是固定排在汉字的右侧,所以放到横排的环境中,台湾的注音符号就会出现在行内,夹注在字和字之间。
- 而今天,ruby 排版技术之所以重要,是因为它还有新的活力。比如在一些亚文化社区,会使用 ruby 来呈现「字音分离」「字义分离」的表达方式——也就是所谓的「写作 A 读作 B」,甚至是「写成一个词、标注成另一种语义」之类的语言表达方式。
[Page 21] 最后来讲「印」。「印」顾名思义是「印刷」的意思。放到 web 排版的语境中,或者更广泛的数码媒介上,「印」指的就是内容的最终呈现——技术上有时也会把它叫做「渲染」。其实相对来说,《中文排版需求》不太直接去关注「印」这方面,因为内容的渲染和呈现,跟终端媒介技术有很强的关联。而我们这份需求文档的主旨,是阐述通用的中文字体排印需求,不会刻意跟某一类终端媒介高度耦合。
[Page 22] 不过还是有一些问题,会老生常谈。比如 Unicode 字符集的一个历史遗留问题:部分中文标点和西文标点共用码位,像破折号、省略号、引号这些,相信大家日常也很容易注意到。另外还有一些是比较容易被忽视的,比如连接号(包括短横线、一字线),以及间隔号等等——这些符号也是中西文共用码位。这种在编码字符集层面码位共用的设计方案,会间接导致这些中文标点符号的字形渲染结果可能不符合预期,甚至有的时候会出错(比如一条完整的破折号会断成两截)。这个问题,在多文种混排的场景下尤其明显。而在 web 上,多文种混排实际上是一个「默认环境」,我们不可能也不应该限制用户在页面上使用的语言或者是文字。针对这些问题,我们会通过差距分析文档进行整理,并持续跟踪。
[Page 23] 另外,如果我们把无障碍也考虑进来,实际上「印」是可以超出「视觉」这个范畴的。大家应该还记得,在「排版」那部分的最后,我们提到了 ruby 相关的问题。就在八月份的《中文排版需求》编辑例会上,我们的编辑之一 Bobby(董福兴),还特别提醒我,希望可以借今天的场合提一下 ruby 跟无障碍技术的相关性。目前,日文排版工作组就正在推进一份草案,叫做《包含 ruby 的电子文档的文字转语音需求》(Text to Speech of Electronic Documents Containing Ruby: User Requirements)。由于日文排版和中文排版内在的关联性,这份文档其实也天然地也覆盖了中文方面的一些需求。在座的如果有兴趣,也欢迎多多关注。
[Page 24] 最后的最后,one more thing,我想再提一下术语和翻译。《中文排版需求》在过去的一年多时间里,也在术语的整理和规范性方面花了不少精力。就像前面提到的,中文覆盖的地区很广,各地术语体系事实上是存在着各种差异的;甚至就是一些日常行文的措辞和表达方式,也不完全统一。
[Page 25] 如果大家仔细去阅读,会发现《中文排版需求》目前的文本,实际上就存在这样的问题,比如一些文案,繁体和简体的表述不一致。另外,还有英语翻译的问题。我们的文档,起草用的原始语言是中文,但英语版本是它最终在整个公共领域中具有核心参考地位的版本。所以翻译问题,关系到对文档内容的最终理解和解读。——那么,怎么改进这些问题呢?除了日常的校对和修订之外,编辑组也开始尝试从内部的编辑体例着手,一步步将术语和翻译问题进行规范:
- 如果一个术语或一些表述,不同地区的用户都可以认同,并且语义上不会产生歧义,我们在文档中就会减少繁体中文和简体中文两个版本之间的差异,尽可能把措辞统一,只在字形上区分繁体和简体。
- 对于有明确分歧的术语,繁体方面优先以台湾教育部相关文献为参考,简体方面优先以大陆国标为参考,同时,我们也会从当下的事实标准以及字体排印行业的传统行话里面,吸取一些经得起推敲的术语。
在英语翻译方面,我们还会结合 W3C 的技术文档以及 Unicode 的术语体系来处理。比如不久之前:
- 我们借鉴了 Unicode 第 11 号标准附件(UAX #11),将作为长度单位的「字宽」翻译成「M (em)」;
- 在编辑例会中,我们也讨论了行高、行距这组概念和 CSS 的半行间距(也就是 CSS Inline Layout Module 中的 half-leading 模型),讨论它们之间的统一性问题。
通过这些工作,我们希望《中文排版需求》可以让不同母语、不同书写系统下的设计师和开发者都能更好地理解中文字体排印的术语和相关的排版原理,以便更准确地去实现中文字体排印的需求。
[Page 26] 今天的分享就到这里结束,谢谢大家。照例广告一下,《中文排版需求》的文档大家可以随时访问和查阅:
- 左边就是文档的地址。订阅邮件列表,也可以持续追踪《中文排版需求》和编辑组的相关动态。
- 右边的 GitHub Pages 就是最新编辑草案的实时预览。如果大家有什么意见或是反馈,又或者想参与文档的修订和讨论,都可以通过 GitHub 的 issue 和 PR 功能来跟我们互动。
最后也再次感谢 W3C 北航团队和富侨的邀请,谢谢大家。
返回[会议总结页面]获取其他话题的会议纪要。
若您对上述内容有任何疑问或需进一步协助,请联系:讲者钱争予 <q@laerhsif.com> 或会议主办方 W3C 北航总部 <team-beihang-events@w3.org>。