根据《孔雀工程:关于中文排版的思考》系列,主张从中文的角度讨论中文排版。从这篇文章开始,我们将重点分析汉语中的一些特殊标点符号。希望读者能结合本系列之前的内容一起阅读分析,如《压榨总在》、《避头尾》。

文中有很多参考链接,文中讨论的字符可能会因设备配置的不同而显示为乱码。建议在Type is Beautiful主站点击“阅读原文”阅读。

—思源黑体重磅显示的各种横条形状的文字,长度、粗细、高低位置都不一样。

2016年7月,“知音LIVE”上线,本网站作者、多语言字体技术开发者梁海立即在他的知乎专栏发表了一篇文章,题为《Dash好辛苦!破折号怎么这么难!文章”。他附上了2016年7月8日在Twitter上发布的截图,统计了一下《知音直播》1024次使用的907个破折号,发现有11个用法,情况复杂到他说:“嗯...我懒得分析。在这种情况下,作者将拿着这根棍子,分析为什么破折号对每个人来说都那么难。

目录 破折号到底是什么? 和连接号傻傻分不清楚一个符号还是两个符号?不单纯是断开问题破折号的码位 Unicode 这个大杂烩2014 还是 2015,这是个大问题说好的占两格呢破折号怎么输入 输入法的陷阱半路杀出的程咬金:拼写自动更正功能破折号怎么显示 破折号怎么排版:避头避尾避中间 网页与电子书的尴尬 小结

破折号到底是什么?

像其他常用的标点符号一样,破折号也是19世纪末20世纪初现代汉语标点符号形成过程中从西方语言引入的符号。最密切相关的符号是西方语言中的半角连接号和全角连接号。具体的进化史很复杂,远远超出了本文的范围。但基本上来说,由于汉字的面积比西方语言大得多,上世纪初西方符号传入汉语时,包括空在内的许多符号按照“胸围”和“全身”的多重关系进行了翻倍。这样不仅更能兼容方块字,还能防止横排的破折号与汉字数字“一”混淆,竖排的“二”混淆。因此,“两个字宽”的符号在现代汉语中逐渐稳定下来。经过多年的变化,随着汉语标点符号的格式和用法越来越规范,即使在小学语文教学中,破折号也应该是“一栏占两格”。目前,在推荐的国家标准《中华人民共和国标点符号用法》GB/T 15834-2011中,有关记载如下:

4.10 破折号

4.10.1定义:一种标签,表示一个段落中某些成分的注释、补充说明或读音、意义的变化。

4.10.2形式:破折号形式为“-”

2. 基本 EUC-CN 字符映射

由于以下原因,一些非汉字的映射已从UTC映射修改。

-为了更好地保持与中国标准化组织GBK的映射一致

从n00到n05的变化:

A.来匹配GBK地图

将 0xA1A4 映射从 U+30FB KATAKANA MIDDLE DOT 变为 U+00B7 MIDDLE DOT 将 0xA1AA 映射从 U+2015 HORIZONTAL BAR 变为 U+2014 EM DASH(下略)

虽然映射关系有所改变,但是php-5.6、ActivePerl-5.20、Java 1.7、Python 3.4仍然使用旧版本将破折号映射到Unicode U+2015码位,这些旧版本的影响还远没有消失。包括微软Word在内的应用程序或多或少会不经意间暴露出一些问题,这些问题将在后面的章节中讨论。

你说的好占了两个方格

其实西方排版有很多横条符号。随着计算机性能的提高和字符编码的深入,这些符号相继被纳入Unicode。比如我们可以看到U+2e 00–U+2e 7f有U+2E3A TWO EM DASH和U+2e 3b throw EM DASH。

由于中文破折号是两个字的符号,所以选择U+2E3A TWO EM破折号似乎是合理的。然而,Unicode中最符合逻辑的代码点不一定是最常用的。但是这段代码来的太晚,早年打字的习惯无法修改。从中国大陆的大多数软件实现和用户习惯来看,没有使用字符U+2E3A TWO EM DASH,但是映射到U+2014 EM DASH的两个字符仍然用于拼接成一个DASH。显然,这不仅不能满足上述破折号的第一个要求,还会留下断线等问题。在日常生活中,这种实现唯一的好处似乎就是让用户很容易输入中文连接号码的“一字行”。用户,包括作者,有时候在中文里是不能很方便地输入“一个字行”的,不妨先放一个破折号,以后再删除一个空格。

