注音标注

为汉字或外来词标注读音而在目标文字上方 (横排) 或右侧 (竖排) 附加的小号文字。在 HTML 中通过 <ruby> 元素实现。

注音标注 (ruby annotation) 是为汉字标注读音的小号文字。名称来自活版印刷时代对活字尺寸的叫法:从英国进口的 5.5 磅活字被称为 ruby,用这种活字排出来的读音标注于是也被叫作 ruby。日文里把它叫作振り仮名 (furigana),在书籍、报纸和教科书里广泛使用,儿童读物和含有难读汉字的文章尤其离不开它。中文语境里对应的功能是标注拼音,在儿童读物和语言学习材料里同样不可或缺。

在 HTML 中实现注音标注要用 <ruby> 元素。写成 <ruby>汉字<rt>hànzì</rt></ruby>,就会在"汉字"的上方以小号显示"hànzì"。同时写上 <rp> 元素的话,在不解释 ruby 的环境里会显示成"汉字 (hànzì)"这样带括号并排的形式。到 2026 年 8 月,主流浏览器都已经支持 <ruby>、<rt>、<rp>,所以在浏览器显示上用到这个回退的场合已经很有限;不过把 HTML 交给只取纯文本的工具处理之后,这些括号会留下来。

注音标注按标注的粒度分成两类。单字注音是给每个汉字逐一标注读音,像"北běi京jīng"这样,每个字与读音的对应关系都很清楚,用在字音对应关系要紧的教科书和学习资料里。词组注音是给整个词统一标注,显示成"北京běijīng"这样。有些读音没办法拆到单个字上,这时只能用词组注音,例如日文的熟字训 (今日 读作 きょう)。也有把词整体处理、同时还保住字与音的对应关系的排布方式,会被另外叫作熟语注音。按标注的范围也有区分:所有汉字都标的做法和只给难读的词标的做法,在日文里分别叫作総ルビ和パラルビ。在 HTML 里,把父字符和 <rt> 在一个 <ruby> 里交替排开就相当于单字注音,把整个词和读音写成一组就相当于词组注音。

在字符计数中,注音标注的处理比较复杂。注音文字 (标注的部分) 要不要计入字符数,取决于具体用途。在稿纸的字符计数中,注音不计入字数。而在 HTML 源码一侧,<rt> 内的文本同样作为字符串存在,获取 DOM 的文本内容时会得到"汉字hànzì"这样正文与注音连接在一起的结果。放进 <rp> 的括号也会以同样的方式被连进去,所以要排除注音的处理必须把 <rt> 和 <rp> 两者都算作对象。既有只想数正文的场合,也有连注音一起数的场合,因此先定好按哪一种数法来数是必要的。

CSS 里有决定注音放在上方还是下方的 ruby-position、决定父字符与注音长度不一致时如何对齐的 ruby-align,以及决定是否允许注音越到相邻字符上方的 ruby-overhang。ruby-align 的取值是 start、center、space-between、space-around,初始值是前后也分配空白的 space-around。ruby-position 和 ruby-align 在 2024 年 12 月进入了主流浏览器可用的状态,而 ruby-overhang 还有浏览器不支持,因此到 2026 年 8 月,也仍然做不到以越界控制为前提的设计。排版上注音基本使用父字符一半的字号,所以在注音也是全角字符的情况下,两个汉字的父字符最多能把 4 个字符的读音收在自己的宽度里。超出这个长度的读音,例如给一个字标 3 个字符的读音 (日文里给"桜"标"さくら"就属于这种情况),注音会比父字符更长,需要靠拉开父字符的间距、压窄注音的字形、或者让它越到前后的字符上方来做调整。

从无障碍访问的角度看,需要注意注音的朗读方式会因屏幕阅读器而异。有的会接着正文把注音读出来,有的不读注音,也有的可以在设置里切换,并不是在任何环境下读音都一定能传达到。因此要避开注音读不出来时就会丢掉信息的写法,让正文单独也能把意思讲通。想把读音确实地传达出去的词,也可以采用在首次出现时就在正文里用括号写出来的做法,例如"饕餮 (tāo tiè)"。

分享这篇文章