如何将 R Markdown 转换为 PDF?
Posted
技术标签:
【中文标题】如何将 R Markdown 转换为 PDF?【英文标题】:How to convert R Markdown to PDF? 【发布时间】:2012-06-17 00:22:15 【问题描述】:我之前询问过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 的基础。
【问题讨论】:
我相信 pandoc 应该是最好的选择。将它构建到 R 中对我来说没有多大意义,而且我认为也不可能(它是用 Haskell 编写的)。我在这里有一些非常早期的工作:github.com/yihui/knitr-book(参见两个 shell 脚本knit
和mdconvert.sh
)。由于 LaTeX 过于灵活,因此可能很难提出一个通用的方法; pandoc 可以使用各种模板。
什么是'R Markdown*? rstudio.com/ide/docs/r_markdown
markdowntopdf.com 这个网站其实还不错。但是,没有乳胶支持
我们可以为 RStudio v1.0 更新这个答案吗?
【参考方案1】:
按照这些简单的步骤:
1:在 Rmarkdown 脚本中运行 Knit(Ctrl+Shift+K) 2:然后打开html markdown后点击在浏览器中打开(左上角)和 html 在您的网络浏览器中打开 3:然后使用Ctrl+P保存为PDF。
【讨论】:
【参考方案2】:如果你不想安装任何东西,你可以输出 html。然后打开 html 文件 - 它应该在浏览器窗口中打开,然后右键单击打印。如果您使用的是 Mac,请在打印窗口中选择右下角的“另存为 pdf”。瞧!
【讨论】:
【参考方案3】:更新答案(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 文件的名称(它还假设扩展名是@987654334 @ 而不是 .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。与我从浏览器将 HTML 文件打印为 pdf 文件相比,它显然制作了一个非常 LaTeX 风格的文档。
获取最新版本的 Pandoc
正如@daroczig 所述,拥有最新版本的 Pandoc 以输出 pdf 文件非常重要。在 2012 年 6 月 15 日的 Ubuntu 上,我在包管理器中一直使用 1.8.1 版的 Pandoc,但从 change log 看来,对于 pdf 支持,您至少需要 1.9+ 版的 Pandoc。
因此,我安装了caball-install
。
然后跑:
cabal update
cabal install pandoc
Pandoc 安装在~/.cabal/bin/pandoc
因此,当我运行pandoc
时,它仍然看到的是旧版本。
在此处查看adding to the path。
【讨论】:
感谢您的回答。我只想评论一下,我的经验是,将 .md 文件提供给 pandoc,而不是 .html 文件,可以提供更好的输出。所以值得尝试。 这也是我最接近一个好的过程。有什么方法可以将图形文本从“plot chunk of ...”更改为其他内容?pandoc
即使在我现在已经过时的 Ubuntu 13.04 中也是 1.12 版。【参考方案4】:
只需两步:
从这里安装最新版本的“pandoc”:
https://github.com/jgm/pandoc/releases
在library(knitr)
中调用函数pandoc
library(knitr)
pandoc('input.md', format = 'latex')
因此,您可以将“input.md”转换为“input.pdf”。
【讨论】:
【参考方案5】:我发现使用 R studio 是最简单的方法,但是如果想从命令行进行控制,那么一个简单的 R 脚本可以使用 rmarkdown 渲染命令(如上所述)来完成。完整脚本详情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】:现在(2014 年 8 月)您可以使用 RStudio 将 R Markdown 转换为 PDF。 基本上,RStudio 使用 pandoc 将 Rmd 转换为 PDF。
您可以将元数据更改为:
-
添加目录
更改图形选项
更改语法高亮样式
添加 LaTeX 选项
还有更多...
更多详情-http://rmarkdown.rstudio.com/pdf_document_format.html
【讨论】:
'knit PDF' 选项在 Ubuntu 14.04、pandoc v1.17.1 中不可用。有什么需要做的设置吗? 你有什么版本的 RStudio?您是否创建了新的 rmarkdown 文件? Rstudio - v 0.98.507 让我们continue this discussion in chat. @Prradep 谈话的结果是什么?【参考方案7】:我认为你真的需要 pandoc,这是专为这项任务设计和构建的出色软件 :) 除了 pdf,您还可以将 md 文件转换为例如docx 或 odt 等等。
好吧,installing an up-to-date version of Pandoc 可能在 Linux 上具有挑战性(因为您需要整个 haskell-platform
˙ 从源代码构建),但在 Windows/Mac 上非常容易,只需下载几兆字节。
如果你有 brewed/knitted markdown 文件,你可以在例如 bash 中调用 pandoc
或使用 R 中的 system
函数。后者的 POC 演示在 Ṗandoc.convert
function of my little package 中实现(你一定很无聊,因为我试图抓住每一个机会把你的注意力放在那里)。
【讨论】:
+1 功能看起来不错;你有推荐的将 R Markdown 转换为 PDF 的单行 pandoc 命令吗? 在命令行中添加--toc
会很有用(根据您的标题生成 nics 目录),还可以根据您的需要自定义 LaTeX 模板(例如添加 \listoffigures
和/或\listoftables
等)可能会产生精彩的文档。
apt-get install pandoc
有什么挑战?
@sumid 您可能错过了 up-to-date 部分(好吧,如果您不使用测试)。
是的,你是对的 - 两次。我错过了它,我也在使用测试;-) 然后我认为更容易临时允许在sources.list
中进行测试并进行apt-get install -t testing pandoc
然后安装haskell-platform
和编译。 (通常我是通过实验来做到这一点的。我希望在测试中也能以同样的方式工作。)【参考方案8】:
对于看起来更像从浏览器打印时获得的选项,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 风格的演示文稿更受欢迎。
【讨论】:
我无法在 RStudio 中运行最后一个命令。我试过system("wkhtmltopdf temp.html temp.pdf")
知道如何解决这个问题以上是关于如何将 R Markdown 转换为 PDF?的主要内容,如果未能解决你的问题,请参考以下文章