在作者编辑的W3C中文排版要求中,为了尊重既成事实,编辑们决定采取折衷处理。当前版本如下:

破折号是占两个汉字空间的 U+2E3A TWO-EM DASH 或 U+2014 EM DASH 。

如何输入破折号

无论内部码位如何变化,用户最关心的是如何方便地输入这个破折号。再回到本文开头提到的梁海在知乎的专栏《破折号》。冲刺有多难!文章”。在他的统计中,用户实际输入破折号的结果按如下顺序排列:

「——」<U+2014 EM DASH* 2>「--」<U+FF0D FULLWIDTH HYPHEN-MINUS * 2>「--」<U+002D HYPHEN-MINUS * 2>「-」<U+002D HYPHEN-MINUS>「—」<U+2014 EM DASH>「-」<U+FF0D FULLWIDTH HYPHEN-MINUS>「— —」<U+2014 EM DASH, U+0020 SPACE, U+2014 EM DASH>「- -」<U+002D HYPHEN-MINUS, U+0020 SPACE, U+002D HYPHEN-MINUS>「---」<U+002D HYPHEN-MINUS * 3>「ーー」<U+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK * 2>「————」<U+2014 EM DASH * 4>

看一下普通用户输入的问题很多的破折号,一般可以分为以下几类:

第一,与连接号混淆,因为破折号本身很难与中西连接号区分开来;

二是与其他西方符号混淆,如使用西方连字符;

三是与其他语言的符号混淆,如日语中所谓的“全角”长音符号;

第四,混合其他符号,比如7。两个字符加一个空网格;

5.单独使用一个符号,双倍甚至四倍,以此类推

我们来分析一下用户输入破折号时的烦恼。

输入法陷阱

按照现在的事实标准,电脑的中文输入法大多使用中文的Shift键和减号键,这样一口气就弹出两个“全角连接号”U+2014 EM DASH,形成一个DASH。仔细想想,这种“按一键跳两格”的操作真的很奇妙。在中文标点符号中,只有两个字宽的破折号和省略号才能享受这个特权。所以,到底是一个字还是两个字的问题,真的令人费解。

-苹果2016年底推出的MacBook Pro首次推出中文键盘,键帽上印有中文标点符号。而Shift+6的省略号是占据两格的六个点,而Shift+-的破折号没有标注。而且在后来发布的模型中,苹果直接把省略号的位置改回三点占据一格。

电脑键盘的键位相对稳定,但手机、平板等移动设备却不是这样。由于保存空是各种触摸屏设备软键盘的重中之重,各种符号的键位都被改变了,不同厂家的各种型号和系统的方法往往不统一,人为增加了标点输入的难度。比如iOS简体中文输入法,拼音和笔画的界面差别很大。拼音输入法中,用户需要按空网格左侧的“123”键一次进入“数字状态”,再按一次“#+=”键找到输入所谓“全角连接号”U+2014 EM DASH的键,然后用户需要按两次形成一个破折号。由于第一步输入“数字状态”时没有全角连字符,所以改为英文连字符。这种用户界面导致很多用户止步于这一步,转而玩几个连字符。如果此时使用长时间按键盘的诀窍,在按“连字符”键带来的更多选项中,各种符号的长度过于相似,普通用户很难选择正确的。相比之下,iOS简体中文中“笔画”输入法的用户体验非常直接准确,用户点击"?!“,”键可以调出中文标点符号选项。虽然里面没有破折号,但是用户自然会点击向上箭头打开选项菜单,交替的破折号和省略号已经是两个空格的形式了,括号也是成对的。用户只需按一次即可完成输入。这种体验显然比“拼音”更友好,更直接,更不误导人。

程半路杀了:拼写自动更正功能

