关于「写作 A 读作 B」这种事情,虽然已经玩了许久,但是还是感觉挺有意思。其实「写作 A 读作 B」是日文书写中的旁注标记,用于表达「A 的正确含义是 B」1。
早些时候,当我想要做旁注标记的时候,只能先把文字写上,发音写在括号里。其实这样的做法是很痛苦的,因为拼音的声调实在是太难输入了。
后来,iOS 的应用商店里出现了一款叫做「写(dú)」的 App,对我而言简直就是福音,我经常逛的一个推广优质应用的网站——少数派也专门为这个 App 写了博文,《喜(sàng)闻(xīn)乐(bìng)见(kuáng):写(dú)》。
从那以后,当我需要做旁注标记的时候,写(dú) 就是我最趁手的工具。直到这两天,我在给同事科普什么叫「鬼畜」的时候,无意间进入了绅士词条,然后就看到了这种黑科技般的注音方式!
绅士,或者ACG界更常见的写法是绅biàn士tài或绅hen士tai。
这种注音效果果然就是我想要的!一开始我还以为是用 CSS 实现的,翻看页面源码发现是 ruby 标签,之前从没见过,果然是图样图森破了。再看 Wiki 页面的源码,发现这是通过 Ruby Template实现的,再向上游追溯,就是 Wikipedia 了。
A Better Wheel
这么好玩的东西,我的博客也要用~于是经过我一个中午的 coding,一个全新的 hexo 插件——hexo-ruby-character 就来到了世界上。
我以 MIT 许可证将源码托管在 Github 上,欢迎交流。
从表面上看,这个插件其实是 Wiki 里面 Ruby Template 的一个复刻,算是另一个轮子,为什么我会认为它是一个更好的轮子?
先看 Wikipedia 给的例子。
{ruby|飞机|fēijī}{ruby|场|chǎng} → 飞机fēijī场chǎng
其实整个旁注标记中最难以输入的部分,就是拼音。而在 hexo-ruby-character 中,拼音不再是不必可少的了,取而代之的是汉字,用汉字给汉字注音。字音转换这种事情,自然是要交给机器代劳,不仅如此,还要站在巨人的肩膀上。
{ ruby 佐天泪子|掀裙狂魔 } → {% ruby 佐天泪子|掀裙狂魔 %}
在旁注标记中,字音不同是最常见的用法。假如需要标注真正的发音,那就更简单了。
{ ruby 飞机场 } → {% ruby 飞机场 %}
默认开启了分词之后,多音字的字音转换基本上不成问题,比如它能够区分{% ruby 星宿 %}和{% ruby 宿敌 %},{% ruby 家长 %}和{% ruby 长度 %}这种弱爆了的多音字测试更是不在话下。而这一切特性,都是 pinyin,以及它背后的 jieba 分词所提供的。
hexo-ruby-character 默认的行为是在拼音之间添加空格来区分音节。当然,如果不喜欢默认的字音转换,直接像 Wiki 一样写拼音也是可以的。
{ ruby 飞机|fēijī }{ ruby 场|chǎng } → {% ruby 飞机|fēijī %}{% ruby 场|chǎng %}
至于日语或者其他国家的语言之类的,自然也是不在话下。
{ ruby 超電磁砲|レールガン } → {% ruby 超電磁砲|レールガン %}
Happy hacking! 为了让更多的人用到它,我向 Hexo 的插件列表提交了 Pull Request,它现在已经在 Hexo 的插件列表里面了。