130

我之前询问过将 R Markdown 转换为 HTML 的命令

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

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

具体来说,有很多选择:

  • 是否将RMD转MD转HTML转PDF;或 RMD 到 MD 到 PDF;或 RMD 转 PDF
  • 如果markdown在 R 中使用包,需要指定哪些选项
  • 是否使用pandocR 中内置的包或其他

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

4

8 回答 8

71

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

rmarkdown 包:现在rmarkdowngithub 上有一个与 Pandoc 接口的包。它包括一个render功能。该文档非常清楚地说明了如何在一系列其他格式中将 rmarkdown 转换为 pdf。这包括在 rmarkdown 文件中包含输出格式或运行向 rend 函数提供输出格式。例如,

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

命令行: 当我从命令行运行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')"

旧答案(大约 2012 年)

因此,许多人建议 Pandoc 是要走的路。请参阅下面有关拥有最新版本 Pandoc 的重要性的注释。

使用 Pandoc

我使用以下命令将 R Markdown 转换为 HTML(即,此 makefile 的变体),其中RMDFILE是不包含组件的 R Markdown 文件的名称.rmd(它还假定扩展名为 is.rmd和 not .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'从选项列表中删除)。
  • 结果输出如下所示。与我从浏览器将 HTML 文件打印为 pdf 文件相比,它显然制作了一个非常 LaTeX 风格的文档。

获取最新版本的 Pandoc

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

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

cabal update
cabal install pandoc

Pandoc 安装在~/.cabal/bin/pandoc 因此,当我运行pandoc它时,它仍然看到旧版本。有关添加到路径的信息,请参见此处。

于 2012-06-15T02:36:59.897 回答
23

我认为您确实需要pandoc,这是专门为这项任务设计和构建的出色软件 :) 除了pdf之外,您还可以将md文件转换为例如docxodt等。

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

如果你有 brewed/knitted markdown 文件,你可以只调用pandoc例如 bash 或使用systemR 中的函数。后者的 POC 演示在Ṗandoc.convert我的小包的函数中实现(当我尝试时,你一定非常厌烦抓住每一个机会把你的注意力集中在那里)。

于 2012-06-14T19:55:15.150 回答
15

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

您可以将元数据更改为:

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

有关更多详细信息 - http://rmarkdown.rstudio.com/pdf_document_format.html在此处输入图像描述

于 2014-08-05T18:21:58.077 回答
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

生成的文件如下所示。它似乎没有处理 MathJax(这里讨论了这个问题),并且分页符很难看。然而,在某些情况下,这种风格可能比更多 LaTeX 风格的演示文稿更受欢迎。

于 2012-06-15T02:54:52.087 回答
9

只需两步:

  1. 从这里安装最新版本的“pandoc”:

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

  2. 调用中的pandoc函数library(knitr)

    library(knitr)
    pandoc('input.md', format = 'latex')
    

因此,您可以将“input.md”转换为“input.pdf”。

于 2014-06-21T22:16:56.233 回答
3

我发现使用 R studio 是最简单的方法,但是如果想从命令行进行控制,那么一个简单的 R 脚本可以使用rmarkdown渲染命令(如上所述)来完成。完整的脚本细节在这里

#!/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))
        }
    }
}
于 2016-08-12T05:22:06.533 回答
0

如果你不想安装任何东西,你可以输出 html。然后打开 html 文件 - 它应该在浏览器窗口中打开,然后右键单击打印。如果您使用的是 Mac,请在打印窗口中选择右下角的“另存为 pdf”。瞧!

于 2017-07-18T05:17:13.927 回答
0

请按照以下简单步骤操作:

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

于 2017-11-22T09:14:36.023 回答