把破折号和连接号混为一谈是常见的错误,看起来是“情有可原”的。那么为什么用户要用三次甚至四次呢?从用户的心理考虑,看到中文里放了一个西文连接号,肯定会觉得长度不够,潜意识里应该一起用。有的用户总是抱着“西方符号是半角”的固有概念,认为打两个“半角”就能打一个所谓的“全角”,然后用两个全角做一个占据两个方格的破折号,于是按了四次。

在一些文字处理软件中,破折号可以被误输入成功,因为有些软件系统具有“拼写自动更正”的功能。无论是苹果的macOS还是iOS还是微软的Word,默认情况下都会启用“自动更正”,而且这个功能总是会将两个连续的西文连字符替换为“全角连字符”em破折号,也就是一个U+2014。

-默认情况下,Microsoft Word中的自动更正功能会将两个连字符替换为所谓的长破折号。

然而,这种经历并不是持续的。一旦出了自动纠错的软件环境,这种打字在一些纯文本编辑器下就不行了。如本文第一章第二节所述,由于西方打字机的用户会以打字机换键的旧习惯输入西方破折号,所以软件在“自动更正”中设计了这么方便的功能,但显然不是为中文排版而设计的。

我们也可以呼吁各种排版引擎考虑增加对中文的需求,但是这个需求是什么,如何实现才合理,需要慎重确定。比如两个U+2014自动换成一个U+2E3A TWO EM DASH,还是需要字体的支持。否则很难切换到U+2E3A TWO EM DASH,但是字体厂商不画这个码位的字体,会导致字符无法正常显示,用户看到的是“豆腐”或者根本没有。退一步说,如果这样的替换处理不是在文本处理中,而是通过使用OpenType的GSUB特性在字体级别上解决,那么排版引擎应该把重点转移到“完全支持OpenType特性”上。从这一点我们也可以看出,排版处理是环环相扣、相辅相成的,每一个环节都会被打破,在哪个层面处理问题,都需要在正确理解整个环节的基础上做出判断。

如何显示虚线

无论用户如何输入,正常显示和输出字符都取决于字体厂商和排版引擎。早在2011年,知乎上就有这样一个问题:“目前互联网上使用的中文破折号普遍存在“中间断线”的问题。应该怎么解决?现在1989年过去了,看看现在的情况有没有改善。

我们先来看看屏幕显示用的黑体字。从上图可以看出,列出了一些常见的黑体。对于U+2014 EM DASH最常用的码位,大部分厂家都是将字形做成横条,横条位于水平仪的中心,左右充分支撑,保证连续连接,满足破折号的前两个要求。至于U+2015横条的字形,大部分字体的字形都是左右空,所以两者一起使用会断开连接。只有“方平”使这两个字符的字形完全左右,并把它们粘在一起,但它们似乎通过不同的厚度来区分。在《汉语黑体》等老派中,汉字“一”、“U+2014”、“U+2015”的粗细都不一样,增加了差异。当然,在现代字库“多字重”的家族发展中,对于“不同字重下的标点粗细是否应该随着字重的变化而变化”这个问题,不同的厂商有不同的答案。比如方正“兰亭黑H”的U+2014 EM DASH按H明显加厚,但是U+2015还是很薄。另外,旧版微软雅黑中的符号依然“与众不同”,U+2014字形不仅位置下沉,连在一起使用长度也超过两个字,U+2015横条做成浮动横线,让人哭笑不得。

再看中文里比较用的《宋体》和《仿宋》,在一些旧字体里,破折号被破的悲剧还在上演。图中还可以看到另一个规律,就是常用的U+2014基本上是水平居中左右满以保证不会断开,但是对于U+2015,要么左右空断开。相反,在繁体字库中,U+2014的字形在一起使用时会断开连接,但U+2015可以连接,这显然是由于上述历史原因和地域差异造成的使用习惯不同。当然,像钟毅曲风、钟毅仿曲风这种无论如何都无法衔接的破折号,真的让人心碎。对于这样的旧字体,用户应该避免使用。

