克尼特·潘多克:“这是一个很好的例子。”;无法使用pdf writer生成pdf输出;

克尼特·潘多克:“这是一个很好的例子。”;无法使用pdf writer生成pdf输出;,r,pdf,markdown,knitr,pandoc,R,Pdf,Markdown,Knitr,Pandoc,预先:在knitr中使用pandoc(),它在试图将.md或.Rmd编译成PDF时会发出抱怨 我正在简化可重复性研究的过程,正如许多地方所记录的那样。我正在使用pandoc和knitr并生成很棒的文档。我还试图为一些不太擅长编程的同事简化程序,但我们正在尝试使用类似的文件。“用户友好”的以降价为中心的编辑器有几种选择,出于几个原因,我倾向于使用RStudio(对他们来说,emacs/ess对我来说,但这是不同的) 我的工作流程:给他们一个降价(.md或.Rmd)文件,让他们能够进行更改,并有选择

预先:在knitr中使用
pandoc()
,它在试图将.md或.Rmd编译成PDF时会发出抱怨

我正在简化可重复性研究的过程,正如许多地方所记录的那样。我正在使用
pandoc
knitr
并生成很棒的文档。我还试图为一些不太擅长编程的同事简化程序,但我们正在尝试使用类似的文件。“用户友好”的以降价为中心的编辑器有几种选择,出于几个原因,我倾向于使用RStudio(对他们来说,emacs/ess对我来说,但这是不同的)

我的工作流程:给他们一个降价(.md或.Rmd)文件,让他们能够进行更改,并有选择地将其重新呈现为PDF格式。不幸的是,RStudio(AFAICT)不允许设置模板或其他任意的pandoc配置参数(例如,章节、编号部分),因此在R/knitr中使用
pandoc()
,在这里很有意义

使用
whitepaper.Rmd
作为输入文件,我在R中运行
pandoc('whitepaper.Rmd','pdf')
,并立即得到:

> pandoc('whitepaper.Rmd', 'pdf')
executing pandoc  -t latex --standalone --smart --number-sections --template=report.tex -f markdown -t pdf -o whitepaper.pdf "whitepaper.Rmd"
pandoc.exe: cannot produce pdf output with pdf writer
Error in (function (input, format, ext, cfg)  : conversion failed
我的knitr特定头中明确地有“t:latex”,但没有它,
pandoc()
仍在向系统调用添加“-t pdf”,这是
pandoc.exe
不接受的

对于疑难解答,如果我删除
'-t pdf'
,命令工作正常,因此输入文件本身似乎没有问题:

> system('pandoc  -t latex --standalone --smart --number-sections --template=report.tex -f markdown -o whitepaper.pdf "whitepaper.Rmd"')
关于这个话题,已经有很多其他的对话:,,以及大量的讨论。它们都解决了需要命令行工作、额外中间步骤、外部makefile或
knit2pdf()
(使用texi2pdf,不需要)的解决方案

我看到的约束:

  • 在R环境中易于操作
  • 在文件配置中利用易慧的“
    ”(允许 让我继续在我的模板之间任意切换(举几个例子之一)
  • 最好使用一个“标准化”命令(即“
    pandoc('whitepaper.Rmd','pdf')
    ”)执行此命令
。。。因此,一旦在文件中设置了参数,编辑和重新渲染就相对而言是大脑死亡

我可以修补并覆盖Yihui的
knitr:::pandoc_one()
,以删除添加了'-t'和format的违规内容,但我想知道在其他地方可能会产生什么副作用。这种解决方案既不可持续,也不是“正确的方式(tm)”

解决这个问题的“正确方法(tm)”建议?我是否错过了一个简单/明显的解决方案

顺便说一句:谢谢谢一辉,感谢knitr,感谢约翰·麦克法兰,感谢潘多克。令人敬畏!
(也许我可以向其中一方或双方提交补丁建议,以解决我的用例问题,不过如果只有我一个人,那么可能不值得。)

我认为您需要的所有信息都在
?pandoc
中,其中包括运行
系统(“pandoc-h”)
以查看可能的输出格式的示例。从中你可以学到

输出格式:ascidoc、beamer、context、docbook、docx、dzslides、, epub,epub3, fb2、html、html5、json、latex、man、markdown、markdown_github、, markdown\u mmd、markdown\u phpextra、markdown\u strict、mediawiki、, 原生、odt、opendocument、opml、org、pdf*、普通、revealjs、, rst、rtf、s5、slideous、Slidey、texinfo、纺织 [*对于pdf输出,使用latex或beamer和-o FILENAME.pdf]


所以基本上
format=“pdf”
是无效的,你应该使用
pandoc(“tmp.Rmd”,format=“latex”,ext=“pdf”)
(实际上,根据
?pandoc
,默认部分是
pandoc(“tmp.Rmd”,“latex”)
)。至于为什么
pandoc('whitepaper.Rmd','pdf')
导致调用
-t pdf
,那么,您在调用
pandoc()
的第二个参数中告诉它这样做

(你知道,我忙于研究所有其他帖子和问题,以至于我忽略了
?pandoc
中的
ext
选项和用纯文本编写的示例。叹气。谢谢。)