行高过小导致上下行互相干扰
别名: 行间拥挤 · 行重叠 · vertical crowding
概念解释
行高小到一定程度,失败方式不是「看起来紧」,而是上一行的字侵入下一行的识别区。西文里是 g、y、j 的下行字母插进下面那行的 b、d、h;中文里是两排方块几乎贴面,笔画在垂直方向连成一片灰。这叫行间的拥挤(crowding):不是看不清单个字的分辨率问题,而是邻近轮廓把目标字的特征抢走了。
过小行高的症状很具体:阅读时串行、需要用手指或光标当尺子、段落变成一块分不出行的深色矩形。它和「行长变化时行高该怎么跟」是不同的故障——这里讨论的是已经低过安全线、行与行开始互相吃字的状态。
机制
识别一个字要靠它周围的空隙把轮廓从背景里切出来。垂直方向的空隙一旦小于字面自身的高度所要求的隔离带,上下行的笔画进入同一段拥挤区,视觉系统会把两行的特征混进同一个对象。西文的升部、降部是这种干扰的尖刺;即便「平均」行高看起来还有缝,局部仍会在降部最深的位置撞车。中文没有升部降部,但字面几乎铺满字身,默认行框里真正空着的只有一点点,同样的无单位倍数在中文里更早碰到干涉。
拥挤还有一条水平方向的亲戚:字距过紧时左右字符互相抢特征。行高过小是它的垂直版。两者叠加——紧字距加紧行高——比单独一种更伤,因为每个字的四面都在被邻居侵占。
过小带来的不是均匀的「全体变差」。干扰在行的中段更重:行首行尾还有空白当缓冲区,段落内部才是两行平行轨道贴得最近的地方。所以抽样看标题没问题,不代表正文中间三行已经黏上。
怎么研究
拥挤研究用的经典操作是在目标两侧(或上下)放侧翼字符,测量辨认正确率随间距下降的速度。行高实验不必上实验室侧翼,只要把行距逐步压下来,用逐字辨认或朗读串行作为观测。自变量:行高倍数、是否含降部字母、中文还是西文、字重。因变量:逐字正确率、串行次数、把上一行笔画当成本行一部分的错误。
Tinker 把过小行高列为阅读速度下降的条件之一,观察的是整页效率而不是单字拥挤曲线;两条线可以合看:整页速度掉下来的时候,往往已经能在局部看到升部降部相撞。屏幕阅读还要加一条:子像素渲染和浅色细字会让相撞更早出现,因为有效笔画比设计稿上的轮廓更糊。
边界
极短的一两行标题,即使行高偏紧,也没有「段落中部」可供干扰积累,问题会被字重和字号盖过去。等宽代码若要保持栅格对齐,行高往往受编辑器主题约束,拥挤要靠字号和字族来补,而不是把代码行距拉成散文。深色底上的细白字,拥挤会在比浅底更大的行距上开始——光晕让笔画视觉变粗。反过来说,已经松到行与行不再成段的行高,解决的是另一头的问题,继续加缝只会让折返失去轨道,而不是「更不拥挤」。
怎么落地
- 用含 g、y、j、p 的西文和含多横笔画的中文(如「量」「喜」「整」)做试样,而不是只用中性的无降部单词。相撞首先发生在这些字形。
- 在段落中部检查,不要只看标题或第一行。中部才是两行平行贴得最近的地方。
- 字距已经偏紧时,先松开行高再谈别的强调;四面同时被占的字无法靠颜色救回来。
- 验证:把段落缩成灰度图,看还能不能数出稳定的水平条带。条带连成一块深斑,行高已经低过干涉线。