从 rmarkdown::render 捕获 'output_format' 作为变量

Capture 'output_format' from rmarkdown::render as variable

我将 RStudio 与 knitr 等一起使用,以制作可重现的报告,并希望为 Word 文档和 PDF 提供最好的版本 - 我更喜欢使用 LaTeX,但最终用户倾向于更喜欢可编辑 Word 文档的灵活性。

我写了一个 ifelse 声明,本质上说 'if this is rendered as a word document, create a kable table in markdown, else create the kable table in LaTeX and then manipulate to make the table look better (shaded rows, etc)'。

我不明白 rmarkdown::rendering 过程如何捕获 output_format,但是有没有办法将其存储为变量并在 ifelse 语句中使用?

一个最小的例子是将此代码保存为 test.Rmd:

format <- output_format #(somehow captured as a variable)

printTable <- function(data = df, format = format){

if (format %in% 'pdf_document') {

    # create nice latex table

} else {

    # create markdown table

}
}

然后,当运行这个代码:

rmarkdown::render(input = "test.Rmd", output_format = c("word_document", "pdf_document"))

不同版本的报告会包含正确的表格。

您可以通过knitr::opts_knit$get("rmarkdown.pandoc.to")访问输出格式。这将 return 一个具有目标输出格式的字符串。这是一个例子:

---
title: "Untitled"
output: html_document
---

```{r}
library(knitr)
opts_knit$get("rmarkdown.pandoc.to")
```

此 returns "html" 用于 html_document,"docx" 用于 word_document,"latex" 用于 pdf_document。