2

我使用 Rake 从 Markdown 文件生成 PDF。如果 Markdown 文件是,我不filename.md喜欢 PDF ,以便自动完成以我喜欢的方式工作,并且清楚 PDF 文件的来源是什么。filename.md.pdffilename.pdf

我有这个 Rake 文件,它工作正常。

MDFILES = FileList["*.md"]
PDFS = MDFILES.ext("pdf")

desc "Build PDFs of all chapters"
task :pdfs => PDFS

# Build PDFs from Markdown source
rule ".pdf" => ".md" do |t|
  sh "pandoc #{t.source} -o #{t.name}"
end

如果我运行rake pdfsrake filename.pdf按预期生成 PDF,但 PDF 被命名为filename.pdf.

但我希望 Rakefile 改为:

MDFILES = FileList["*.md"]
PDFS = MDFILES.ext("md.pdf")

desc "Build PDFs of all chapters"
task :pdfs => PDFS

# Build PDFs from Markdown source
rule "md.pdf" => ".md" do |t|
  sh "pandoc #{t.source} -o #{t.name}"
end

运行rake pdfsrake filename.md.pdf返回错误Don't know how to build task 'filename.md.pdf'

如何以我想要的方式生成文件名?

顺便说一句,这种类型的规则适用于 Make,即:

%.md.pdf : %.md
        pandoc $< -o $@
4

1 回答 1

3

最近,当我尝试在规则中指定带有多个点的扩展名时,我自己也遇到了类似的问题。我通过使用此处描述的不同规则语法解决了它。

为您的规则尝试这样的事情:

rule( /\.md\.pdf$/ => [
    proc {|task_name| task_name.sub(/\.md\.pdf$/, '.md') }
]) do |t|
    sh "pandoc #{t.source} -o #{t.name}"
end
于 2013-05-10T16:09:11.653 回答