Update 10/19 18:18: 增加 CJK 字体的语言变体一段

文字是数字时代人们在屏幕上看得最多的视觉元素之一,但在网上冲浪的时候,会发现不少文本令人血压爆表——有些是内容问题,有些是外观问题。因此笔者试图整理了:当我们看到一段文本时,期望这段文本满足的一些要求。所有要求划分成了内容和外观两类,且均按某种达成难度或正式程度排序。

当然,不可能要求聊天随手打的话标点符号完全合乎国标,也不可能要求在点阵屏上显示的文本有各种行距微调和连字,所有的要求都要结合具体环境和场景。

不过我自己的 Blog 都不能说做到这些要求,所以本质还是图一乐。

感谢某萨卡班同学提供了这个十分高级的文章标题。

内容——还得从小学语文说起

  • 正确使用的、地、得及类似高频同音字
      “的地得”警察出警!“在再”警察出警!还有“带戴”、“做作”等等。
  • 不打错别字
      现代人通常用拼音或五笔打字了,老年人可能会用手写。同音错别字在拼音用户中十分常见,而形近错别字在五笔/手写中较常见。
  • 不写(过于明显的)病句
      现在句式杂糅已经快不算病句了,但过于严重的病句,比如“打造更大,更疯狂,更搞笑”这种直接丢中心词的,或句子前后主语不统一造成逻辑混乱、阅读困难的病句还是得改改。
  • 规范使用标点符号
      一般打字聊天、发短评时,用空格代替一切标点符号是没有什么问题的。但上网写长评论或者帖子时,正确使用标点符号可有效提高可读性。
  • 正确使用成语
      随着近年略有“劣币驱逐良币”色彩的一些词典修订,很多常用误义被添加到了易被用错的成语的词项中,使这些误义被“洗”成了正确用法,因此这一条要求似乎显得不那么重要了。
  • 避免欧化汉语
      外文文稿读多了难免反过来影响中文的表达。这本身并没有太大的问题,因为中文也是一门演变之中的语言。但如果程度之深,让没有接触过大量外文文本的人认为不自然甚至理解困难,则值得商榷了。
      句子成分的名词化(比如笔者正在写的这个句子)、句子结构的复杂化、介词的滥用、被动句比例的上升、句子长度的增长均是这一点的体现。笔者的文本也显著地呈现出这些特征,而“纯”中文母语者阅读的感受就是“不讲人话”。这和部分人所谓的“语言纯洁性”无关,更多是语言习惯和理解难度上的问题。语言纯洁性是个伪命题,但写的文段是否晦涩难懂则是实打实影响阅读体验的。