然而,针对“两个字组成一个破折号”的事实标准,一些新的字体进行了新的尝试。2015年,Adobe的泛中文、日文和韩文字体“思源”系列采用了一种相对激进的方法:第一步是在OpenType中使用“字形合成”ccmp功能。如果遇到两个连续的U+2014字符,字形会直接替换为与U+2E3A相同的长横条;之后,在第二步中,使用GSUB中的locl特性来切换中国、日本和韩国指定的字形,以确保它们与汉字框架对齐。三重电磁冲击采用相同的处理方法。

—思源黑体和思源宋体中U+2014和U+2015的字体映射处理

第一步值得向各种字体厂商推荐,因为它保证了破折号不会断,这是现代OpenType特性能为中文排版服务的为数不多的实用功能之一。第二步之所以“激进”,是因为西方与中国、日本、韩国之间的格式切换必须依靠locl特性,这不仅需要第三方应用软件的支持,还需要对文本本身进行正确的语言标注。也就是说,要通过语言标记告诉软件是中文,才能调出中文居中的字体;否则排版软件还是会把它当成西文,用西文显示“下沉”字体。然而,事实上,能够支持语言标记的环境非常少。当年思源黑体刚发布的时候,Adobe自己的软件里只有InDesign,连Illustrator都不支持。从用户的角度来说,这也增加了学习的成本。从后来字体发布的反馈来看,用户并不习惯这种做法,也不熟悉如何调用locl信息,但总抱怨不能方便地调出正确的字体。

-用macOS系统菜单调用思源字体标点。从上到下分别是西文连接号、中文全角破折号、中文全角省略号、西文省略号。

-使用文本编辑纵向。macOS中的app。注意两侧西文设置的符号没有垂直功能,只有中文全角设置的中间两个符号才能正常显示。

-通过Adobe InDesign中的语言设置,正确使用中文标点符号。

-如果在Adobe InDesign中将语言设置为“英语”,就会调出西方的标点符号,形状和位置都不符合中国人的习惯

如何排版破折号:避开头尾,避开中间

要说破折号怎么排版,首先要提到一些印刷业的老派编辑的做法。他们更倾向于将破折号视为“一个字符”,因此他们会使用软件中的“字符变形”功能将一个em破折号字符放大到其宽度的两倍。比如2011年,印刷工业出版社《排版校对标准》中的“附录一:Word设置的参数”有这样的描述:

符号字模未设有该符号,需要「字符缩放」完成。「插入 → 特殊符号 → 标点符号」选「—」插入后选中,「格式 → 字体 → 字符间距 → 缩放」选 200%

—在Word排版中,采用将em破折号放大到两倍宽度并输入破折号的方法。

无独有偶,在考虑破折号的第三种长度要求时,一些日本排版专家一直坚持不使用Aodbe Indesign中U+2500 Box Drawings Light Horizontal这样的制表符,因为这个符号会左右移动。他推荐使用U+2015横条字符,因为日本字体厂商往往不把它做成左右两边都是的形状,但是接过来之后,可以在软件里加宽到宽度的两倍。

-日本排版专家大石先生在博客中提到的输入“双连号”的方法:在Adobe设计软件的“字符”面板中,U+2015被水平拉伸到200%宽度。

用一个字的好处是从根本上消除了中间断线的可能,看似曲线救国的一种方式,但本质上也是不可或缺的。当然,大部分非出版行业的朋友不会这么做,绝大多数被接受的稿件往往会结合两个全角连接号组成一个破折号,容易造成与中间脱节的问题。

破折号的布局也有避首避尾的问题。这一点在中国国家标准GB/T 15834-2011《标点用法》中没有描述,但作者在《挤进去,推出去,避开头尾》一文中已经讲过了,有兴趣的读者可以一步一步来读。一般来说,一些“严格”的风格禁止破折号出现在一行的开头。但是由于这个符号占用两个字宽,过于严格的规定往往会导致一行中的大量调整,不利于长格式排版中统一字距的要求。但是,放宽规则,采用不避破折号的“宽体”风格也不错。

—破折号避开头部的示例。在图中的例子中,为了避免破折号,将上一行最后一个字“子”推出,导致上一行字间距明显变宽。

