一个思源破折号的疑惑

2年前,知乎活跃的字体设计师梁海曾吐槽《破折号好难啊!破折号怎么这么难!! 》,当时还捧腹大笑。

据梁海统计,仅知乎live中文破折号的用法就高达11种

从上到下依次为:

  • ——(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)

未想,自己也遭遇了文章破折号显示的困惑。

一个奇怪破折号引发的思索

本站正文当初用了三种衬线字体、EB+Garamond、思源宋简(Noto Serif SC)、Oswald,沿袭至今,个人觉得十分养眼。在前天的文章《芝岭古道行 》中,我写了一个固有地名,包含一个全角连接号——(U+2014 EM DASH * 2),乍一看,觉得异常别扭:

趁着天阔日蔚,与家人一起就近造访了芝岭村—丁岙岭古道,又称“芝岭古道”。

在blackquote引用模块,你看到是font-family: STKaiti,KaiTi,‘楷体’,SimKai,DFKai-SB,NSimSun,serif渲染下的——(U+2014 EM DASH * 2),端庄而典雅,非常漂亮。

在楷体渲染下,破折号上下居中,左右占两个字宽又不顶格
在楷体渲染下,破折号上下居中,左右占两个字宽又不顶格

然而,原文是以思源宋体渲染的,真实的破折号又是怎样呢?

在思源宋简的渲染下,破折号上下未居中,而是相对于中线下沉
在思源宋简的渲染下,破折号上下未居中,而是相对于中线下沉

年前,在关注到破折号的多样化后,一直遵循W3C《中文排版需求 》的官方建议,用如下的版本标准:

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

试探思源宋体破折号的“病根”

为何“CJK标准的集大成者”思源宋体还会出现破折号下沉的低级错误呢?

原因一

仔细查阅了Adobe官方的《思源宋体 readme 文件1,发现思源宋体的破折号有西文版(比例宽度)和中日韩版(全角)之分,二者在造型(长度、粗细)和位置(基线对齐,或者虚拟字身居中)等方面都有不同。

其中,思源宋体的破折号(U+2014 EM DASH )有如下变化:

但上述这些特性,均需要通过在对 OpenType loclpwidhwid 等特性完全支持的环境(比如 macOS)或者应用程序(比如 Adobe InDesign)下才能进行正确调用。

原因二

而本站的css头部声明内容如下:

@import url('../css?family=Oswald:400,600');
@import url('../css?family=Noto+Serif+SC:400,600,900&subset=chinese-simplified');
@import url('../css?family=EB+Garamond:400,500,600,700,800');

:root {
  --serif-font: 'EB Garamond', 'Noto Serif SC', 'Source Han Serif SC', source-han-serif-sc, FangSong, STFangsong, KaiTi, STKaiti, serif;
  --sans-font: Oswald, 'Microsoft YaHei', STHeiti, sans-serif;
  --italic-font: STKaiti, KaiTi, '楷体', SimKai, DFKai-SB, "Georgia";
  --mono-font: consolas, Menlo, Monaco, "Georgia", "PingFang SC", monospace;
}

字体设计专家Eric Q. LIU近日发表在知名排版网站Type is Beautiful的一篇讨论破折号的文章2指出这种写法的弊端:

很多网页设计师为了实现「中西混排」,依照桌面排版「复合字体」的思路,按照目前 CSS 字体的回落机制,在 font-familiy 里将西文字体摆在中文字体前面,保证西文用西文字体显示。

这种方式会影响数个「中西共用」的标点符号,包括蝌蚪引号和破折号在内的一些中文标点会优先按照西文字体中的字形显示,导致位置下沉或者断开等各种问题。


  1. 关于思源宋体的问答 ↩︎

  2. 不离不弃的破折号 ↩︎