Techioz Blog

nanoc: pandoc-ruby にオプションを渡すにはどうすればよいですか?

概要

pandoc-ruby を使用する pandoc フィルターで nanoc 3.5.0 を使用しようとしています。具体的には、PandocRuby.convert() への最終呼び出しが次のようになるよう、ルール ファイルからいくつかのオプションを渡すことができません。

PandocRuby.convert(content,
                   {:from => :markdown, :to => :html}, :no_wrap, 
                   :table_of_contents, :mathjax, :standalone,
                   {"template" => Dir.getwd + '/layouts/pandocTemplate.html'})

上記の呼び出しをカスタム フィルターに配置すると、すべてが正常に機能します。ただし、オプションのセットごとに特別なフィルターを作成する必要がないように、ルールで Pandoc オプションを指定したいと考えています。

デフォルトの Pandoc フィルターは関数 run(content, params={}) として定義されており、単に PandocRuby.convert(content, params) を呼び出します。 PandocRuby.convert() が正しく呼び出されるようにパラメータを設定するにはどうすればよいですか?ルール内の次のディレクティブは機能しません。

filter :pandoc, :params => { :from => :markdown, :to => :html, :no_wrap, :table_of_contents, :mathjax, :standalone, "template" => Dir.getwd + '/layouts/pandocTemplate.html' }
filter :pandoc, :params => { :from => :markdown, :to => :html, :no_wrap => true, :table_of_contents => true, :mathjax => true, :standalone => true, "template" => Dir.getwd + '/layouts/pandocTemplate.html' }

最初のディレクティブでは Ruby エラーが発生し、2 番目のディレクティブは実行されますが、空白のページが表示され、pandoc が正しく呼び出されなかったことを示します。 Ruby についてはあまり詳しくないので、今の取り組みは暗中模索です。

解決策

nanoc に付属の Pandoc フィルターは、現時点ではこれを適切に行うことができません。フィルターに指定されたパラメータは、PandocRuby.convert に直接渡されます。

def run(content, params={})
  PandocRuby.convert(content, params)
end

(ソース)

フィルターの呼び出しには 3 つ以上の引数があるため、フィルターがクラッシュします。フィルターは確かに更新する必要があります (フィルターを呼び出す方法についての私の考えが甘すぎました)。フィルターの改善に挑戦したい場合は、プル リクエストを送信することを歓迎します。当面の間、これを問題として報告しました (リンク)。

(そして、この回答をすぐに適切な回答で更新できることを願っています!)