Adobe InDesign中文版“简体中文首尾回避”默认设置中,U+2014 EM DASH已经放入“行首无字符”,也就是说,如果采用默认设置,会变成“严格”样式,避免使用破折号。了解这个默认设置很重要,需要“宽样式”的用户可以根据自己的需要进行自定义和修改。

对于非设计类专业,要特别注意微软Word软件的默认设置。在Word的默认设置中,有一个符号“-”,看起来像是“后置标点符号”中的破折号,但不是“-”U+2014 em破折号,而是目前大部分中文输入法采用的U+2015 HORIZONTAL BAR。根据这个设置,当用户输入U+2014 EM DASH的破折号时,Word不会避开头尾。如果想避免破折号首尾相接,我建议用户通过“自定义”手动添加符号U+2014 EM破折号。这个问题的根源是本文第二章中提到的字符映射修改带来的历史问题。不管问题的来源是什么,在实际操作中,如果要控制破折号,在避头尾的定义表中加入两个字符是最安全的。

-微软Word中“段落→中文版式→选项”中“后置标点”有破折号?

但从避头尾控制的“不可分域”来看,破折号需要避头尾,也有一个特殊的“避中”问题,即“不断线”,破折号不能从中间段分成两段,分别位于前一行的末尾和下一行的开头。对于这个控件,Adobe InDesign的操作界面有“不分色”、“不断字”、“不换行”等几个选项,让用户非常困惑。

-adobe indesign的段落面板菜单在对话框底部有“无断字”选项和“无分隔字符”的定义。

-adobe indesign字符面板菜单有“不换行”选项。

事实上,InDesign中字符面板选项菜单中的“不换行”最初是为西方排版而准备的。在原英文版中,此选项菜单写为No Break,用户可以选择任意数量的字符,然后勾选此选项,以确保此处不会被打断。显然,这是一个局部的、手动的指定,并不具有普遍性。虽然中文破折号可以手动选择,然后勾选“不换行”,但是如果整篇文档中有十几个破折号,手动选择设置是很麻烦的。

在“段落”面板中,“不要断字”与“避免头尾规则集”对话框中“不要分隔字符”的定义相关联。也就是说,用户需要在“段落”面板中勾选“无断字”之前,将各种字符定义添加到“无分隔字符”的定义中,才能实现该功能。幸运的是,“无断字”功能是默认打开的。但勾选“不断字”时,设置“无”以避免头尾,软件会丢失字符定义引用,也没有效果。

这个“禁止断字”是Adobe为东亚排版设置的功能,或者严格来说,是为实现日本JIS X 4051“禁止分字”处理而设置的功能。翻看JIS X 4051的原文可以知道,日文排版中所谓的“禁止分隔线”,就是标点挤压等间距调整处理时,字符不能断开,也不会打开;具体对象有破折号、省略号、“偶数”、西文等。很明显,相对于“不换行”这种简单的功能,这个要求凸显了“标点挤压等各种间距调整过程中不被拉开”的重要性。如果您忘记了定义,当两端对齐以调整间距时,破折号的两个字符仍有断开的危险。所以,即使你决定采用不避头尾的“宽体”,从“避头尾规则集”对话框顶部的“头部无字符”中删除相关字符,你还是要记得把这些相关字符全部写出来到底部“没有要分离的字符”

网页和电子书的尴尬

网页和电子书的排版是基于HTML+CSS的,但也要从字符、字体、排版引擎等方面考虑破折号。对于字符码点,首先要注意Uni码折线算法中几个相关字符的默认定义:

对于目前最常用使用的「—」,其断行属性为 B2 类,换行动作是 B/A/XP,即「前可断行、后可断行、但中间不能断开」,也就是说默认动作是「不避头、不避尾,但是避中间」;若使用「―」 这个字符,其断行属性为 AI 类,即「不明确」,换行行为要取决于具体情况,因此要慎重。但由于其东亚宽度属性 也属于 A 类「不明确」,在没有明确语言标签、文本识别、数据源等可靠参照时,会被处理 Narrow「窄字符」和西文字母一样具有 XP(中间不断开)的动作;如使用「⸺」与「⸻」U+2E3B THREE EM DASH ,这两个字符断行属性与 U+2014 EM DASH 同样是 B2 类,因此默认动作是「不避头、不避尾,但是避中间」。