外观——排版和文本渲染没有那么简单

  • 正确调用编码,不乱码、不漏字形、不出“豆腐块”
      这是最最起码的要求了,不出现乱码,遇到特殊字符时文本需要正确印刷/显示(除非某些文字过于特殊,或用的标准过于新,造成设备上没有这一字体)。
  • 遵守 CJK 禁则
    • 所有点号和所有“成对标点符号的结束符号”不能在行首、所有“成对标点符号的开始符号”不能在行尾(称为“避头尾”);
    • 破折号、省略号通常不会分立在两行上;
        通常上述规则是由文本排版引擎的挤进/推出功能自动完成的,从日常的浏览器、Word,到专业的 InDesign、LaTeX,均能自动处理避头尾问题。遗憾的是部分本土聊天工具,如微信,连最基础的“避头尾”禁则都做不到。
  • 排版格式统一
      Word 排出来的文档,如果不注意,常常排版不统一。诸如间距忽大忽小、左右间距不对称、缩进不统一、字体不统一等问题,虽不影响阅读,但会让笔者十分难受。更别说如果 Word 中插入了表格、列表等元素,各种间距的不统一可谓一目了然。
      因此笔者如果必须用 Word 排文稿,则通常会先写好纯文本的内容,再集中进行排版,或在完成草稿后,开一个全新的文档,把内容不带格式地搬过去,集中重新排版。这里顺便岔一句,打某些特殊符号时建议上网查下打法,笔者真的有人见过用上标的字母“O”代替 °C 中的 ° 的。
  • 正确使用全半角字符,全半角字符之间确保合理间距
      全角半角通常分别指的是字体的纵横比为 1:1、2:1 的字形,即字面分别是正方形或细高的长方形的字形。同时笔者还有个未考据的怀疑:在早期计算机简单的文本显示,如控制台或点阵屏中,可能会把单字节字符全部当半角字符、双字节全部当全角来确定文本长度,这样似乎不需要保存各个字符的实际长宽就可以决定文本的显示长度了。但现代字体多用比例字体而非等宽字体,且即使是等宽字体,其西文字符部分与 CJK 字符部分也未严格按 1:2 定宽,因此全半角更多是一个视角上的大致长度比例,而非早期精确的半角:全角=1:2 宽度。
      和日文文档的排版不同,简体中文横排文本通常很少使用全角欧文与数字字符,而标点符号的选取则和周围是中文还是欧文句子决定。中文环境通常使用全角标点,除非完整的英文句子内。
      全半角文本之间通常会留一个间距,这一间距比普通的字与字的距离更长。Word 和 LaTeX 会自动插入这个间距。但网页排版通常不会自动完成,因此需要手动插一对空格。如果网页全半角文本紧密相排,会显得过于紧凑。全角标点周边是个例外,通常不插空格。除了手动插入空格之外,亦有 pangu 系列的工具可以自动插入空白。
      关于这一条,强烈建议阅读《中文文案排版指北》
  • 正确使用 CJK 字体的语言变体
      Unicode 中,许多在简体中文、繁体中文、日语、韩语中有对等关系,但存在书写差异的字被归到了同一码位。如果使用错误的字体语言变体绘制这些汉字,在对应语言的母语者看来就会显得怪怪的。
      因此对于单一变体字体,如中易宋体,不应该将之用于绘制其它语言文本,比如不应该用中文字体绘制日语文本。对于多语言变体字体,如思源黑体,应该根据文本的语言切换对应的语言变体(如 Source Han Sans SC)。HTML 的 lang 属性能做到自动选择对应语言的默认字体来渲染。
  • 正确使用衬线、非衬线、等宽字体
      西文和中文均有衬线(Serif)与非衬线(Sans-serif)字体之分,中文的明朝体/宋体属于前者,而哥特体/黑体则属于后者。衬线字体的笔画首尾有装饰性的部分,常常用于长段正文,显得正式或“古典”,且适宜连续阅读。非衬线字体笔画首尾无装饰,常常用于艺术设计,显得较为现代。不过近年屏幕显示大段正文,非衬线字体也越来越多了。
      等宽字体与通常的比例字体不同,所有半角字符的宽度通常相同,全角字符宽度本就相同。有部分字体甚至实现了全半角 2:1 长度(如等宽更纱黑体)方便中英文对齐。这产生了独特的视觉效果,其并不适用于大段西文正文,但适合于写代码、终端/控制台操作等需要字符对齐的场景。另外由于打字机的字模大多等宽,因此也可以用于模拟打字机效果。
  • 使用美观的字距、行距、段距、缩进、连字、断行
      排版中的各种距离会强烈地影响文本的视觉效果。
      字距通常由字体的设计者预置好,不需要特别修改。但需要注意的是许多比例字体的西文部分有设计者手动调整的 Kerning,例如一串 VAVAVAVA 常常会因为 Kerning 而排得紧凑一些。渲染时应当调用这些 Kerning。
      段距和缩进都是为了视觉上划开段与段。西文排版常常使用比行距稍大的段距来区隔段,而中文的纸面排版多用段首行两字缩进来达成此效果。不过网页端即使是中文,除了处理比较困难的情况,似乎段距比缩进还要流行一些。可惜由于 WordPress 缺乏硬回车后的距离设置,本文列表中的长段文本的分段还是用的两全角空格。
      连字和断行一般是西文排版需要,连字通常由字体提供,而 LaTeX 用户最喜欢吹的一个点之一就是 TeX/LaTeX 的西文断行与加横线的能力强于 Word 和 InDesign。在遵守了 CJK 禁则的前提下,中文对断行通常较宽松,并不存在禁止在词的里面断行的说法。
  • 使用美观的行长与分栏设置
      人眼跟踪一行的能力是有限度的,过长的行长会造成读者容易读串行。即使用户有大宽屏,也不应该把文本从屏幕最左端通行排到最右端,而应该直接两边留白,例如中间设置 max-width。具体的最佳字数或行长笔者也没法给出定值,一个参考是 42 个汉字。《字谈字畅》有一期 Podcast 专门讲这个问题。
      在纸面或 PDF 的排版中,解决行长的方式则通常是分栏而非留白。国内的杂志通常都会分两栏或三栏。
  • 纸面排版避免孤字孤行
      一行只有一个字或一个字加标点称为孤字,一段最后一行为一页的第一行称为孤行。网页排版时由于阅读设备尺寸差异,难免出现此种情况,但在纸面 / PDF 排版时应避免这种现象。
  • 启动字体抗锯齿与小字号点阵化
      字体文件描述的通常是矢量的字形,而这些字形大概率最终是要显示到屏幕上的。显示时将这些矢量图光栅化的时候,会遇到边缘部分的像素“介于黑白之间”的问题。如果“非黑即白”势必会造成难看的锯齿,因此有各种抗锯齿技术,通过灰度甚至彩色的渲染,让阅读者产生“一半黑”的视觉效果。
      当字小到一定程度时,简单地应用抗锯齿也不能拯救渲染效果了,字体细部可能会发虚。大部分字体内置了大量“小程序”——Hinting,会按照字号动态修改字形的矢量轮廓以实现更好的渲染效果。有的字体更进一步,在一些小字号直接提供点阵字体,这下整个矢量渲染都不用运行了。
      Hinting 和点阵字体较为见仁见智,因此诞生了 MacType 这类程序。总之渲染文本的时候应该合理运用这些工具,以期获得更好的显示效果。

参考文档


不想被自己的惰性打败。