使用 kable 表时有没有办法使用 knitr 的 css class 选项?

Is there a way to use knitr's css class options when using kable tables?

我最近阅读了关于 knitr 的 css classes 的块,如 and this example 中所述。

总的来说,这似乎很有效。我遇到的问题是,如果您使用的输出是 kable,这些选项似乎不再起作用。下面的例子说明了我在说什么。在前两个块中,我能够成功地将 css class bg-success 添加到我的输出中,但第三个块不应用它。

检查输出 html 文件,我发现前两个块包含在 <pre class='bg-success'>...</pre> html 块中,而第三个块包含在 <table class=table table-condensed>...</table> html块。 bg-success class 在这里的任何地方都找不到。

有人得到 knitr 的 class.output 选项来处理 kable 输出吗?有没有一种干净的方法可以做到这一点?我知道我可以将代码块包装在 div 中并在那里应用 class,但这很混乱,如果可能的话我更愿意干净利落地做到这一点。

---
title: "My Test"
output: html_document
---


\```{r setup, include=FALSE}
library(knitr)

knitr::opts_chunk$set(
    message = FALSE,
    warning = FALSE)
\```

Class works when applied to text:

\```{r working, class.output='bg-success'}
paste("Normal", "R chunk", "output!!")
\```

Class works when applied to data frame:

\```{r working_table, class.output='bg-success'}
head(iris)
\```

Class does not work when applied to kable output:

\```{r not_working, class.output='bg-success'}
kable(head(iris))
\```

通过 table.attr 参数将 class bg-success 添加到 table:

knitr::kable(head(iris), table.attr = "class=\'bg-success\'") %>% 
  kableExtra::kable_styling()

我意识到你需要修改 HTML table 的样式,将 class/argument 传递给 kable_styling function
显然,不需要指定 format 参数:

knitr::kable(head(iris), table.attr = "class=\'bg-success\'", format = "html") %>% 
  kableExtra::kable_styling()

此外,您需要包括 library(kableExtra){r setup}

您可以在 13.1.11 Customize HTML tables

部分找到有关 table.attr 参数的更多信息