15
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

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

15
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?