如何将 R 标记转换为 PDF?

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

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

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

具体来说,有很多选择:

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

下面是一个 Rmd 文件示例,它大概提供了对任何提议的解决方案的合理测试。它被用作 这篇博文的基础。

119079 次浏览

我认为你真的需要 潘多克,这个伟大的软件就是为了这个任务而设计和构建的:)除了 Pdf,你还可以把你的 医学博士文件转换成如 Docx或者 奇怪等等。

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

如果你有煮好的/针织的标记文件,你可以在 bash 中调用 pandoc,或者在 R 中使用 system函数。后者的 POC 演示在 我的小程序包的 Ṗandoc.convert功能(你一定觉得很无聊,因为我一有机会就想引起你的注意)中实现。

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

降价套餐 : 现在有一个与 Pandoc 接口的 可在 github 上使用 rmarkdown软件包。 它包含一个 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 的重要性的说明。

使用潘多克

我使用以下命令将 R Markdown 转换为 HTML (即 这个 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')。
  • 结果输出看起来像 这个。很明显,这是一个非常 LaTeX 风格的文档,与我从浏览器打印 HTML 文件到 pdf 格式的结果形成了鲜明的对比。

了解最新版本的 Pandoc

正如@daroczig 所提到的,为了输出 pdf,拥有一个最新版本的 Pandoc 是很重要的。在2012年6月15日的 Ubuntu 上,我在软件包管理器中使用的是 Pandoc 的1.8.1版本,但是从 更改日志来看,对于 pdf 的支持,你至少需要 Pandoc 的1.9 + 版本。

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

cabal update
cabal install pandoc

~/.cabal/bin/pandoc中安装了 Pandoc 因此,当我运行 pandoc时,仍然看到旧版本。 看这里的 增加路径

对于一个看起来更像从浏览器打印时所得到的选项,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 样式的演示文稿。

只有两步:

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

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

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

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

Thus, you can convert your "input.md" into "input.pdf".

现在(2014年8月)您可以使用 工作室将 R Markdown 转换为 PDF。 基本上,RStudio 使用 潘多克将 Rmd 转换为 PDF。

您可以将元数据更改为:

  1. 添加目录
  2. 更改图形选项
  3. 改变语法突显风格
  4. 添加 LaTeX 选项
  5. 还有更多..。

欲了解更多细节,请访问以下网址: http://rmarkdown.rstudio.com/pdf _ document _ format.html rel = “ norefrer”> http://rmarkdown.rstudio.com/pdf_document_format.htmlenter image description here

我发现使用 R Studio 是最简单的方法,但是如果想要从命令行进行控制,那么一个简单的 R 脚本可以使用 降价呈现命令(如上所述)完成这个任务。完整的脚本细节 给你

#!/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))
}
}
}

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

遵循以下简单步骤:

1: 在 Rmarkdown 脚本中运行 Knit (Ctrl + Shift + K) 2: 然后在 html 标记打开后,单击 Open in Browser (左上角)和 在你的浏览器中打开 html 3: 然后使用 Ctrl + P 并保存为 PDF。