Markdown
Pandoc

Pandoc Markdownで青空文庫風のルビ記法を使う

Markdownにはルビのための標準的なマークアップがありません。

HTML出力の場合は直接HTMLのタグを書くという手もありますが、HTMLのrubyタグは正直言って書きやすいものではありません。

HTMLで直接マークアップした例
新宿から電車で一本、<ruby>南小谷<rp></rp><rt>みなみおたり</rt><rp></rp></ruby>駅に降り立った。
中央本線、<ruby>篠ノ井<rp></rp><rt>しののい</rt><rp></rp></ruby>線、大糸線を経由して4時間あまり。ここは長野県<ruby>小谷<rp></rp><rt>おたり</rt><rp></rp></ruby>村である。
駅前を流れる川は日本海に注ぐ姫川で、下流では<ruby>翡翠<rp></rp><rt>ヒスイ</rt><rp></rp></ruby>が採れるという。

新宿から電車で一本、南小谷みなみおたり駅に降り立った。
中央本線、篠ノ井しののい線、大糸線を経由して4時間あまり。ここは長野県小谷おたり村である。
駅前を流れる川は日本海に注ぐ姫川で、下流では翡翠ヒスイが採れるという。

Pandocを使う場合は、自分でPandoc filterを書けば、予め用意されていなくても好きなマークアップを使うことができます。実際、Pandocの公式サイトにはPandoc filterの例としてルビを処理するためのfilterが載っています。

公式サイトのfilter例の記法
新宿から電車で一本、[みなみおたり](-南小谷)駅に降り立った。
中央本線、[しののい](-篠ノ井)線、大糸線を経由して4時間あまり。ここは長野県[おたり](-小谷)村である。
駅前を流れる川は日本海に注ぐ姫川で、下流では[ヒスイ](-翡翠)が採れるという。

このfilterをそのまま使っても良いのですが、読み仮名が先に来るのは少し不自然です。

Markdownの特徴は「プレーンテキストとしてもそれなりに読める」ことなので、プレーンテキストでもそれっぽく読めるルビ記法を使いたいものです。

青空文庫風のルビ記法

青空文庫では二重山括弧《にじゅうやまかっこ》を使ってルビを表しています。

青空文庫の記法を使った例
新宿から電車で一本、南小谷《みなみおたり》駅に降り立った。
中央本線、|篠ノ井《しののい》線、大糸線を経由して4時間あまり。ここは長野県|小谷《おたり》村である。
駅前を流れる川は日本海に注ぐ姫川で、下流では翡翠《ヒスイ》が採れるという。

この記法をMarkdownでも使えると良いのではないでしょうか。

というわけで、青空文庫風のルビ記法をHTML/LaTeX用に変換するPandoc filterを作りました。

HTML出力の例
$ pandoc --filter pandoc-aozora-ruby-filter -f markdown -t html foo.md
<p>新宿から電車で一本、<ruby>南小谷<rp>《</rp><rt>みなみおたり</rt><rp>》</rp></ruby>駅に降り立った。 中央本線、<ruby>篠ノ井<rp>《</rp><rt>しののい</rt><rp>》</rp></ruby>線、大糸線を経由して4時間あまり。ここは長野県<ruby>小谷<rp>《</rp><rt>おたり</rt><rp>》</rp></ruby>村である。 駅前を流れる川は日本海に注ぐ姫川で、下流では<ruby>翡翠<rp>《</rp><rt>ヒスイ</rt><rp>》</rp></ruby>が採れるという。</p>
LaTeX出力の例
$ pandoc --filter pandoc-aozora-ruby-filter -f markdown -t latex foo.md
新宿から電車で一本、\ruby{南小谷}{みなみおたり}駅に降り立った。
中央本線、\ruby{篠ノ井}{しののい}線、大糸線を経由して4時間あまり。ここは長野県\ruby{小谷}{おたり}村である。
駅前を流れる川は日本海に注ぐ姫川で、下流では\ruby{翡翠}{ヒスイ}が採れるという。

注意点として、ルビについての細かい指定(グループの指定など)には対応していません(青空文庫の形式に定められていないので)。細かい指定が必要な場合は、直接HTML/LaTeXを書くなり、独自のfilterを書くなりしてください。

また、ルビ対象やルビテキストにMarkdownのマークアップ(強調、上付き、下付きなど)を含めることはできません。(要望があれば対応するかもしれません)

その他の注意事項についてはGitHubを見てください。

現状、インストールにはHaskell環境が必要です。誰かPythonかLuaに移植してくれ〜

その他

既存のMarkdown方言におけるルビ記法としては、でんでんマークダウンの記法があるようです。

でんでんマークダウンの記法を使った例
新宿から電車で一本、{南小谷|みなみおたり}駅に降り立った。
中央本線、{篠ノ井|しののい}線、大糸線を経由して4時間あまり。ここは長野県{小谷|おたり}村である。
駅前を流れる川は日本海に注ぐ姫川で、下流では{翡翠|ヒスイ}が採れるという。

Markdownに青空文庫風のルビ記法を実装するものとしては、Parsedown向けのエクステンションが存在するようです。

以下の記事に、各種小説投稿サイトのルビ記法がまとめられています。青空文庫風(二重山括弧)の記法を採用しているところが多いですが、細かい違いがあるようです。