Re:VIEWは構文拡張できる
2018年7月、Windows10に書籍執筆支援システム「Re:VIEW」をインストールして使用しています。
Re:VIEWのバージョンは2.5.0です。
>review version 2.5.0
Re:VIEW フォーマットガイドにRe:VIEWの構文説明があります。
Re:VIEW構文でサポートしていない新しい機能が欲しいとき、どうしますか?
Re:VIEWのソースを解析して自分で機能追加しますか?
この方法はお勧めしません。
なぜならば、解析作業を行うには高いスキルを必要とする上に、Re:VIEWのバージョンアップに追従できないことになります。
Re:VIEWには、構文拡張する方法があります。
Ruby言語で書いたRe:VIEWシステムは、モンキーパッチにより既存のクラスの動的変更や拡張が可能です。すなわち、システム内に定義したクラスやそのメソッドを後から別の定義によって上書きできます。
モンキーパッチとは、オリジナルのソースコードを変更することなく、実行時にコードを拡張したり変更したりする方法です。
config.ymlと同じ階層にreview-ext.rbというファイルを作成することで、Re:VIEWを構文拡張することができます。
構文拡張方法
Re:VIEW フォーマットガイドに構文拡張についての記載があります。
log2構文を追加
サンプルを参考にして簡単な例を書いてみます。
上付き文字/下付き文字は、標準でサポートしていました。
log2N は、標準構文で log@<sub>{2}N と書きます。
log2N を @<log2>{N} と書けるように 構文を拡張して、log2というインライン命令を追加します。
review-ext.rb
review-ext.rbを作成します。
私はRuby言語を使ったことがありませんので、見よう見まねで書いてみました。
インライン命令の追加なので、サンプルとは少し異なった書き方となります。
module ReVIEW class Compiler definline :log2 end class ReVIEW::HTMLBuilder def inline_log2(str) %Q(log<sub>#{2}</sub>#{str}) end end class ReVIEW::LATEXBuilder def inline_log2(str) %Q($\log_#{2} #{str}$) end end end
- definlineで、新しい構文log2を定義します。
- class ReVIEW::HTMLBuilderで、EPUB生成方法について記述します。
- class ReVIEW::LATEXBuilderで、PDF生成方法について記述します。
テスト原稿
テスト原稿を作成します。
= テスト * log@<sub>{2}N * @<log2>{N}
EPUB生成
EPUBを生成するとlog2構文でlog2Nを出力しました。
PDF生成
PDFを生成するとlog2構文でlog2Nを出力しました。TeXの数式でlogを書いているので形が良いですね。
まとめ
書籍執筆支援システム「Re:VIEW」で構文拡張してlog2というインライン命令の構文を記述しました。
Re:VIEWシステムは、モンキーパッチによりオリジナルのソースコードを変更することなくコードを拡張できるので便利です。