繁体   English   中英

knitr pandoc:“无法用pdf writer生成pdf输出”

[英]knitr pandoc: “cannot produce pdf output with pdf writer”

锋线 :使用pandoc()在knitr,它抱怨试图编译.MD或.Rmd成PDF时。

正如许多地方所记录的那样,我正在简化可重复研究的过程。 我正在使用pandocknitr并生成出色的文档。 我也试图精简一些不熟悉编程的同事,但我们正试图使用​​类似的文件。 “用户友好”以降价为中心的编辑器有几种选择,出于几个原因,我倾向于使用RStudio(对于他们来说,emacs / ess对我而言,但那是不同的)。

我的工作流程:给他们一个markdown(.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"')

已经有关于该主题的许多其他对话: 145861771450842915258233 ,以及重讨论11025123 他们都解决了需要命令行工作,额外中间步骤,外部Makefile或knit2pdf() (使用texi2pdf,不需要)的解决方案。

我看到它们的约束:

  • 在R环境中轻松操作;
  • 利用Yihui的“ <!--pandoc ... --> ”文件内配置(允许我在我的模板之间继续任意切换,用于几个例子中的一个);
  • 优选地,用单个“标准化”命令执行该操作(即,“ pandoc('whitepaper.Rmd', 'pdf') ”)。

...这样,一旦参数设置在文件中,编辑和重新渲染就相对来说已经死了。

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

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

顺便说一句:谢谢,谢毅辉,针织者和约翰麦克法兰的pandoc。 迷死人! (也许我可以向其中一个或两个提交补丁建议来解决我的用例,但如果它只是我那么它可能不值得。)

我认为你需要的所有信息都在?pandoc ,其中包括运行system("pandoc -h")以查看可能的输出格式的示例。 从中你了解到这一点

输出格式:asciidoc,beamer,context,docbook,docx,dzslides,epub,epub3,fb2,html,html5,json,latex,man,markdown,markdown_github,markdown_mmd,markdown_phpextra,markdown_strict,mediawiki,native,odt,opendocument,opml ,org,pdf *,plain,revealjs,rst,rtf,s5,slideous,slidy,texinfo,textile [* for pdf output,use latex or beamer and -o FILENAME.pdf]

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM