
目录
不知道大家有没有听过这句话:
打字的時候不喜歡在中文和英文之間加空格的人,感情路都走得很辛苦,有七成的比例會在 34 歲的時候跟自己不愛的人結婚,而其餘三成的人最後只能把遺產留給自己的貓。畢竟愛情跟書寫都需要適時地留白。
我非常讨厌这句话。且不说中英文之间手动插入一个空格的做法本身就值得商榷,而且也没有任何官方规范规定中英文之间必须加空格,我就不明白加个空格怎么就有优越感了。诚然我认为中英文之间需要有一定的空隙,但空隙不一定是空格,加空格只是实现空隙的一种方法,而且可以说只是现阶段的变通方法。这里就说说我为什么不在中英文之间手动加空格,以及讨论一下现阶段我们还有没有其他手段可以实现这个中英文之间的空隙。
加空格的坏处 #
首先,加空格引入了无意义的字符,可能会影响文本的检索。虽然现在很多地方都支持模糊搜索,但并不是所有,总有这种情况比如“我的iPhone”和“我的 iPhone”就互相搜不到。英文单词与单词之间有空格,这是肯定的,因为从语义上来说就应该有空格,不然这就是一个单词,不是句子了。但是中英文之间,从语义上来说并不存在这个空格。空格本身是一个字符,只是显示成了“空格”的样子,现在你按键盘上的空格键,打出来的就是UnicodeU+0020空格,个人认为这是无意义的字符,“污染”了原始数据,很不优雅。
其次这个空格的宽度不便于控制,跟使用的字体、排版引擎都有关,而且常见的U+0020空格太宽了,这会破坏文本的整体性,影响阅读节奏。尤其是单字母和中文之间加上了空格,就会显得过于强调这个英文字母。请看以下例子:
前天下单了一件T恤,至今还没发货。
前天下单了一件 T 恤,至今还没发货。
上面应该是用比例字体(Proportional Font)显示的,如果用的是等宽字体(Monospaced Font),间距会更加夸张:
前天下单了一件T恤,今天还没发货。
前天下单了一件 T 恤,今天还没发货。
本来“T恤”是个很常见的词汇,应该是一个整体的,加上空格之后,显得过于强调“T”这个字母,整个句子读起来好像“T”要重读一样,我个人觉得是不太舒服。这种中英文混合的词汇还真不少,单字母的就有“U盘”“X光”“B超”等,还有“腾讯QQ”“UC浏览器”这种。咱就是说如果我其他地方都加了空格,这里应该也要加吧,而直觉又告诉我这里不应该有空格,真是纠结,不如都不加。
基于以上原因,我至今都是倾向不在中英文加空格,而且我认为实现中英文之间空隙的这个任务应该是排版引擎做的。不要以为这是什么登月级别的技术难题,MS Word就算是很古老的版本都能处理中英文之间的空格问题了,更不用说Adobe InDesign这种专业排版软件。Web这边,IE浏览器非常超前地提供了text-autospace这个CSS属性,可以实现增大中英文字符之间间距的效果,然而这个“黑科技”随着IE的逝去已经被人遗忘。至今我们日常接触到的软件界面、Web页面,还是处理不好中英文之间空隙的问题,不过现在终于看到了曙光,下面细说。
现状 #
很多大公司为了规范,会强制要求中英文之间加空格,比如微软就是坚定的空格支持者,Windows系统界面里的中英文都加空格了。GitHub上有一个中文写作排版风格指南,上面也是建议中英文之间加入空格,不过说到底这只是一种风格或者叫习惯罢了。那么有没有什么标准文件有针对这个问题的规定呢?
首先是2017年发布的我国新闻出版行业标准CY/T 154—2017《中文出版物夹用英文的编辑规范》,其中第八节对空格的规则描述如下,可见这里并没有规定中英文之间一定要加空格。
- 中文文本中夹用英文词语时,应根据所选用的中英文字体、字符间距以及排版的视觉效果决定英文词句与中文文字之间是否留有空格间距。如留空格,应保证体例的统一。
- 中文文本中夹用英文词句时,如英文部分之前或之后有中文标点符号,则英文部分与中文标点之间不设空格。
- 中文文本中夹用英文句子或段落时,英文句子或段落内部应按英文排版规则留空。
再来看看Web这边,《中文排版需求》(Requirements for Chinese Text Layout,简称CLREQ)的初稿已于2015年发布,目前最新版本中关于横排的中、西文混排配置说明如下:
原则上,汉字与西文字母、数字间使用不多于四分之一个汉字宽的字距或空白。但西文、数字出现在行首或行尾时,则无须加入空白。
注意这里用词是“空白”以及“字距”,而不是“空格”。CLREQ是非常重要的文件,有了这个,W3C可以一边对着文件中列出的排版需求,一边对着现阶段的Web标准,出一个差距分析(Gap Analysis),其中issue401就是关于中英文之间空格的问题。可见由于有手动加空格这个临时手段,这个问题的优先级仅为Needs work for advanced use。
解决这个问题的CSS属性叫做text-autospace,它的定义在CSS Text Module Level 4中。这个应该很早之前就已经提出了,不过终于,Chrome在2023年底率先实现了这个功能,从Chrome 120开始只要开启chrome://flags/#enable-experimental-web-platform-features这个flag就可以体验了,Edge等同理。终于终于,9月份发布的Chrome 140已经正式支持了text-autospace属性,最新的Safari也已支持,本来还以为Firefox动作会比较慢,我有关注一个20年前创建的issue:289130,本来一直没啥动静,几天前点进去发现有人说Firefox 145已经支持了,真是有点被吓到了😂。目前只要用Firefox Beta版本或者开发者版就能体验了,正式版也应该很快了。截至本文发布时的浏览器支持情况如下,作为一个渐进增强功能这已经非常可用了。

Can I use text-autospace?
按照CSS规范text-autospace: normal才应该是默认,不过Chrome现阶段默认值是no-autospace,即浏览器不会默认加空格,跟之前的行为一样,因此网站需要自己申明text-autospace: normal才能看到效果。本站就已经添加这个属性了,如果你用的是最新Chrome内核的浏览器或者Safari,或者Firefox 145及更高版本,应该就能看到本站中英文之间已经自己加上1/8全角汉字宽的空隙了。我觉得这个间距非常舒服,既不会像没间距那样显得过于逼仄,又不会像手动加空格之后那样过宽,给人一种过于强调英文部分的感觉。
写在最后 #
每次看到这样的千古难题取得进展就非常激动,但是必须要承认路还很长。本文当然不是建议你也不要加空格,毕竟在现阶段,加空格确实是有用的,但是我们必须要明确这只是一个变通方法,更重要的还是推动排版引擎的进步,而不是把变通方法当成理所应当,还谜之优越感。