分享

中英文混排时中文与英文之间是否要有空格?

 pgl147258 2014-09-25

梁海的回答(159票)】:

至今没有规范,只有习惯。

Adobe InDesign、Microsoft Word 等对中文与西文(这里用「西文」来泛指用空格分词的外文)混合排版支持较好的软件,都默认增大汉字和西文的间距。InDesign 的默认设置是 1/4 的全角空格宽度(遵从 JIS),也就是约等于一个半角空格。

但大多数情况下我们没有这样专业排版软件的支持,只能手动控制。这种时候,比较在意文字设计(typography,又译「字体排印」)的团队或个人往往都在操作系统界面或网站中的汉字和西文之间插入一个半角空格。

包括许多的

  • 公司:苹果、微软、Google、Adobe……
  • 团队:Apple4us、Type is Beautiful、爱范儿……
  • 个人:@刘昕、@江疆……
但这些确实是绝对的少数。大多数人都不/不喜欢/不愿意在汉字和西文之间加空格。毕竟加空格要考虑的东西太多了,而且加空格也会带来一些问题(见后面给出的在 public-html-ig-zh@w3.org 进行的讨论)。

总的来说,「空格派」的习惯就是在汉字和西文之间留一个半角空格。但因为在中西文关系上有一些让人不好决定的特例,他们使用空格的方式有一些变数。

根据一般都「加」空格到一般「不加」空格的顺序,大致可以排出来:

  • 内部有空格的西文短语(iPod touch)
  • 独立的西文单词(iPhone)
  • 全大写字母的西文缩写(HTML)
  • 单个的西文字母(X)
  • 阿拉伯数字(7)和西文标点(/)
西文和汉字和标点三者相遇的时候问题更复杂(汗……「三体」),大家的习惯也有差异。

- - -

以上是现状,下面是个人观点:

中文与西文混排时,不一定要有空格字符,但一定要有间距。

使用专业排版软件时,交由软件处理间距问题(Adobe Creative Suite 把这个事归入「标点挤压」);纯文本写作时,插入半角空格。具体在上面列出的那五种情况下合适加空格,何时不加,至今还没有什么共识。

关注文字设计的朋友其实可以编写自己的 Manual of Style,最终或许能在百家争鸣中诞生中文互联网的一份事实标准。

我的空格习惯基本上是受 @刘昕 影响而建立的。因为这篇日志:

《中文 Web 阅读体验》:http://www.livid.cn/doc_view.php?doc_id=5332 (原站已关闭,这里是存档: 中文 Web 阅读体验

在看过这篇日志后,我意识到、并至今坚定维护着空格的必要性。刘昕在文中的这句话解释了基本的空格使用规则:

中文正文及标题中出现的英文及数字应该使用半角方式输入,并且在左右各留一个半角空格。如果这些这些半角英文及数字的左边或者右边紧接着任何的中文全角括号或者其他标点符号的话,则不需要加入半角空格。

关于加空格的意义和必要性。之前和 public-html-ig-zh@w3.org 的朋友比较深入地讨论过这个问题,有兴趣的话可以去查看存档。请在以下两个存档页中搜索「中英文字中的間隔」这个标题:

http://lists.w3.org/Archives/Public/public-html-ig-zh/2010Sep/subject.html

http://lists.w3.org/Archives/Public/public-html-ig-zh/2010Oct/subject.html

- - -

补充:

之所以我坚持要在混排中加空格,主要是我觉得两种文字的交界处应该是个尽量平滑的过渡,尽量满足双方文字的需求,并且让文本的节奏尽量平稳。

易读与否的事情,相比上面提到的这些语言和文字的特性,是后生的,而不是基础。

@千鸟 提到的 margin 法值得关注。在上面给出的那个 public-html-ig-zh@w3.org 讨论中也研究了这个方案。尤其是当我们把混排做成这样时(类似维基百科的做法),兼顾了语义和样式:

编写自己的<span lang="en">Manual of Style</span>,最终或许能……
只是这个高级的办法也带来了局限。比如控制到底哪边有间距、哪边没有(上面那个例子就只该左边有)比较麻烦(当然,用 JavaScript 肯定也可以搞定),比如会影响文本设定为 justify 之后的空格伸缩。但这的确是个值得考虑的方案,和空格法对立。

另外,其实 IE 很早(早于 IE6)就提供了一个 CSS 属性 text-autospace 来在 CJK 字符和西文之间增大间距(就像 Office Word 的效果一样),但毕竟是 IE 专有的,几乎没人用。

而 CSS 的 Text Level 4 中已经定义了 text-spacing 属性,但这离实际应用还比较远。

【千鸟的回答(10票)】:

