我之前曾问过commands for converting R Markdown to HTML。
将R Markdown文件转换为PDF文档有什么好方法?
一个好的解决方案将尽可能多地保留内容(例如,图像,方程式,html表格等)。解决方案需要能够从命令行运行。一个好的解决方案也是跨平台的,理想情况下最小化依赖关系,以便更容易共享makefile等等。
具体来说,有很多选择:
markdown
包,则指定哪些选项pandoc
,内置于R的软件包或其他内容这是一个示例rmd file,可能会对任何提议的解决方案提供合理的测试。它被用作this blog post的基础。
答案 0 :(得分:67)
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')"
所以,很多人都建议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
<小时/> 关于这一点的几点说明:
markdownToHTML
函数中的选项意味着图像引用是指文件,而不是存储在HTML文件中的数据(即,我从选项列表中删除了'base64_images'
)。如@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。
您可以将元数据更改为:
有关详细信息,请访问http://rmarkdown.rstudio.com/pdf_document_format.html
答案 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)
只有两个步骤:
安装最新版本&#34; pandoc&#34;从这里:
调用pandoc
library(knitr)
函数
library(knitr)
pandoc('input.md', format = 'latex')
因此,您可以转换&#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。