Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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向けのエクステンションが存在するようです。

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした