排版

中文排版的几个笨问题

标点为什么占一个格子,行距为什么总是不够

给这间书房排版,最先遇到的问题是标点该占多宽,而不是选一款什么字体。这类问题很笨,但绕不过去:它决定了每一行字与字之间的空隙,读者未必说得出来哪里不对,只是读着别扭。

一、标点也是一个字

西文的句号是一个点,后面跟一个空格;中文的句号是一个圆圈,占满一个汉字的宽度。这不是排版的怪癖,是文字系统自带的:方块字等宽,标点也得进这个格子,否则一行里会出现大小不一的洞1。

于是中文排版必须处理两件事:

  • 避头尾。行首不能是「,。、;:)」这类标点,行尾不能是「(『「」这类。遇上冲突,要么把字挪到下一行,要么压缩前面的字距2。
  • 标点挤压。两个标点相邻时(比如「。」后面紧跟「」」),各占三分之二甚至半个格子,避免中间空出一大片。

浏览器默认不做这些。要做得靠 CSS:text-spacing-trim 是较新的属性,Chrome 支持得比较好,Safari 还在追;成熟的方案是自己写一套行首行尾的规则,或者干脆交给一个专门做中文排版的库3。

「夫人之立言,因字而生句,积句而成章,积章而成篇。」

—— 刘勰《文心雕龙·章句》

字、句、章、篇,四层各有各的边界。排版做的事,说到底就是把这几条边界画出来,让读者不用自己去猜。

二、缩进几格

段首缩进两个汉字,是现在中文书籍的通行做法。源头说法很多,不必纠结——真正要紧的是:同一篇文章里只用一种。

段首缩进和段间空行,本质上在解决同一个问题:告诉读者「这里断了」。两个一起用,读者会分不清这是分段还是分节,眼睛得多做一次判断。这间书房选的是段间空行,段落不缩进,代价是丢掉了一点纸书的味道。

三、行距与字号

西文正文的 1.4 到 1.5 倍行距,在中文上往往显得挤。原因很直接:方块字的字面率高,笔画几乎填满了字格,行与行之间没有天然的空白;拉丁字母有小写字母的升部与降部,行距里本来就藏着空隙。

所以中文正文的行距要给到 1.8 到 2.0。这里说的倍数,是相对字号而言:字号 17 像素、行距 1.95,实际行距就是 33 像素左右。把留白分成层级来给、而不是一律加厚,这个想法是从造园那边来的,那边 有一节专门讲。

用途字号行距行宽
正文(桌面)17px1.9532 字
正文(手机)16px1.9随屏幕
注释与脚注14px1.7同正文
二级标题26px1.35不限
代码块14px1.688 字符

行宽那一列不好省。正文行宽超过四十字,读者读完一行回头会找错行首;代码块超过八十八个字符,手机上一定横向滚动。行宽其实还拖着速度:回头找一次行首,就是 一篇文章要读多久 那个公式里算不进去的一笔。

四、把标点打对

排版规则再细,标点打错也是白搭。三个最省事的习惯:

  1. 中文输入法下,[ 与 ] 直接给出「」;Shift + 4 打出来的是人民币符号 ¥,不是美元符号。
  2. 省略号用「……」两个三连点,不要敲六个句点。
  3. 破折号用「——」两个全角横,前后不加空格。

中英文之间别手打空格

手打的空格在换行处会被吞掉,字体一换还可能变成双倍空隙。空隙交给 CSS,正文里只写一个字挨一个字。

三组墨线画成的段落示意:段首缩进两字、行距约字号的 1.9 倍、行尾有占位的小方点
图注:墨线示意三组段落,段首缩进两字,行距约为字号的 1.9 倍,行尾的小方点表示标点也占一个格子。

五、一份校对清单

每次发文章前过一遍,五件事,两分钟:

  • 全角标点,没有半角逗号混进来
  • 引号成对,单双不混用
  • 省略号、破折号写法统一
  • 中英文之间不加空格,交给 CSS 处理
  • 数字与单位之间不留空格,但量词紧跟
  • 行首行尾的标点处理,目前仍靠浏览器

排版是手艺活,规矩多但不神秘。难的不是知道这些,是在几百个段落里一致地做到。

Footnotes

  1. 国标《标点符号用法》GB/T 15834—2011 对引号、书名号、省略号、连接号都有明确规定,写文档时可以拿它当依据,不必凭记忆。 ↩

  2. 「避头尾」是中文排版的旧称,日语叫「禁則処理」,西文叫 line breaking rules。三个名字,解决的是同一个问题。 ↩

  3. W3C 的《中文排版需求》(简称 clreq)系统整理了这些规则,其中关于行首行尾标点的章节最值得看。 ↩

关联4

知识图谱

局部图谱 · 点节点跳转