我使用Rake从Markdown文件生成PDF。如果Markdown文件为filename.md
,我认为PDF为filename.md.pdf
而不是filename.pdf
,因此自动完成功能会按照我喜欢的方式运行,因此很清楚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 pdfs
或rake 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 pdfs
或rake filename.md.pdf
会返回错误Don't know how to build task 'filename.md.pdf'
。
如何以我想要的方式生成文件名?
顺便说一句,这种规则适用于Make,即:
%.md.pdf : %.md
pandoc $< -o $@
答案 0 :(得分:3)
当我尝试在规则中指定具有多个点的扩展时,我最近遇到了类似的问题。我使用了here.
所述的不同规则语法解决了这个问题为您的规则尝试类似的内容:
rule( /\.md\.pdf$/ => [
proc {|task_name| task_name.sub(/\.md\.pdf$/, '.md') }
]) do |t|
sh "pandoc #{t.source} -o #{t.name}"
end