Space R Markdown 文档中的 kable 输出(使用 booktabs 选项)每五行之后

Space after every five rows in kable output (with booktabs option) in R Markdown document

我正在使用 knitr::kable() 将 table 呈现为 R Markdown 文档的一部分(它本身是 的一部分bookdown 项目)。特别是,booktabs 选项(通过将 booktabs 参数设置为等于 TRUE)以美观的方式呈现 table。但是,我希望每五行后没有 space。

例如,这里是代码以及 bookdown 演示中的 table 在呈现为 PDF 时的显示方式:

knitr::kable(
  head(iris, 20), caption = 'Here is a nice table!',
  booktabs = TRUE
)

我希望不包括每五行后出现的 space,但我似乎无法在 knitr::kable() 中找到执行此操作的设置。

行高不总是相等的原因是默认情况下,当booktabs被指定为TRUE时,kable每5行插入一个\addlinespace,如图here:

linesep = if (booktabs) c('', '', '', '', '\addlinespace') else '\hline'

要更改此设置,请将 linesep = "" 作为参数添加到 kable()

knitr::kable(
  head(iris, 20), caption = 'Here is a nice table!',
  booktabs = TRUE,
  linesep = ""
)

See  for more details.

值得一提的是,如果您想更改样式,可以使用此选项。例如 linesep = c("", "", "", "\hline") 将每四个空格添加一条水平线。

基于上面的示例,我对控制分离感兴趣。这与以下辅助函数配合得很好。这样就可以控制线分隔的位置。

linesep<-function(x,y=character()){
  if(!length(x))
    return(y)
  linesep(x[-length(x)], c(rep('',x[length(x)]-1),'\addlinespace',y))  
}
knitr::kable(
  head(iris, 20), caption = 'Here is a nice table!',
  booktabs = TRUE,
  linesep = linesep(c(3,2,1,1,3,5,4,1))
)

当在 table 上使用 prettyNum() 并将输出传递给 kableExtra::kable_styling() 时,Bart 的回答在我的远程服务器上对我不起作用,它只是在其中添加了一个充满 NA 的列并且没有行距。它似乎在我的本地机器上运行良好,所以我无法重现错误。 无论如何,这个替代解决方案对我有用(但仅当出于某种原因将 table 传递给 kableExtra 时):

linesep <- function(table, groups) {
 sep_indx <- rep("", nrow(table))
 sep_indx[cumsum(groups)] <- '\addlinespace'
 return(sep_indx)
}

knitr::kable(
  head(iris, 20),
  caption = 'Here is a nice table!',
  booktabs = TRUE,
  linesep = linesep(head(iris, 20), c(3, 2, 1, 1, 3, 5, 4, 1))
) %>% kableExtra::kable_styling(latex_options = c("scale_down", "HOLD_position"))

example