小叶的排版指南

前言

漢學家稱這個空白字元為「盤古之白」,因為它劈開了全形字和半形字之間的混沌。另有研究顯示,打字的時候不喜歡在中文和英文之間加空格的人,感情路都走得很辛苦,有七成的比例會在 34 歲的時候跟自己不愛的人結婚,而其餘三成的人最後只能把遺產留給自己的貓。畢竟愛情跟書寫都需要適時地留白。

與大家共勉之。

——《 盘古之白

这是一篇,本该在 2016 年完成的排版指南。

说明

  • 本文所指的 ASCII 为 Unicode 字符集的 ASCII 兼容区(U+0000–U+007F)。
  • 本文所指的 字母,包括但不限于拉丁字母、西里尔字母、汉字、假名等字符,以及 _(U+005F,下划线)。
  • 本文所指的 数字,包括且仅包括 ASCII 数字。注意,即使在中文排版中也不应出现全角数字。
  • 本文所指的 空格 (U+0020,space)。
  • 本文所指的 空白符(whitespace),包括但不限于 \t(U+0009,tab)、\n(U+000A,line feed)、\r(U+000D,carriage return)、空格等字符。
  • 本文所指的 标点,包括半角标点和全角标点。
  • 本文所指的 非标点,包括字母和数字,不包括空白符。
  • 本文所指的 换行(newline)为 \n(LF)和 \r\n(CRLF),无特殊说明不考虑 \r(CR)。此外,本文中的 行末(end-of-line,EOL)并非换行的同义词,而是指换行的前一个位置。

英文排版

通则

  • 除语法要求以外,文本中不应出现连续空格。
  • 字母和数字之间应插入一个空格。
  • 无特殊说明,标点与标点之间不应出现空格。
  • 行末不应出现换行以外的空白符,即 \n\r\n 前不应该出现 \t、空格等符号。

引号

常见误解

默认情况下,输入法会利用直引号键位输出弯引号。人们常把 关闭中文输入法 理解为 切换到英文输入法,因此关闭输入法后直引号的原样输出常让人产生如下误解:

  • 直引号用于英文,弯引号用于中文。

此外,在 Word 等排版软件中,直引号一般会被自动更正为弯引号,这会让人产生如下误解:

  • 直引号和弯引号是同一符号在不同编辑器下的不同外观。
  • 半角引号用于英文,全角引号用于中文。

事实上,在正式出版物中,不应出现 "(U+0022,直双引号)和 '(U+0027,直单引号),它们被称为 傻瓜引号(dumb quotes)。中英文排版中使用的都是 同一组 弯引号,它们分别为:

  • (U+201C,左弯双引号)
  • (U+201D,右弯双引号)
  • (U+2018,左弯单引号)
  • (U+2019,右弯单引号兼缩略号)

由此可见,并不存在所谓的 全角弯引号 或者 中文弯引号。这些误解导致了中英文混排的一系列问题,详见 中英文混排 部分。

排版指南

  • 独立成段的引文,如果不止一段,每段开头用左引号,只在最后一段的末尾加上右引号。
  • 左引号与前文的非标点之间应插入一个空格,与后文的非标点之间不应出现空格。
  • 右引号与前文的非标点之间不应出现空格,与后文的非标点之间应插入一个空格。
  • 嵌套引文中应交替使用双引号和单引号。

省略号

  • 英文排版中,省略号应使用三个连续的句点,而非 (U+2026,ellipsis)。
  • 省略号与前后文的 标点非标点 之间应各插入一个空格。

连字符,减号以及更多

排版中,有五个容易混淆的横线类符号,它们分别为:

  • -(U+002D,hyphen-minus):键盘上 + 左侧的符号。在代码中,减法运算必须使用该符号(重载除外)。该符号常用于替代连字符和减号,作连字符理解时,与前后文的非标点之间不应出现空格;作减号或 dash 理解时,与前后文的非标点之间应各插入一个空格。不推荐在正式出版物中使用。
  • (U+2010,hyphen):更加正式的连字符,与前后文的非标点之间不应出现空格。
  • (U+2013,en dash):常用于表示范围,如 1998–2022,与前后文的非标点之间不插入空格,或各插入一个空格。
  • (U+2014,em dash):常用于承担英文破折号的语义,与前后文的 标点非标点 之间应各插入一个空格。
  • (U+2212,minus):更加正式的减号,常用于公式排版。

杂项

  • 以下标点与前文的非标点之间不应出现空格,与后文的非标点之间应插入一个空格:
    • !(U+0021,叹号)
    • ,(U+002C,逗号)
    • .(U+002E,句点)
    • :(U+003A,冒号)
    • ;(U+003B,分号)
    • ?(U+003F,问号)
  • 左括号与前文的非标点之间应插入一个空格,与后文的非标点之间不应出现空格,包括:
    • ((U+0028,左圆括号)
    • [(U+005B,左方括号)
    • {(U+007B,左花括号)
  • 右括号与前文的非标点之间不应出现空格,与后文的非标点之间应插入一个空格,包括:
    • )(U+0029,右圆括号)
    • ](U+005D,右方括号)
    • }(U+007D,右花括号)
  • 以下符号与前后文的非标点之间应各插入一个空格:
    • &(U+0026)
    • /(U+002F,正斜杠)
    • |(U+007C,竖线)
    • ~(U+007E,波浪号)
  • 英文排版中不存在书名号,应使用 斜体(italic) 表示书名或文章标题。
  • 英文排版中不存在顿号,应使用 ,(U+002C)表示并列关系。
  • 符号作数学运算符理解时,与前后文的非标点之间各应插入一个空格。
  • #(U+0023),$(U+0024),%(U+0025),@(U+0040)等符号应根据语义自行决定是否插入空格。
  • 专有名词应视为一个不可分割的整体,不适用以上规则。

