下文将\u0020( )称为“空格”,将中西文间距称为“空白”。
一直以来,在中西文混排的场景下,一些人习惯在中西文间插入空格来分隔——即所谓“盘古之白”。据pangu.js的说法:
汉学家称这个空白字符为“盘古之白”,因为它劈开了全角字和半角字之间的混沌。另有研究显示,打字的时候不喜欢在中文和英文之间加空格的人,感情路都走得很辛苦,有七成的比例会在34岁的时候跟自己不爱的人结婚,而其余三成的人最后只能把遗产留给自己的猫。毕竟爱情跟书写都需要适时地留白。1
我不推荐这么做,并且已经在近期的commit2中移除了本博客所有中西文间的空格,同时启用text-autospace。排版的需求是插入(通常为1/4个汉字宽度的)空白,这确实没错,但手段不该是空格。
空格并不对应着空白。首先,空白本身的宽度是可变的,可以出于标点挤压而改变,不一定是1/4。oooooohmygosh在Adobe Illustrator中的做法是,将中西文间距最小值设定为 1/8个汉字宽度,最大值设定为1/2个汉字宽度3。其次,就算定死要一个1/4的空白,一个空格的宽度也并不一定对应着1/4个汉字。例如在中易宋体(SimSun,Windows里的“宋体”)和绝大多数等宽字体里面就是1/2个。你并不知道读者的系统和字体是什么,所以你无法保证空格的宽度。
插入空白应该是排版引擎的事,而不是一段纯文本里该做的事。如果你会嘲笑那些“手动加空格进行文字居中”的人,那么你也应该嘲笑那些“手动加空格实现中西文间距”的人——因为这两种人干的是同一件事情:企图在纯文本里做排版引擎做的事。
——但手动插空格是迫不得已,是因为引擎不支持。对吗?不对。因为Microsoft Word支持、微信支持,因为iOS上所有原生组件都已支持,而浏览器们也终于在2025年支持了。Firefox 145(2025-11-11)和Chrome 140(2025-09-02)引入了text-autospace属性,将其设置为normal,即可让浏览器自动在中西文间加入空白。text-autospace目前默认值不是normal(默认不启用),但在未来会是4。启用以后,浏览器会自动在中西文间加空白。
——至少手动加入空格是兼容性最好的做法——也不对。至少在web领域,它并不向后兼容:目前手动加入空格会阻碍浏览器的text-autospace发挥作用4。根据标准,text-autospace可以指定replace属性,将中西文间的空格替换为内置空白。但这一特性目前只是标准,暂没有浏览器实现之。考虑到HTML中的空格逻辑本就一团乱麻,这个特性很可能会被长期搁置。
你也可以试试在其它支持自动空白的环境里试试“自动加空白”和“手动插空格”的区别。在绝大多数情况下,自动空白和手动空格产生的行为都是不一致的。
总而言之,现在在中西文间插空格的理由已经很不充分了。除了在那些仍然不支持自动空白的环境以外,也许就剩下一个理由:作为语法上的分词点,而不是作为排版上的空白——换言之,在中西文交界点上,遵循西文的习惯,在单词间插入空格。这就见仁见智了,暂且不表。
Footnotes
-
https://github.com/vinta/pangu.js/blob/88d2e996bb4d87d1998e3eea1615659a847cc1d3/README.md 本文进行了台湾繁体字-中国一简字翻译,并替换直角引号为弯引号,因此并非原文。 ↩
-
https://github.com/BeiyanYunyi/Astro-blog-Lithium/commit/2e73e07795171c81c0d42d5fdbb715c5f73f17fe ↩
-
https://www.bilibili.com/video/BV1Lr4y127qp/、https://www.bilibili.com/video/BV13M4y157Xc/ ↩
-
https://developer.chrome.com/blog/css-i18n-features#inter-script_spacing_text-autospace ↩ ↩2