中西文之间需要间隙
别名: 中西间距 · text-autospace · 汉字与拉丁间隙
概念解释
「版本3.2已发布」里,汉字和阿拉伯数字、拉丁字母如果零间隙相接,字框会撞在一起:汉字自带一点肩,拉丁字母的侧轴承(sidebearing)却是按词内字母设计的,两种框贴上时,看起来像英文被塞进了汉字的牙缝。中西文之间要有一层薄间隙——大约四分之一到半个汉字宽,视觉上接近西文词距的一半——把两种脚本分开,而不是靠空格键随便敲一个英文空格,也不是完全不留。
这层间隙不是普通字距。字距调整的是同一脚本内部的疏密;这里调整的是脚本边界上那一条缝。
机制
汉字的方框把「字与字的空气」做进了字形左右的肩里,所以汉字之间通常不必再加空。拉丁词靠词距(word space)分词,字母之间只有很窄的侧轴承。混排时边界两侧用的是两套完全不同的分词法:左边假设「邻字已经自带缝」,右边假设「缝由空格字符来出」。两套假设在边界上同时落空,于是「的API」会黏成一块,像打字漏了空;反过来塞一个全角空格,缝又大到把一个词从句子里揪出来。
薄间隙的作用是承认这里发生了脚本切换,给眼睛一个「新的一团开始了」的信号,又不至于变成段落里的破洞。数字、单位、产品名、短英文是最频发的边界。连续的英文短语内部仍用西文词距,只在短语的两端、与汉字相接处留这层薄缝。缝加在短语外侧,不要加在 iPhone 的 i 和 P 之间。
排版引擎若支持 text-autospace 一类的自动空,会按脚本边界插入,比作者手敲空格稳:手敲的空格宽度跟西文词距走,往往偏大,而且拷贝到纯中文环境会留下莫名的洞。
边界
全部是拉丁的段落、全部是汉字的段落,没有脚本边界,谈不上这层缝。代码、公式、等宽数字串有自己的空法,不要用中西间隙去拆 user_id 或 3.14。专名若被当成一个商标图形(原样 logo),内部的中英也不要被自动空拆开。日文有时用不同的惯例(部分场合更紧),不能把中文的缝宽直接套过去。极小字号下,薄间隙可能被栅格吃掉,看起来像没加——那是渲染精度,不是「可以不加」。
怎么落地
- 在汉字与拉丁字母、汉字与阿拉伯数字的边界上留薄间隙;不要用全角空格,也不要完全贴死。
- 优先用引擎的脚本边界自动空,而不是让文案里手敲半角空格。手敲空格会随字体词距变宽,还会被拷贝带走。
- 英文短语当作一个块:只在块的两侧留缝,块内保持西文词距。
- 找界面里所有「中文 + 数字 / 英文」的邻居对,把间隙标成「无 / 薄 / 一个西文空格 / 全角空」。无和全角都算失败;一个西文空格偏大,通常也失败。只留薄缝的那些对,才是混排边界。