更新答案(2013 年 2 月 10 日)
rmarkdown 包:现在rmarkdown
github 上有一个与 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
它时,它仍然看到旧版本。有关添加到路径的信息,请参见此处。