「孔雀计划:中文字体排印的思路」系列倡导从中文出发、以中文的思维方式讨论中文排版。精妙的中文排版并不仅仅是「标点悬挂」那样的小技巧,而是一个有设计逻辑的系统。在本篇里,笔者着重讨论一个大家容易忽略的中文换行问题。
谈到中文排版的换行问题,大家可能首先会想到避头尾规则。由于避头尾涉及到标点,笔者会另文叙述。在本篇里,笔者通过两个实例,聚焦中文排版中标点以外的换行问题,挖掘一下那些容易被忽视的中文排版需求。
按语义换行
首先请看下图这部汉译的西文著作。其中文版设计者声称:「他(原书作者)一直拒绝那种齐头齐尾的强制对齐排版,而是一行一行地细心确定每行最末端词汇。……中文版设计基本复刻了这一传统。」该书全文放弃了两端对齐而采用了左对齐,并号称是依照语义按词换行。但是这种中文排版真的美观且易于阅读吗?
笔者曾在拙文《「中西之别」重考》里指出过,西文采用「按词分写」,词与词之间有词距(word space),因此排版引擎首先选择在空格处换行。为了得到更好的排版效果,还要考虑连字处理问题(hyphenation)将词断开。由于西文字母体量小,可供调整的空间相对零碎,因此左对齐后再调整,可以让整个页面右侧不齐的行尾形成类似波浪的形状,非常美观。这也许就是原书的外国作者所偏好的。
而在东亚,有且仅有一个文种——韩文的排版断行具有「双重性」。现代韩文在正词法(orthography)的层面规定了必须进行「分写」(띄어쓰기),因此韩文排版可以有两种风格:既可以像西文那样按词换行,也可以中文这样每个字后都可换行。但与西文不同的是,韩文即便把词断开也不需要用连字符 (-) 连接。韩文的换行规则在 W3C《韩文排版需求》里有如下记述(原文为韩英对照,笔者试译):
当行末为韩字(谚文)时,可以「字」(글자)或者「词」(어절/語節)为单位断行。文章作者可以决定按段落或者通篇采用任意一种方法。
众所周知,长篇文章里西文算「词」数,而中文是算「字」数。其实中文里的「单字成词」的情况很常见,「字」「词」很难严格区分,导致汉语的严格分词反而很困难。中文的书写体例里也从来不存在「按词分写」。唯一的特殊情况是对外汉语教学的教材里,但这也仅限于初级教材,中级之后就和普通的中文出版物一样不按词分写了。对于机器,自然语言处理遇到的的「中文分词难」已经通过技术解决;而对于人来说,阅读中文本来就不应该过分突出「词」的作用——中文读者不会对此造成困惑,排版也无须多此一举。对汉语母语者来说,并不会因为按语义换行排版就能极大提高阅读效率。
汉语经过漫长历史的不断演化,词的音节也在不断增加,现代汉语的词汇一大特点就是「以双音节词为主」。据统计,《现代汉语词典》《现代汉语常用词词频词典》里双音节词约占 60 %。这样造成的局面是,即便要对中文「按词换行」,行末遇到不完整的词,也无非是一两个汉字的宽度调整。比起西文字母的零碎宽度,中文方块字显得硕大,这个宽度如果按照「左齐、右不齐」的排版,只会造成难看单调的锯齿状,与西文的大波浪差距甚远。这一点,其实与之前拙文谈「标点悬挂」时提到的西式「视觉对齐」是一个道理。
自从近代字体排印发展以来,汉字已经是固定的「方块字」,排版造型趋「齐」使内部驱动力也偏好「两端对齐」。而且,如果能将标点挤压等间距调整到位,其实「左对齐」和「两端对齐」的差别会变得很小。无论是看中文的语言词汇特点、还是看汉字造型和排版特性,都没有必要将长篇的正文做成「按词断行」的左对齐,既没有用也不好看。
需要注意的是,「按词换行」在标题里是必要的。特别是在报纸新闻等用于「秒读」媒介的标题里,类似「我外交部强烈谴责伊拉克/大使馆被炸事件」这样的换行的确不妥。标题要求转行时不能产生歧义,不得割裂词组,而且对于虚词也要认真处理,一般出版社会规定「的」这类虚词不能放在行首,「和」「与」不能放在行末。而正文与标题不同。在正文这样一个更长更流畅的语流里「按词换行」的必要性大大降低,而且也会导致庞大的工作量。全文按词断行,如果没有机器语言分析的辅助,就只能靠手工,这样必然会有缺漏。比如,图例中倒数第四行的「字宽」一词就被错误地断开了,设计者自己也没有彻底实现其设计逻辑。
针对图例这个案例来说,由于该书是译作,中文版设计者强调这是依照原书作者的偏好,也许也是为了增加「设计感」。但是,只要译作是中文,必须符合中文最低限度的基本行文和排版的习惯——希伯来文作品的中文版如果也按照希伯来文从右往左排版,估计绝大多数中文读者都会不适应。因此,作为设计师必须清楚地理解「最低限度」在哪里,应该不应该踩到警戒线,哪些是可以尝试而哪些是违反客观规律的,这些都要谨慎决策。否则,生搬硬套西文排版的方法而忽略中文本身的内部规律,只会成为东施效颦。
捣乱的数字
那么,中文排版在换行时不用在意语义,那就只需要考虑标点吗?下图就是一份完全没有标点的排版,来自中国某字体大厂商的一份字体样张,看看这里出了什么问题。
由于内容是佛典,因此设计师采用了「无标点」+「两端对齐」。对于中文来说,这理应是最简单的排版模式,如果按部就班,应该会按照稿纸模式的中式网格形成「纵横对齐」的版面。但令人意外的是,实际效果并非如此:第四行和第五行的字距被拉开,每行只有 18 字;而其他几行的字距更紧,每行 19 字。笔者通过软件模拟比对,确认这是使用 Adobe InDesign 中文版的默认设置排出来的效果。为什么会出现这种情况呢?
原来,问题的关键在「千二百五十」这个汉字数字。Adobe InDesign 中文版里有一个被称作「连数字」的功能,不让数字在换行时从中断开。在此例里,该功能「智能」地判断出了第五行的行末遇到了「千二百五十」这个数字,为了保证其不断开,只好将整个数字挪到下一行的第六行行首,而第五行多出的空白,则按照「CJK 段落书写器」的算法,不仅均摊到第五行,还均摊到了第四行内,最后导致第四、第五行这两行字的字距都发生了变化。
「连数字」这个功能自 InDesign 1.0 版就存在,而英文版并无此功能,可见这是专为中日韩的东亚版开发的,但笔者可以毫不为过地称之为 Adobe 的一大失误。
本来「连数字」的功能是让以0〜9组合而成的所谓「全角阿拉伯数字」,以及汉字数字,包括以「十百千万亿兆」等表数位的汉字组成的数字连起来而不断开,如遇行尾则推到下一行。然而,用户却对 Adobe 的这个「热心」功能哭笑不得:按照上述逻辑「该有的没有」,因为这个算法并没有包括汉字数字〇以及大写的「壹贰叁」等字符,因此对于「二〇」这样的数字并不会奏效;而「不该有的却有」,因为软件只是单纯检测字符而无法智能判断语意,遇到类似「以防万一」中「万一」这样的词也会被误判成数字进行多余的处理;而且,夹在汉字数字中间的逗号和间隔号甚至会被当做分节号、小数点处理。
退一万步来说,阿拉伯数字断开会导致位数不清,的确是应该禁止断开,但是汉字数字就没完全没有必要了。事实上,中文排版里从来没有过禁止汉字数字的行尾换行。考虑到 Adobe InDesign 的东亚版完全是依照日本工业标准 JIS 4051:2004 《日本语文书的排版方法》中的需求进行开发的,这个功能可能来自日文排版需求。可是经过调查才发现的事实是,开发者完全曲解了 JIS 4051 的本意。在该规范中,定义如下(原文为日文,笔者试译):
136) 连数字:一位以上连续的数字。包括分节用的逗号、空格,以及小数点的圆点。备注:作为和字处理的全角数字,以及作为西文处理的带有固有宽度的数字除外。……139)和字:构成和文(即日文)的汉字、假名、数字、标点以及其他符号。竖排时,还包括全角西文。
虽然没有明确写出,但通过上下文可以看出该规范中定义的「连数字」应该与汉字数字无关。之后的 2012 年万维网联盟(W3C) 以此规范为基础而制定的 《日文排版需求》中在对「连数字」的定义里更是明确了不包括汉字数字。因此,InDesign 口口声声说的「遵守 JIS 规范」只是一个美丽的误会。打开 Adobe 官方的 InDesign 用户指南中文版,其中如此解释道:
连数字用于防止数字断开。此外,该选项根据 JIS 规范处理数字字符串中的标点间距(适用于日文)。……要打开连数字,请从 “段落” 面板菜单或 “控制” 面板菜单中选择 “连数字”。
而通过上述分析,我们可以知道:第一,汉字数字本来就可以断开换行,「连数字」对汉字也进行处理是多此一举;第二,这个功能误解了日本的 JIS 4051 规范,是一个错误的实作;第三,用户指南里声称其「适用于日文」,但实际也作用到了中文上;第四,用户指南让人误解为该功能「需要则开启」,而实际上该功能是默认开启,用户反而必须手动关掉。可以说,这段官方说明漏洞百出,不仅没有说明清楚功能,反而有误导的嫌疑。
与日文用户不同,中国大陆用户极少会实际使用0〜9这些「全角阿拉伯数字」,而普通的所谓「半角数字」在软件里会同西文一起处理而不会断开,因此避免阿拉伯数字断开这个需求完全不需要这个「连数字」的功能,而开启这个功能则是有百害而无一利。让情况雪上加霜的是,Adobe 将这样一个错误的实作设置为「默认开启」,多挖了个陷阱让用户往里跳,而绝大多数用户则是在不知情的情况下落入陷阱而无法自拔。所以笔者在此强烈建议 InDesign 用户修改默认设置,将「连数字」功能关闭,减少意外而不必要的字距调整导致版面失调。
?小技巧 Adobe InDesign 里有「应用程序默认」和「文档默认」两种默认状态。启动 InDesign 而不打开任何文档,修改设置即是针对整个软件的「应用程序默认」,会影响到之后所有的新建文档。与此相对,如果在打开文档的状态下修改设置,则仅是针对改文档的「文档默认」,而对之后新建的文档没有作用。因此,用户只需要在启动 InDesign 而不打开任何文档的状态下,到「段落」面板的选项菜单里关闭「连数字」选项,即可在今后免除该功能自动启用的困扰。
当然,本例的排版还涉及到了「段落书写器」和「单行书写器」的问题。尽管 Adobe 声称「段落书写器」是更好的算法并将其设为首选项,但依照笔者排版经验还是「单行书写器」更靠谱,因为这样不会将一行的错误字距殃及到其他行。如果本例能使用「单行书写器」,只会影响第五行的排版;而由于默认使用的是「段落书写器」,导致连累到了毫不相关的上一行,整个段落的字距从第四行就开始乱掉。关于书写器的算法逻辑和用法推荐,本系列将另文阐述,在此就不做过多展开了。
特殊情况特殊处理
如前所述,中文排版的换行不必太在意语义上的「按词换行」,汉字数字也可以换行断开,但这并不是说没有特殊情况。事实上,在实际的媒体工作中,中国有很多报社都需要「专用词管理」,定义一些需要「特殊关照」的词汇并进行维护,确保它们在换行时不会被断开。这些所谓的「专用词」,基本上是重要的专有名词,可以是人名,也可以是国名、地名,而具体的定义则没有固定标准,依照报社、出版社的特例风格和规定而有所不同。
其实,对专有名词进行换行管理的传统,在西文排版里也有惯例。英国英语的权威体例《牛津风格手册》里就指出(原文为英文,笔者试译):
即使不需要连字符,在换行时也应该遵守一些限制:而在美国,沿用美联社体例风格的《休斯顿大学写作体例》在「连字符」一节里也提到:
……
如果可能,不要将地名、(特别是)人名断开。如果无法避免,人名应该从姓和名之间断开,或者从首字母(至少必须要两个)和姓之间断开。不能将姓名与其修饰成分断开。
应避免将人名、专有名词、电话及传真号码,以及电子邮件、网页、街道和邮寄地址断开。
欧美出版社特别注意避免将人名换行,不仅体现了对他人的尊重,更重要的一个功能是可以避免加上连字符 (-) 的姓氏被误认为「复姓」,因为在西方国家中出于婚姻、贵族世袭等各种原因而使用复姓的情况比较常见。而在中文世界,虽然「抬格」式的排版已被废止,但细致的排版依然也会沿袭「人名不断行」的传统。当然,这样的决策肯定会加大排版的复杂度,因此在实际工作中往往只选择一些重要、特殊的专有名词进行处理,而其他专有名词就忽略掉,这就是出版社「专用词」习惯的来源。翻开上世纪七十年代出版的《活字排版工艺》里,我们可以读到:
拣正的毛坯需要注意一下几点
……
(3)有关政治性的词句、领袖姓名、国名等,要特别注意,不能拣错,每拣一组词句时,需要认真默读一遍。领袖名字赶到行末时不要分拆回行,应在上行用衬线加大字行,将领袖名字整个移在下行的行首。
从电子出版的角度来看,通过软件实现这个功能并不困难。但是一些国外厂商的软件,比如 Adobe InDesign 里,无论是文本「不换行」功能,还是结合正则表达式 (GREP) 都需要手动逐个定义所需词汇,而且提高了使用门槛。相对地,土生土长的中国软件——方正飞腾就提供了「专用词管理」功能,在一个界面里就可以很轻松、灵活地实现管理功能,方正公司甚至还为此于 2015 年提交过「专用词不拆行处理方法和装置」的专利申请1。因此方正产品曾占国内出版市场九成市场份额是有其原因的。
诚然,正如本系列文章里多次提到的,正文排版其实是一个妥协的过程。定义越多禁止换行的「专用词」,就会有越多的位置、字距需要调整,就越容易偏离中式网格的秩序。因此这没有简单的对错,要根据具体的体例格式,对优先顺序和程度进行决策。
网络时代
如今的网页和电子书设计中,我们还是推荐尽量遵守 CSS 标准。但是由于各个文种的情况非常复杂,W3C 在《CSS 文本模块》(第三级、工作草案版)截止至本文执笔时依然都没有形成最终稿。其中在第五章「断行和词界」中提到(原文为英文,笔者试译):
在其他一些书写系统(如中文、日文、彝文,以及部分韩文)中,软包围机会2应依照音节界,而非词界。在这些系统里,除去某些字符组合以外,行可以在任意处断开。而且,根据排版体例,这些限制的严格程度会有所不同。CSS 不会完整定义所有的软包围机会,但是会提供一些控制以区别常见的不同做法。
这同样从侧面说明,一般情况下中文没有必要按词断行,包括汉字数字。另外,由于 CSS 的 white-space
属性也能控制换行、空白、tab 等的动作,因此如果需要保证不换行,可以将这个属性赋值 nowrap
处理。
以上是从排版层面的考量。如果一定要对特殊词汇不换行进行控制,可以从字符的层面使用 Unicode 的控制字符 U+2060
(WORD JOINER
,简称 WJ,词连接符)保证特殊词内部不断开,相对来说比其他方法更能保证在不同的环境下的效果。Unicode 自 3.2 版就引入了这个控制字符,其在 HTML 的转义表达为 ⁠
。这个字符在显现时不会占用字宽,读者完全看不见这个字符,不会为排版造成负面影响,但能明确提示用户代理(比如浏览器)禁止在该位置换行。
需要注意的是,Unicode 定义了相当数量的控制字符,用户最好能够按照规定正确使用,比如中文的「特殊词汇不换行」功能里就不推荐使用 U+200D
(ZERO WIDTH JOINER
,零宽连接符),因为这个字符原本是为阿拉伯文、天城文等书写系统里单词内字母连写用的。
小结
中文排版中除标点以外的换行位置,一直被认为是任意而不需要控制的。而实际上却有一些人为因素、软件因素会添加多余的换行判定,这是应该避免的;在「不控制」的一般条件下,对特殊情况进行管理即可。
作为「中文排版需求」来说,对于换行机会并没有做出更多的解释,笔者认为应该为各种实作提供一些信息,至少要保证以下几点:
- 标点换行:标点避头尾以及禁止分割,这是最重要的部分,会另做讨论;
- 阿拉伯数字:阿拉伯数字的内部,以及小数点处禁止断成两行;
- 特殊数值单位:百分号、千分号、摄氏度等符号应该禁止与前面的数值断成两行;
- 上下标、注释记号:一些单位及各种学科里出现的上下标(如 m2 中的 2 )与前面的字符,以及 ㈠ ㊁ Ⅲ ④ 等脚注、尾注符号与被注释的词之间不应断成两行;
- 混排的外文:混排在中文里的外文,应该按照外文习惯,如英文按照英式断词连字(hyphenation)、藏文需要按照藏文的词界进行断行。 对于较长的网址、邮件地址,实际属于西文的字符串,应该实际情况灵活处理,建议在 @ 等符号处断开,不能随意添加连字符;即使断开,行首也不能随意修改大小写。
上述几个需求里,阿拉伯数字和外文的控制,实现方式已经相对成熟,而真正「纯正」的中文排版问题应该放在标点和注释记号上。其实,本文的注释用的上标数字 1、2 与前面的汉字之间就已经插入了「词连接符」,避免注释用的上标数字和其注释词被断成两行。有兴趣的朋友可以尝试改变窗口宽度来测试一下实际效果。
在前述基础原则之上,各个出版社、内容创作机构可以指定内部的书写体例。比如对于汉字数字,有些比较宽松的做法不加控制,因为多位数一般采用阿拉伯数字;而另一些稍微严格的体例则会认为,表示数量、有明确位数的数字,如「三百六十五」断开不会有歧义,但是如果记成「三六五」而又断开则会发生「数量」与「编号」的歧义而应该加以控制。这个问题的实质是「数字用法」的规范问题,因此笔者建议应该先在编辑时在「用字法」层面先做出相关表记规定,再进行排版的风格规定,否则很难两边同时权衡。至于特殊词汇管理,不属于一般排版规则,各个机构内部自行决定、执行就好。过长的网址、邮件地址是最近才出现的新问题,提倡灵活处理而不应该做过多死板限制。总之,搞清楚「有所为有所不为」是制定排版逻辑的基础,在字体排印的相关策略制定时,一定要切记过犹不及。
注:
- 中华人民共和国发明专利申请《专用词不拆行处理方法和装置》,申请公布号 CN 104572750 A,申请发布日 2015 年 4 月 29 日,申请人:北大方正集团有限公司,发明人:杨燕菲、梅林、杨雷鸣。↩︎
- 软包围机会(soft wrap opportunity):网页盒子容器对内容进行包围时允许断开的点。↩︎
- R. M. Ritter, The Oxford Style Manual, 2003, Oxford University Press.
- 曹洪奎,《活字排版工艺》,1979,轻工业出版社
- 刘源,《现代汉语常用词词频词典》(音序部分),1990,宇航出版社。
6 个相关讨论
软包围机会,翻译得好别扭
to 读者:
觉得别扭更多是因为这是术语,读不习惯,而并不是翻译本身的问题。比如这个词的「软」和「软回车」「硬回车」的意思一样,再说网页设计里「盒子模型」这类词的都是一般人觉得怪怪。作为术语,只要内行人都知道是什么,而且没有歧义就够了。
西文段尾形成的 “大波浪” 其实并不是好的取向,反而如果形成了太明显的形状还要避免。Jost Hochuli 就提到,段尾要优先做到 “长短长” 的切换,而且这种切换还要带有优雅的韵律和节奏感……这也可以理解,为什么 Hochuli 在排段落的难度比较里面,把 “带有折行的齐头散尾” 排在第一难。
请问“Unicode 的控制字符 U+2060”这个字符在InDesign里怎么输入?
To Zhang Qingtian: 在 InDesign 里如果要手动指定某个单词不断开,方法请见 Adobe 官方帮助文件。经测试对西文、中文均有效。
本文不打算写成 InDesign 教程,请善用 Adobe 官方资源。
今天看到「美国驻华大使馆和领事馆」网站上的断行设计就想起了这篇文章了。
六句句子里有四句断行在不该断的地方: https://i.imgur.com/L38jDwB.png
我还以为是浏览器渲染的问题,一看源代码竟然是手动插入的 br 换行符: https://i.imgur.com/o4Bzyih.png
5 个Trackbacks
[…] 行行当机不立断 […]
[…] 其实,这些符号从实际排版效果来考虑应该是「避中间」,也就是说这些符号与其修饰内容也应该组合成「不可分字段」而不能中间断开。这些断行位置判断的一些特殊情况,笔者已在《行行当机不立断》一文分析过,不再赘述。 […]
[…] 在〈行行当机不立断〉一文中提到了 InDesign「连数字」功能带来的排版问题,刊于 Type is […]
[…] 这个「禁止断字」是 Adobe 为东亚排版而设置的功能,或者应该严格地说,这是为了实现日本 JIS X 4051「分离禁止」处理而设置的功能。翻阅 JIS X 4051 原文可以知道,日文排版所谓「分离禁止」是指字符之间不能断开,且在标点挤压等间距调整处理时也不被拉开;具体对象有破折号、省略号、「连数字」、西文单词等。显然,与「不换行」单纯功能相比,这个需求更突出了「在标点挤压等各种间距调整处理时也不被拉开」的重要性。如果忘记定义,破折号的两个字符之间在两端对齐调整字距时依旧有被断开的危险。因此,即使决定要采用「宽式」风格不避头尾,在「避头尾规则集」对话框上方里的「禁止在行首的字符」里删除掉相关字符,但依然要记着把所有这些相关字符(为了保险,建议把 U+2014、U+2015、U+2500 等等)都写入底部「禁止分开的字符」定义表里,保证「避中间」,不至于连用时从中间断开。 […]
[…] 本站编辑钱争予早在 2013 年就曾撰文《纵横对齐不是现代方法》。作为现代汉语的表记形式,既然现代中文已经不能没有标点符号,那么现代中文排版必须对其进行认真细致地调整,根据易读性进行细致的标点宽度调整、避头尾处理及换行位置处理,以优先保证易读性。对于混排的阿拉伯数字和西文,也要在现行编辑层面的正字法检查的基础之上(比如权衡使用阿拉伯数字和汉字数字,比如夹杂的西文改用中文词汇等),再进行形式的选择(比如在竖排时合理地采用所谓「全角字符」)。不应该一味让内容妥协于形式,单纯表现形式美的「纵横对齐」,这样的效果这也绝对不是合理使用网格系统的必然结果。 […]