中文排版

通则

  • 字母和数字之间应插入一个空格。
  • 全角标点与非标点之间不应出现空格。
  • 中文排版中并非所有标点都使用全角,半角标点与非标点之间按英文排版规则插入空格。

引号

中文排版中,引号可使用弯引号或直角引号。

  • 使用弯引号时,引号与非标点之间应按英文排版规则决定是否插入空格。
  • 使用直角引号时,应将 (U+300C),(U+300D)理解为双引号,(U+300E),(U+300F)理解为单引号。不要尝试使用直角引号的半角版本。

省略号

  • 中文排版中,省略号应使用 ……,即两个连续的 (U+2026)。
  • 省略号与前后文的 半角标点非标点 之间应各插入一个空格。

破折号

  • 中文排版中,破折号应使用 ——,即两个连续的 (U+2014),而非六个连续句点。
  • 破折号与前后文的 半角标点非标点 之间应各插入一个空格。

杂项

  • 中文排版中应使用以下全角标点:
    • (U+FF01,全角叹号)
    • (U+FF0C,全角逗号)
    • (U+3001,顿号)
    • (U+3002,全角句号)
    • (U+FF0E,全角句点,常用于科技文献)
    • (U+FF1A,全角冒号)
    • (U+FF1B,全角分号)
    • (U+FF1F,全角问号)
    • (U+300A,左书名号)
    • (U+300B,右书名号)
  • 可使用以下全角括号:
    • (U+FF08,全角左圆括号)
    • (U+FF09,全角右圆括号)
    • (U+FF3B,全角左方括号,不推荐使用)
    • (U+FF3D,全角右方括号,不推荐使用)
    • (U+3010,左方头括号)
    • (U+3011,右方头括号)
  • 关于括号,更推荐的做法是:全部使用半角括号,标点与非标点之间按英文排版规则决定是否插入空格。
  • 其余标点虽然存在全角版本,但应使用其半角版本,标点与非标点之间按英文排版规则决定是否插入空格。
  • 值得注意的是,ASCII 区的字母和数字均存在全角版本。一般情况下,它们不应出现在中文排版中。
  • 未提及部分同英文排版规则。

中英文混排

通则

  • 数字按英文处理。
  • 设置 font family 时,英文字体的优先级应高于中文字体。这是因为,中文字体一般也会为 ASCII 区设计字形,这使得渲染英文时不会 fallback 到英文字体上,导致字体搭配失去意义。
  • 中文与英文之间应插入一个空格。
  • 句子主体是英文时,按照英文排版规则使用标点,例如:
    • I’ve once been in love with 小叶.

    • I saw 小叶, 小黄 and 小高.

  • 句子主体是中文时,按照中文排版规则使用标点,例如:
    • 我曾经爱过 Little Ye。

    • 我看见了 Little Ye、Little Oumae 以及 Little Kousaka。

  • 引号由其内容决定,例如:
    • “Anime weebs are rather「可笑」nie!”

    • 「二次元真是 “hilarious” 捏!」

直引号与弯引号之争

处理混排文本时,系统会依据 font family 的先后顺序依次尝试渲染字符。由于中英文排版共用相同码点的弯引号,渲染弯引号时中英文字体存在竞争问题。如果英文字体的优先级较高,弯引号将被渲染得较为狭小,即使插入一个空格,引号无法在视觉上合理分隔两侧的中文字符;如果中文字体的优先级较高,弯引号将被渲染为全宽字符,在英文文本中留下大量空白,尤其是当 (U+2019)作缩略号使用时,字间留白比单词间留白更大,这显然是不可接受的。一种可行的解决方案是,混排时中文文本不再使用弯引号,转而使用直角引号,避免字体在同一码点上的竞争关系。进一步地,有人主张:为了统一视觉效果,中文单独排版也应该选择直角引号。这就是直引号与弯引号之争的由来。

选择弯引号的理由:

  • 弯引号方便输入。
  • 弯引号是中文横向排版时的国家推荐标准。
  • 弯引号和直角引号皆是舶来品,直角引号更传统的论调并不成立。

选择直角引号的理由:

  • 直角引号更贴合方块字的审美。
  • 直角引号解决了中英文混排的渲染问题。

个人建议

在所有情况下,中文排版应优先使用直角引号。

Markdown 风格指南

  • 标题样式使用 atx-style,即前导 # + + 标题,无后缀 #
  • 使用成对 * 倾斜文本,文本前后如果为字母,应各插入一个空格。
  • 使用成对 ** 加粗文本,文本前后如果为字母,应各插入一个空格。
  • 行内代码前后如果为字母,应各插入一个空格。
  • 链接文本前后如为字母,应各插入一个空格。
  • 使用六个连续 - 分割文本。
  • 文件末尾应有且仅有一个换行。

杂项

  • 无论语种,技术文档可完全使用半角标点,并回避使用引号,转而以 加粗倾斜 替代。