采用自动参数选项/细节与knitr呈现取决于如果html或pdf的生产

nr9pn0ug  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(67)

我意识到knitr::kable()中的表格布局会根据制作pdf或html的选择而有所不同。这可以通过选择knitr()中最常用的参数格式来解决。很多时候,我用.Rmd制作html和pdf输出(不同的目标受众-不同的习惯),在那里,我很难用一个. Rmd为他们两个都制作好看的结果。
理想情况下,我只想使用一个Rmd文件(对于给定的项目...),并在运行render()时采用一些细节(例如函数kable()中的format="”参数),并避免制作两个不同版本的Rmd(一个用于html,一个用于pdf)。
我的问题在某种程度上与R - kable() used in .Rmd does not show output in notebook有关。有人建议使用rmarkdown::metadata可以看到yaml头中写入的内容。在我的yaml头中,我通常指定pdf和html。所以最后这对我没有帮助,因为rmarkdown::metadata的结果总是相同的,独立于我调用rmarkdown::render(“test1.Rmd”,output_format ='pdf_document')或rmarkdown::render(“test1.Rmd”,output_format ='html_document')。
1.有没有一种方法可以从块中知道调用rmarkdown::render()时选择了哪个output_format?
1.另一个选项可能是yaml-header:我可以在头文件中指定使用knitr时应该选择哪个'format'参数吗?

title: "my title"  
header-includes: \usepackage{float}
output:
  html_document: 
    toc: true
    knitr_format: html
  pdf_document:
    number_sections: no
    knitr_format: latex

这样,我想让R运行knitr::kable(xx,format=“latex”)或knitr::kable(xx,format=“html”),这取决于rmarkdown::render()是如何被调用的。
如前所述,我查看了rmarkdown::metadata,但这并不允许知道render()是如何被调用的。

bis0qfac

bis0qfac1#

一个选项是使用knitr::is_html_output和/或knitr::is_latex_output根据输出格式有条件地运行代码:

---
title: "my title"  
header-includes: \usepackage{float}
output:
  pdf_document:
    number_sections: no
  html_document: 
    toc: true
---

```{r}
format <- if (knitr::is_html_output()) {
  "html"  
} else if (knitr::is_latex_output()) {
  "latex"
}

print(format)

knitr::kable(head(mtcars[1:4]), format = format)

![](https://i.stack.imgur.com/jPwiV.png)

![](https://i.stack.imgur.com/ZxHHi.png)

相关问题