开发人员应该决定使用正确的代码位,了解这些字符的默认动作,然后根据实际需要决定是否执行额外的操作。比如目前最常见的做法是使用两个U+2014 EM DASH,其默认其实是避免头尾的“宽体式”原则,是比较务实的做法。但是如果要执行“严格”的头尾回避,就需要结合其他方法来定义。

当然,就CSS定义字体而言,破折号和其他标点符号一样,需要从系统字体的回退机制、是否定义网络字体等方面做出决策。但为了实现“中西混排”,很多网页设计师按照桌面排版“复合字体”的思路和目前的CSS字体回退机制,将西方字体以字体家族的方式放在中国字体前面,以保证西方字体以西方字体显示。这样会影响中西合璧的几个标点符号。一些中文标点符号,包括蝌蚪引号、破折号等,会根据西文字体中的字形优先显示,导致下沉或位置断开等各种问题。

-此网页采用CSS书写,这在中文网页设计中很常见。把西文字体放在前面会导致西文字体优先。这时破折号往往是断开下沉的;尽量删除西文字体,直接使用系统字体或指定中文字体,保持破折号正确显示。开发人员需要根据情况采用不同的方法,必要时进行权衡。

解决这个问题的方法有很多,比如你可以通过另外定义Unicode编码范围来单独定义字体,或者直接使用某个系统的中文字体或者事先已经匹配了中西方字体的字体,有能力的网站甚至可以自行打包一个网络字体等等。如果使用思源这样支持locl标签的字体,也要放在合适的地方两个字符来表示破折号,但是移动设备系统输入法的界面还需要改进,让用户可以更友好的输入。但字体厂商应借鉴Adobe“思源”系列字体的第一步,提供更准确、更完善的占用两个空格但不完全支持的字体,并积极采用OpenType的GSUB特性,让用户在连续输入两个U+2014 EM DASH时,自动用正确的字体替换。排版时最重要的是保持破折号不断,无论是文字处理软件还是专业的平面设计软件都有相应的设置,在实际操作中要慎重考虑,要统一定义若干个相关的字符,确保没有转义。至于破折号的头尾回避,我国目前推荐的国家标准根本没有提及。其实“宽体”的“不避头尾”原则就够了。毕竟避头尾的严格规则很容易导致调整的加重,所以在排版风格上做决策的时候要慎重处理。网页、电子书排版时要特别注意CSS字体回退机制对显示的影响,根据实际效果在各种环境下进行调试。

不要低估破折号。这些问题实际上反映了当代中国印刷术的发展历史和现状。如果不了解汉语的实际需求,死记硬背的照搬西方符号会导致执行扭曲,一步一步错,进而为向后兼容和迂回处理付出更重的代价。而且,字体排版的每一步,从需求、码位、输入法、字库、排版引擎到显示打印的最终效果,都会有很大的影响。正因为如此,我们需要从整体的角度来考虑,以便更彻底地解决问题。

其实不仅仅是破折号,现代中文排版中必不可少的连接号和省略号,还有网络上直角引号和蝌蚪引号的吵吵闹闹之争,背后都有各种类似的问题。本文选择破折号作为阐述对象,是因为破折号将各种问题联系在一起。以破折号为起点梳理各种问题,这些经验可以为其他“问题标点”提供借鉴。只有这样,才能从整体上提高标点符号的可用性,为实现一个逻辑的中文排版打下良好的基础。

注意:

1.《芝加哥风格手册》第6.83节指出:“按照英国人的用法,在长文中,我们通常更喜欢用一个en破折号;也有一些非英国的出版商遵循这种方法。《新牛津风格手册》第4.11.1节也指出“很多英国出版社在en规则前后使用空作为破折号进行插入,但牛津风格和大多数美国出版社使用em规则。」

谢谢

感谢刘东元先生对本文的帮助

相关信息

1.《破折号 不离不弃的破折号》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《破折号 不离不弃的破折号》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/fangchan/1741621.html