BG5BJM HAM 📡

中文排版

排版实现

按词分行(分词)1

为什么一行可以有7~9个字?为确保按词分行,不在词内断开(例如应写作现代化而不是+LF+代化)而牺牲字距的做法。中文由于不按词分写(如朝鲜语、英文词间加空格),往往需要人工干预,因此仅在导语、小标题常用,长篇正文罕用。——@Kongque_Chinese

分词排版

专用词按词换行:例如地名、人名、国名、重要的专有名词尽可能不要断开。

实现方式 1 层叠样式表属性

https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/nobr

<!--不推荐用法,非标准特性-->
<nobr>中华民族</nobr>
<!--替代用法-->
<span style="white-space: nowrap">中华民族</span>

实现方式 2 Unicode 控制字符——词连接符

可以从字符的层面使用 Unicode 的控制字符 U+2060WORD JOINER,简称 WJ,词连接符)2保证特殊词内部不断开,相对来说比其他方法更能保证在不同的环境下的效果。Unicode 自 3.2 版就引入了这个控制字符,其在 HTML 的转义表达为 &⁠#8288;。这个字符在显现时不会占用字宽,读者完全看不见这个字符,不会为排版造成负面影响,但能明确提示用户代理(比如浏览器)禁止在该位置换行。

需要注意的是,Unicode 定义了相当数量的控制字符,用户最好能够按照规定正确使用,比如中文的「特殊词汇不换行」功能里就不推荐使用 U+200DZERO WIDTH JOINER,零宽连接符),因为这个字符原本是为阿拉伯文、天城文等书写系统里单词内字母连写用的。参考控制字符

示例

<p>&NoBreak;&NoBreak;</p>

码点为 U+6BDB U+2060 U+6CFD U+2060 U+4E1C

UTF-8 11100110 10101111 10011011 11100010 10000001 10100000 11100110 10110011 10111101 11100010 10000001 10100000 11100100 10111000 10011100

注意事项

  1. 标点换行:标点禁头尾、禁止分割
  2. 阿拉伯数字:阿拉伯数字内部以及小数点禁止断成两行
  3. 数值单位:百分号、千分号、摄氏度等符号禁止与前边的数值断成两行
  4. 上下标、注释符号:一些单位及各种学科里出现的上下标(如 m^⁠2^ 中的 ^2^ )与前面的字符,以及 ㈠ ㊁ Ⅲ ④ 等脚注、尾注符号与被注释的词之间不应断成两行
  5. 外文混排:混排在中文里的外文,应该按照外文习惯。如英文按照英式断词连字(hyphenation)、藏文需要按照藏文的词界进行断行。 对于较长的网址、邮件地址,实际属于西文的字符串,应该实际情况灵活处理,建议在 @ 等符号处断开,不能随意添加连字符;即使断开,行首也不能随意修改大小写

参考资料

Requirements for Chinese Text Layout 中文排版需求 https://w3c.github.io/clreq

Chinese Gap Analysis 中文支持差距分析 https://www.w3.org/TR/clreq-gap

W3C《CSS文本模块》(工作草案) https://drafts.csswg.org/css-text-3/

国家语言文字相关法律法规和标准

脚注

  1. 行行当机不立断 https://www.thetype.com/2018/01/14017 

  2. Word Joiner U+2060 https://unicode-table.com/en/2060/