Re:VIEWの構文拡張でインライン命令を追加する方法

Re:VIEW構文拡張

Re:VIEW構文拡張

 

Re:VIEWは構文拡張できる

2018年7月、Windows10に書籍執筆支援システム「Re:VIEW」をインストールして使用しています。

Re:VIEWのバージョンは2.5.0です。

>review version
2.5.0

Windows10に Re:VIEW 執筆支援システムをインストールする方法

Re:VIEW フォーマットガイドにRe:VIEWの構文説明があります。

Re:VIEW構文でサポートしていない新しい機能が欲しいとき、どうしますか?
Re:VIEWのソースを解析して自分で機能追加しますか?
この方法はお勧めしません。
なぜならば、解析作業を行うには高いスキルを必要とする上に、Re:VIEWのバージョンアップに追従できないことになります。

Re:VIEWには、構文拡張する方法があります。
Ruby言語で書いたRe:VIEWシステムは、モンキーパッチにより既存のクラスの動的変更や拡張が可能です。すなわち、システム内に定義したクラスやそのメソッドを後から別の定義によって上書きできます。

モンキーパッチとは、オリジナルのソースコードを変更することなく、実行時にコードを拡張したり変更したりする方法です。

config.ymlと同じ階層にreview-ext.rbというファイルを作成することで、Re:VIEWを構文拡張することができます。

構文拡張方法

Re:VIEW フォーマットガイドに構文拡張についての記載があります。

Re:VIEW構文拡張の説明

Re:VIEW構文拡張の説明

log2構文を追加

サンプルを参考にして簡単な例を書いてみます。

上付き文字/下付き文字は、標準でサポートしていました。

Re:VIEWで上付き文字/下付き文字を書く方法

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を出力しました。

EPUB生成

EPUB生成

PDF生成

PDFを生成するとlog2構文でlog2Nを出力しました。TeXの数式でlogを書いているので形が良いですね。

PDF生成

まとめ

書籍執筆支援システム「Re:VIEW」で構文拡張してlog2というインライン命令の構文を記述しました。

Re:VIEWシステムは、モンキーパッチによりオリジナルのソースコードを変更することなくコードを拡張できるので便利です。