如何将R Markdown转换为PDF?

时间:2012-06-14 00:07:45

标签: r-markdown knitr pandoc

我之前曾问过commands for converting R Markdown to HTML

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

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

具体来说,有很多选择:

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

这是一个示例rmd file,可能会对任何提议的解决方案提供合理的测试。它被用作this blog post的基础。

8 个答案:

答案 0 :(得分:67)

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

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

render("input.Rmd", "pdf_document")

<强>命令行: 当我从命令行运行render时(例如,使用makefile),我有时会遇到pandoc未找到的问题。据推测,它不在搜索路径上。 以下答案解释了how to add pandoc to the R environment

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

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

旧答案(大约2012年)

所以,很多人都建议Pandoc是要走的路。请参阅下面的说明,了解拥有最新版Pandoc的重要性。

使用Pandoc

我使用以下命令将R Markdown转换为HTML(即a variant of this makefile),其中RMDFILE是没有.rmd组件的R Markdown文件的名称(它还假设扩展名为.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'))"

然后将此命令转换为pdf

Pandoc -s example-r-markdown.html -o example-r-markdown.pdf

<小时/> 关于这一点的几点说明:

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

获取Pandoc的最新版本

如@daroczig所述,拥有最新版本的Pandoc以输出pdf非常重要。在截至2012年6月15日的Ubuntu上,我在软件包管理器中遇到了Pandoc的1.8.1版本,但从change log看来,对于pdf支持,至少需要1.9+版本的Pandoc。

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

cabal update
cabal install pandoc

Pandoc安装在~/.cabal/bin/pandoc 因此,当我运行pandoc时,它仍然看到旧版本。 请参阅此处adding to the path

答案 1 :(得分:22)

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

嗯,installing an up-to-date version of Pandoc可能会在Linux上进行挑战(因为你需要整个haskell-platform˙来自源代码),但在Windows / Mac上只需要几兆字节的下载就非常容易。

如果你有酿造/编织的降价文件,你可以在例如bash或用R中的pandoc函数调用system。后者的POC演示在{{3}中实现(你必须非常无聊,因为我试着把你的注意力集中在每个机会)。

答案 2 :(得分:14)

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

您可以将元数据更改为:

  1. 添加目录
  2. 更改图表选项
  3. 更改语法突出显示样式
  4. 添加LaTeX选项
  5. 还有更多......
  6. 有关详细信息,请访问http://rmarkdown.rstudio.com/pdf_document_format.html enter image description here

答案 3 :(得分:10)

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

在Ubuntu上

sudo apt-get install wkhtmltopdf

然后使用与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'))"

然后

wkhtmltopdf example-r-markdown.html example-r-markdown.pdf

生成的文件看起来像this。它似乎没有处理MathJax(this issue is discussed here),并且分页符很难看。但是,在某些情况下,这种风格可能比更多LaTeX风格的演示更受欢迎。

答案 4 :(得分:9)

只有两个步骤:

  1. 安装最新版本&#34; pandoc&#34;从这里:

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

  2. 调用pandoc

    中的library(knitr)函数
    library(knitr)
    pandoc('input.md', format = 'latex')
    
  3. 因此,您可以转换&#34; input.md&#34;进入&#34;输入.pdf&#34;。

答案 5 :(得分:3)

我发现使用R studio是最简单的方法,但是如果想要从命令行进行控制,那么一个简单的R脚本可以使用rmarkdown render命令(如上所述)来完成。完整的脚本详细信息here

#!/usr/bin/env R

# Render R markdown to PDF.
# Invoke with:
# > R -q -f make.R --args my_report.Rmd

# load packages
require(rmarkdown)

# require a parameter naming file to render
if (length(args) == 0) {
    stop("Error: missing file operand", call. = TRUE)
} else {
    # read report to render from command line
    for (rmd in commandArgs(trailingOnly = TRUE)) {
        # render Rmd to PDF
        if ( grepl("\\.Rmd$", rmd) && file.exists(rmd)) {
            render(rmd, pdf_document())
        } else {
            print(paste("Ignoring: ", rmd))
        }
    }
}

答案 6 :(得分:0)

如果您不想安装任何内容,可以输出html。然后打开html文件 - 它应该在浏览器窗口中打开,然后右键单击打印。在打印窗口中,选择&#34;另存为pdf&#34;如果你在Mac上,请在右下角。瞧!

答案 7 :(得分:0)

遵循以下简单步骤:

1:在Rmarkdown脚本中运行Knit(Ctrl + Shift + K) 2:然后打开html markdown后,单击在浏览器中打开(左上角)和    html在您的Web浏览器中打开 3:然后使用Ctrl + P并另存为PDF。