My avatar

北雁云依的博客

My avatar

北雁云依的博客

决不跪在地上
以显出刽子手们的高大
好阻挡自由的风

RSS
Article cover
· 浏览

移除盘古:为什么你应该停止在中西文间使用空格

下文将\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

  1. https://github.com/vinta/pangu.js/blob/88d2e996bb4d87d1998e3eea1615659a847cc1d3/README.md 本文进行了台湾繁体字-中国一简字翻译,并替换直角引号为弯引号,因此并非原文。

  2. https://github.com/BeiyanYunyi/Astro-blog-Lithium/commit/2e73e07795171c81c0d42d5fdbb715c5f73f17fe

  3. https://www.bilibili.com/video/BV1Lr4y127qp/https://www.bilibili.com/video/BV13M4y157Xc/

  4. https://developer.chrome.com/blog/css-i18n-features#inter-script_spacing_text-autospace 2

分享

复制此页面地址到邦联宇宙搜索框以在邦联宇宙分享本文:https://blog.yunyi.beiyan.us/posts/StopPanguing

在本站发言,即意味着你同意评论政策(最后更新于2025-06-22)。