42

我正在使用knitr::kable()将表格呈现为R Markdown文档的一部分(它本身是bookdown项目的一部分)。特别是, booktabs 选项(通过将booktabs参数设置为 equal TRUE)以漂亮的方式呈现表格。但是,我希望每五行之后不要有空格。

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

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

带书单的鸢尾花桌

我希望不包括每五行之后出现的空间,但我似乎找不到knitr::kable()这样做的设置。

4

3 回答 3

73

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

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

要改变这一点,请将 linesep = ""其作为参数添加到kable().

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

在此处输入图像描述

有关详细信息,请参阅 摆脱 kable 中的 \addlinespace  。

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

于 2018-02-27T22:21:59.690 回答
6

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

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))
)

在此处输入图像描述

于 2021-01-22T11:30:45.430 回答
0

当在表上使用 prettyNum() 并将输出传递给 kableExtra::kable_styling() 时,Bart 的答案在我的远程服务器上对我不起作用,它只是在其中添加了一个充满 NA 且没有行空间的列。它似乎在我的本地机器上工作正常,所以我无法重现该错误。无论如何,这个替代解决方案对我有用(但仅在出于某种原因将表格传递给 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"))

例子

于 2022-01-28T09:17:44.923 回答