两端对齐在窄栏产生不规则字距
别名: 齐行 · justified text · 分散对齐
概念解释
两端对齐(justification)强迫每一行的第一个字贴左、最后一个字贴右。中间多出来或少掉的空间,引擎只能塞进词与词之间(有时还塞进字母之间)。栏够宽、一行里词够多,这些空隙可以被摊薄;栏一窄,一行只剩下三四个词距可调,有的间隙被拉成空洞,有的挤成粘连。段落里会竖着裂出一条条「河」(river)——空白碰巧连成的通道,把词流切开。
这条不谈齐左好不好,只谈:在界面常见的窄栏里,两端对齐几乎必然把字距变成噪声。
机制
一行的自然长度很少刚好等于栏宽。差量 = 栏宽 − 这一行所有字形宽度之和。齐左把差量留在行尾;两端对齐把差量除以这一行的可调间隙数。间隙数随词数下降。窄栏词少,每个间隙分到的差量就大,于是同一段里出现「这一行疏得像散落的珠子、下一行紧得像被挤过」。阅读靠词作为一个团被识别,词距若一会儿宽过字宽、一会儿窄过字腔,团的边界就在晃。
河是随机对齐的副产品:相邻几行的大间隙如果落在相近的水平位置,空白在垂直方向连起来,眼睛会顺着河往下走,而不是顺着词往右走。这是纹理被破坏之后的注意捕获,不是读者故意分心。
中文两端对齐更糟。汉字之间默认没有词距,引擎只能拉字距或依赖标点的弹性。窄栏里标点少的行几乎没有可调材料,只能把字与字拉开,方块变成一排等距的棋子,词(如果有的话)彻底消失。全角标点再混进来,弹性更加不可预测。
断词(hyphenation)是印刷里给两端对齐增加可调点的办法:多一个断点就多一个间隙。界面排版引擎的断词往往很弱,语言一多更弱,所以印刷里还能成立的两端对齐,到产品栏里只剩下硬撑。
怎么研究
把同一段在固定栏宽下分别排成齐左和两端对齐,量的不是「齐不齐」,而是词距的方差、河的条数、阅读速度。自变量:栏宽(或每行词数)、是否开断词、语言(西文 / 中文)。因变量:词距标准差、可数出的纵向空白通道、阅读速度和主观费力。
窄栏条件必须真的窄——每行三到六个西文词,或十来个汉字——才能看到不规则字距,宽栏上两端对齐的伤害会被摊平,得出「没问题」的假阴性。
边界
书籍内文、报纸多栏,在专业断词、光学边距和人工调行之后,两端对齐可以是正式文本的默认,那不是窄侧栏、不是手机正文。表格、导航、按钮组的「左右拉齐」是物件布局,不是段落两端对齐,不要混为一谈。最后一行通常不应被撑满(last-line-align),否则三两个词会被拉到行的两头。用户放大字号之后,同一像素栏里词更少,原来勉强可接受的两端对齐会突然出现河——动态字号会把宽栏变成窄栏。
怎么落地
- 界面正文、卡片说明、侧栏、对话框里的段落不要开两端对齐。尤其是已经偏窄的栏。
- 若品牌要求「左右都齐」,先加宽栏并启用断词,再看词距方差;方差仍然大,就回到齐左。
- 中文段落更不要开:没有词距可调时,两端对齐只能破坏字距。
- 把两端对齐的段落缩成很小的灰度图。若能顺着空白往下指出一条河,或一眼看出行与行疏密不同,这个栏宽下的两端对齐就已经失败。