好问题,梁海回答考据方面已经很扎实,基本我都认同,补充点个人的看法和习惯。

针对西文加空格我想主要是为了好读,也就是Readability的一部分。实际Web设计的中西文混排中,我发现西文是否好读的关键在于字体,比如我们可以定义很多稀奇古怪的字体,西文能适用,而中文不能适用默认显示“宋体”。也就是说,如果选择合适的西文字体,我认为这样即可以一定程度上解决Readability的潜在问题。以混排中我最常用的Arial, Tahoma, Verdana为例,Arial最小,而Verdana最大,另外Lucida Grande这些效果都很不错,因此我认为不需要加空格。(我个人博客 http://blog.rexsong.com/ 已经用好几年的Lucida Grande)

不使用空格,还有个重要原因,因为空白空格在不同浏览器之下的解析效果不一致。有些宽,有些窄,尤其一些精确的版式处理时会比较麻烦。需要空格的地方全部使用CSS的margin定义解决,绝对的精确,所以我会尽量不使用空格。实际产品中,工程师嵌入程序经常都会有空格导入,最近正在实践用CSS语句定义word-spacing:-3px;来缩减不必要的空格效果。

具体标准规范,我也不是专业的字体排印工作者,我想还是留给专家解决吧。

【钱争予的回答(8票)】:

我认为这个问题应该换种说法,才更容易得到确定的答案:

任何两个字符之间,都需要「空隙」。

就像西文 typography 中已经相对成熟的 kerning,中文也需要同样的东西。很自然地,中文字符与西文字符交替出现的时候,也需要合适的 kerning。然而问题是目前的计算机字体,在这方面的设计很差。在网页的文本中,利用手工添加空格的方式,一定程度上,可以起到调整中英文字偶之间的空隙,然而这终究是个临时的「折衷」办法。类似的「空格折衷」,在机械打字机普及的时代,有更多例子。

我不反对暂时性地使用空格来调整字符之间的空隙(在明显可提升可读性时,很支持),但我非常反对将此列入规范或标准之类的东西。

西文 typography 里有句话:The space bar is not a design tool.

(在 Ellen Lupton 的著作 "Thinking with Type" [1] 里就提到了。)

另外,还有篇文章可供扩展阅读 [2]。

[1] http://www.thinkingwithtype.com/

[2] http://www.hungermtn.org/the-space-bar-is-not-a-design-tool/

----

基于梁君的评论,我感觉可能上文表述不够充分,故作补充。

我总的观点:不反对现有技术条件下手工加空格,但反对规范化或标准化之类。

1. 先看一对例句

(1) 在中文句子里,出现嵌入English Words的情况。

(2) 在中文句子里,出现嵌入“English Words”的情况。

由第 (2) 句可见,通过合理运用引号隔离,在现有字体的设计下,已能避免中英文粘连时过窄的间距,这不是行文内容配比的概率性问题。如果字体的设计足够合理(有合适的 kerning),使用第 (1) 句的写法,也一样能保证视觉上的舒适。

2. 关于分词

西文等某些文字中,空格起分词作用,这样的“空格(空隙)”,的确适合由写作者来主动加入。而现代汉语则是以选择不易产生歧义的表述方式来“隐性分词”的。

例:

(1) 写小说 - > 写|小说

(2) 写小说 - > 写小|说

一般,不会将“写小说”误读为第 (2) 种分词——一个名叫“写小”的人在说话;更不必写成“写 小说”。

事实上,我们也本应避免将“日”和“月”写得太靠近而被误读为“明”(虽然它会很丑陋)——幸而,目前的字体设计已能良好地帮助我们避免了。英文单词嵌入到中文时,首先几乎不会产生分词障碍;而类比“日月”,中英文交替出现时,也应通过字体设计等其他“自动化技术”来避免视觉的干扰,乃至提高视觉美观性。

3. 行文“节奏”

对于日常的应用文体,中文写作一般仅通过分段来控制正文的行文节奏;在段落内,无需手工换行(软件自动化或后续文字设计师会解决这一问题)。而手工添加空格来控制节奏,更不需要。

相对地,现代中文诗中,作者常会在一个段落内,通过手工换行,来表现行文的节奏(且后续的文字设计师或软件,无权随意改动这些分行设定)。如果有类似地特殊写作需求,则作者主动添加空格的做法自然可取——但这不在本题讨论范围之内。

中英文粘连时所加入的空格,更大的作用是“视觉美化”,而非控制节奏。这样的空格,正是类似在机械打字机时代,打字员在段前或句末手工所添加的空格。在自动化技术还不完善时(例如目前的网页显示等),可以适当手工操作来弥补;但不应建立相关行文准则。

【Evan的回答(7票)】:

这真是个好问题.

说说我的看法吧. 我是坚定的"空格派". 不仅这样, 我还是一个坚定的半角标点坚持者.

首先说空格. 就像上面 @梁海 提到的那样, 无论是从文字的连贯性, 还是可读性来考虑, 两种不同的语言文字碰在一起都是有必要做视觉分隔的. 所以我认为加空格的理由是不言而喻的, 关键是怎么加?

我的做法是:

1. 对于英文字符, 无论是单词, 字母亦或连词, 都在一前一后都会加上空格.

2. 对于英文字符 + 英文标点, 在标点符号前后加一个空格, 除非标点符号之后没有内容.

3. 对于阿拉伯数字或其它符号(如 #, @ 等), 会在其前后加一个空格. 除非在它之后没有内容.

基本上, 总结起来就是在西文字符的前后都会加一个空格.

这套用法我大概坚持了有快一年了. 目前没有任何不适应.

最后, 针对上面说到的几个问题, 我也说说自己的看法:

1. 手动人肉增加工格? 还是使用 margin?

我赞成前者. 虽然在不同浏览器下空格确实有显示不一的问题, 但我觉得这只是理论层面上的影响. 因为在同一个浏览器下的同一篇文章里, 所有空格大小是固定的. 除非用户会不断切换不同浏览器来比较, 否则他看到的效果也是相对统一的. 当然, 如果是精细的排版, 则要用 CSS 来控制.

为什么不喜欢用 margin, 是因为要么就得在写文章时给需要的地方增加额外的 HTML 标签, 但这样会影响, 打断写作思路. 要么就只有用 js + 正则来控制, 也会增加成本.

我现在的做法是, 手动打空格 + letter-spacing 属性. 后者可以设在 body 中, 为所有字母/字符增加 1px 间距. 配合上 14px 正文字体, 看起来效果还不错. 具体效果可以参考我的 blog: http://uxat.me

2. 人肉空格不习惯.

这个问题, 按我自己的习惯, 可以说只坚持了两三天, 就成习惯了. 打出来的效果确实比不加空格好看很多.

3. 不推荐使用 text-align: justify.

因为按照 CSS2.1 的解释, justify 会通过拉伸空格, 或词间距, 字间距来使文章两端对齐. 具体拉伸谁, 和拉伸的距离是由浏览器控制的. 比起空格来这个属性更不可控.

最后, 再说说用半角标点来代替全角标点.

其是很简单, 主要是我喜欢用空格去控制字/词间距, 而全角标点/字符其本身的宽度会比半角更大, 我又习惯了经常打空格, 这样就会使打出来的空格宽度比我预期的更大. 其次, 切换起来很不方便. 特别当在写代码时. 最后, 个人认为全角(特别是小括号)没有半角好看~

【田乐的回答(1票)】:

有空格对简单分词会有好处,英文系统的分词经常很简单,用s分割词的时候中文部分不会和英文分在一起,这样起码英文部分是可以正确分词的。我很好奇在中英文排版的时候标点应该怎样用?如中文里面引用一个英文的时候是应该用“”,还是'呢?

【涛吴的回答(1票)】:

个人只在比较正式的场合(比如给TIB写稿)或者阅读起来比较痛苦的场合(比如”小写字母i和j都念一“会写成”小写字母 i 和 j 都念一“)才会手工加空格,原因无他,太懒了。

我看到过的最有力论据是”英文夹杂汉字时会很自然地在英文词和汉字之间加空格,所以中文夹杂英文词也就应该在英文词和汉字之间加空格”。不过我总觉得合理安排若干书写系统混排时各文本之间的空隙这件事应该是由计算机帮助人类解决的问题。

【范冰XDash的回答(4票)】:

据说也有一部分原因是SEO的需要。有些国外搜索引擎无法识别粘连在一堆中文字符中的英文。。

【鼓鼓的回答(0票)】:

我习惯空

【付正宗的回答(0票)】:

反正我是坚持加空格,整体看上去真的清晰不少。而且现在 github 里大部分项目的说明文档和 issue 也这么写。习惯了的话会感觉很受用。

【佟羽的回答(0票)】:

如果有软件能做到最好了

【許瀚文的回答(1票)】:

沒有規範,全為個人喜好。在我來說,已習慣在雙語社會中生活,同一段落中的歐文和中文均為同一內容,讀英文並不如中文般每隻character都要看上,反而快速掃描過wordshape就能夠辨到字了。個別characters的較難認並不影響整個歐文字的易認性,既為同一內容,也就沒必要特地外加空間去強調何謂歐文何謂中文了。

原文地址:知乎

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多