在knitr中指定多个同时输出格式(新)

时间:2017-06-21 20:14:05

标签: r yaml knitr r-markdown

我可以编写YAML标头,使用knitr为R Markdown文件生成多种输出格式吗?我无法重现the original question with this title的答案中描述的功能。

此降价文件:

---
title: "Multiple output formats"
output: 
    pdf_document: default
    html_document:
      keep_md: yes
---

# This document should be rendered as an html file and as a pdf file

生成pdf文件,但没有HTML文件。

这个文件:

---
title: "Multiple output formats"
output: 
  html_document:
    keep_md: yes
  pdf_document: default
---

# This document should be rendered as an html file and as a pdf file

生成HTML文件(和md文件),但没有pdf文件。

后一个例子是给original question的解决方案。我尝试使用Shift-Ctrl-K和RStudio中的Knit按钮进行编织,以及调用rmarkdown::render,但只创建了一种输出格式,无论我使用哪种方法生成输出文件。 / p>

可能相关,但我找不到解决方案:

使用R版本3.3.1(2016-06-21),knitr 1.14,Rmarkdown 1.3

2 个答案:

答案 0 :(得分:14)

我实际上在Render all vignette formats #1051中简要提到过你错过了它:

rmarkdown::render('your.Rmd', output_format = 'all')

它在帮助页面?rmarkdown::render上有记录。

答案 1 :(得分:0)

尽管谢一辉(Yihui Xie)给出了权威性的回答,并且对一个伟大的软件包的作者给予了应有的尊重,但在许多情况下,output_format = 'all'并不是最理想的。
该解决方案引起的问题之一是,对于每种格式,从头开始重新处理R脚本。证明:

 rmarkdown::render("new.Rmd", output_format = c("html_document", "pdf_document"))


processing file: new.spin.Rmd
  |.......................                                               |  33%
  ordinary text without R code

  |...............................................                       |  67%
label: unnamed-chunk-1
  |......................................................................| 100%
  ordinary text without R code


output file: new.knit.md

"C:/Users/fabrn/AppData/Local/Pandoc/pandoc" +RTS -K512m -RTS new.utf8.md --to html4 --from markdown+autolink_bare_uris+tex_math_single_backslash --output new.html --lua-filter "C:\Users\fabrn\R\win-library\4.0\rmarkdown\rmarkdown\lua\pagebreak.lua" --lua-filter "C:\Users\fabrn\R\win-library\4.0\rmarkdown\rmarkdown\lua\latex-div.lua" --email-obfuscation none --self-contained --standalone --section-divs --template "C:\Users\fabrn\R\win-library\4.0\rmarkdown\rmd\h\default.html" --no-highlight --variable highlightjs=1 --variable "theme:bootstrap" --include-in-header "C:\Users\fabrn\AppData\Local\Temp\RtmpW6Vban\rmarkdown-str3490247b1f1e.html" --mathjax --variable "mathjax-url:https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" 

Output created: new.html


processing file: new.spin.Rmd
  |.......................                                               |  33%
  ordinary text without R code

  |...............................................                       |  67%
label: unnamed-chunk-1
  |......................................................................| 100%
  ordinary text without R code


output file: new.knit.md

"C:/Users/fabrn/AppData/Local/Pandoc/pandoc" +RTS -K512m -RTS new.utf8.md --to latex --from markdown+autolink_bare_uris+tex_math_single_backslash --output new.tex --lua-filter "C:\Users\fabrn\R\win-library\4.0\rmarkdown\rmarkdown\lua\pagebreak.lua" --lua-filter "C:\Users\fabrn\R\win-library\4.0\rmarkdown\rmarkdown\lua\latex-div.lua" --self-contained --highlight-style tango --pdf-engine pdflatex --variable graphics --variable "geometry:margin=1in" 

在处理大数据时,这确实是一个问题。
在实际示例中,我通常将乳胶输出用作单个rmarkdown::render输出,然后使用.tex或类似工具(如pdf的pandoc)重新处理prince文件。所以我的工作流程就像:

 rmarkdown::render('new.R', output_format = 'latex_document')
 lapply(c("html", "pdf", ...), 
        function(form) rmarkdown::pandoc_convert("new.tex", output=paste0("new.", form)))

最重要的是:一切取决于您的数据。如果很小,output_format='all'很简单。 如果大,最好使用通用格式(最好使用乳胶,但在某些情况下使用html更好)作为转换工具的输入。