如何将R Markdown转换为PDF?

Jer*_*lim 125 pandoc knitr r-markdown

我之前已经问过将R Markdown转换为HTML命令.

将R Markdown文件转换为PDF文档的好方法是什么?

一个好的解决方案将尽可能多地保留内容(例如,图像,方程式,html表等).解决方案需要能够从命令行运行.一个好的解决方案也是跨平台的,理想情况下最小化依赖关系,以便更容易共享makefile等等.

具体来说,有很多选择:

  • 是否将RMD转换为MD转换为HTML转换为PDF; 或RMD到MD到PDF; 或RMD到PDF
  • 如果markdown在R中使用包,则指定哪些选项
  • 是否使用pandoc,R内置的包或其他东西

这是一个示例rmd文件,可能会对任何提议的解决方案提供合理的测试.它被用作这篇博客文章的基础.

Jer*_*lim 67

更新的答案(2013年2月10日)

rmarkdown软件包:现在rmarkdowngithub上有一个与Pandoc连接的软件包.它包括一个render功能.该文档非常清楚如何将rmarkdown转换为pdf等多种其他格式.这包括在rmarkdown文件中包含输出格式或运行为rend函数提供输出格式.例如,

render("input.Rmd", "pdf_document")
Run Code Online (Sandbox Code Playgroud)

命令行: 当我从命令行运行时render(例如,使用makefile),我有时会遇到pandoc无法找到的问题.据推测,它不在搜索路径上.以下答案解释了如何将pandoc添加到R环境中.

例如,在运行OSX的计算机上,我有一个通过RStudio的pandoc副本,我可以使用以下内容:

Rscript -e "Sys.setenv(RSTUDIO_PANDOC='/Applications/RStudio.app/Contents/MacOS/pandoc');library(rmarkdown);  library(utils); render('input.Rmd', 'pdf_document')"
Run Code Online (Sandbox Code Playgroud)

旧答案(约2012年)

因此,许多人建议Pandoc是要走的路.请参阅下面的说明,了解拥有最新版Pandoc的重要性.

使用Pandoc

我用下面的命令至R降价转换为HTML(即,此生成的文件的一个变体),其中,RMDFILE是没有将R降价文件的名称.rmd组分(它也假定扩展.rmd和不.Rmd).

RMDFILE=example-r-markdown  
Rscript -e "require(knitr); require(markdown); knit('$RMDFILE.rmd', '$RMDFILE.md'); markdownToHTML('$RMDFILE.md', '$RMDFILE.html', options=c('use_xhml'))"
Run Code Online (Sandbox Code Playgroud)

然后这个命令转换为pdf

Pandoc -s example-r-markdown.html -o example-r-markdown.pdf
Run Code Online (Sandbox Code Playgroud)


关于这个的一些注意事项:

  • 我删除了示例文件中的引用,该文件将绘图导出到imgur以托管图像.
  • 我删除了对imgur上托管的图像的引用.数字似乎需要是本地的.
  • markdownToHTML函数中的选项意味着图像引用是文件而不是存储在HTML文件中的数据(即,我'base64_images'从选项列表中删除).
  • 结果输出看起来像这样.它显然制作了一个非常LaTeX风格的文档,与我从浏览器将HTML文件打印到pdf时所得到的相反.

获取Pandoc的最新版本

正如@daroczig所提到的,拥有最新版本的Pandoc以输出pdf非常重要.在2012年6月15日的Ubuntu上,我在包管理器中遇到了Pandoc的1.8.1版本,但从更改日志看来,对于pdf支持,您至少需要1.9+版本的Pandoc.

因此,我安装caball-install.然后跑了:

cabal update
cabal install pandoc
Run Code Online (Sandbox Code Playgroud)

Pandoc安装在~/.cabal/bin/pandoc 这样,当我运行pandoc它仍然看到旧版本.请参阅此处以添加路径.

  • 谢谢你的回答.我只是想评论我的经验是将.md文件提供给*pandoc*而不是.html文件提供了更好的输出.所以值得尝试一下. (5认同)

dar*_*zig 22

我认为你真的需要pandoc,这个伟大的软件是专门为这个任务设计和构建的:)除了pdf,你可以将你的md文件转换成例如docxodt等.

好吧,安装一个最新版本的Pandoc可能会在Linux上进行挑战(因为你需要整个haskell-platform˙从源代码构建),但在Windows/Mac上只需要几兆字节的下载就非常容易.

如果您有酿造/编织的降价文件,您可以调用pandoc例如bash或使用systemR中的?andoc.convert函数.后者的POC演示是在我的小包功能中实现的(当我尝试时你必须非常厌倦把你的注意力集中在每个机会上).

  • 关于`apt-get install pandoc`有什么挑战? (3认同)

Jot*_* eN 14

现在(2014年8月)您可以使用RStudio将R Markdown转换为PDF.基本上,RStudio使用pandoc将Rmd转换为PDF.

您可以将元数据更改为:

  1. 添加目录
  2. 更改图形选项
  3. 更改语法突出显示样式
  4. 添加LaTeX选项
  5. 还有很多...

有关详细信息,请访问http://rmarkdown.rstudio.com/pdf_document_format.html在此输入图像描述


Jer*_*lim 10

对于看起来更像您从浏览器打印时获得的wkhtmltopdf选项,提供一个选项.

在Ubuntu上

sudo apt-get install wkhtmltopdf
Run Code Online (Sandbox Code Playgroud)

然后使用与pandoc示例相同的命令来获取HTML:

RMDFILE=example-r-markdown  
Rscript -e "require(knitr); require(markdown); knit('$RMDFILE.rmd', '$RMDFILE.md'); markdownToHTML('$RMDFILE.md', '$RMDFILE.html', options=c('use_xhml'))"
Run Code Online (Sandbox Code Playgroud)

然后

wkhtmltopdf example-r-markdown.html example-r-markdown.pdf
Run Code Online (Sandbox Code Playgroud)

生成的文件看起来像这样.它似乎没有处理MathJax(此问题在这里讨论),并且分页符很难看.但是,在某些情况下,这种风格可能比更多LaTeX风格的演示更受欢迎.


小智 9

只有两个步骤:

  1. 从这里安装最新版本"pandoc":

    https://github.com/jgm/pandoc/releases

  2. 调用函数pandoclibrary(knitr)

    library(knitr)
    pandoc('input.md', format = 'latex')
    
    Run Code Online (Sandbox Code Playgroud)

因此,您可以将"input.md"转换为"input.pdf".