3

我正在尝试将 nanoc 3.5.0 与pandoc使用pandoc-ruby. 具体来说,我无法从我的Rules文件中传递几个选项,以便最终调用PandocRuby.convert()如下所示:

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

当我将上述调用放在自定义过滤器中时,一切正常。但是,我想指定 pandoc 选项,Rules这样我就不必为每组选项创建一个特殊的过滤器。

默认 pandoc 过滤器被定义为函数run(content, params={})并简单地调用PandocRuby.convert(content, params). params我该如何设置才能PandocRuby.convert()正确调用?以下指令Rules不起作用:

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 错误,第二个指令运行但给了我一个空白页,表明 pandoc 没有被正确调用。我对 Ruby 不是很熟悉,所以我目前的努力只是在黑暗中摸索。

4

2 回答 2

5

nanoc 附带的pandoc过滤器此时无法正确执行此操作。给过滤器的参数直接传递给PandocRuby.convert

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

来源

您对过滤器的调用有两个以上的参数,这就是它崩溃的原因。过滤器当然需要更新(我对如何调用它的想法太天真了)。如果您想尝试改进过滤器,当然欢迎您提交拉取请求!同时,我已将此问题报告为问题(链接)。

(希望我能尽快用正确的答案更新这个答案!)

于 2013-02-01T13:28:16.410 回答
3

我编写了一个基本的 nanoc pandoc 过滤器,它调用 pandoc 目录而不使用pandoc-ruby

# All files in the 'lib' directory will be loaded
# before nanoc starts compiling.
# encoding: utf-8

module Nanoc::Filters

  class PandocSystem < Nanoc::Filter
    identifier :pandoc_system
    type :text => :text

    def run(content, params = {})
      if item[:extension] == 'org'
        `pandoc -f org -t html < #{item.raw_filename}`
      elsif ["md", "markdown"].index(item[:extension])
        `pandoc -f markdown -t html < #{item.raw_filename}`
      end
    end

  end

end

您可以根据 将您自己的选项传递给 pandoc item[:extension]。希望能帮助到你。


更新,我创建了一个新的 gist,它为 nanoc 提供了 pandoc 过滤器的改进版本,检查:https ://gist.github.com/xiaohanyu/9866531 。

于 2014-03-24T13:15:23.790 回答