Пробел после каждых пяти строк в выводе kable (с опцией booktabs) в документе R Markdown
Я использую knitr::kable()
отображать таблицы как часть документа R Markdown (который сам является частью проекта уценки). В частности, опция booktabs (через настройку booktabs
аргумент равных TRUE
) рендерит стол в красивой форме. Тем не менее, я бы хотел, чтобы после каждых пяти строк не было пробела.
Вот, например, код и способ отображения таблицы в демоверсии bookdown при визуализации в формате PDF:
knitr::kable(
head(iris, 20), caption = 'Here is a nice table!',
booktabs = TRUE
)
Я хотел бы, чтобы пространство, которое появляется после каждых пяти строк, не было включено, но я не могу найти параметр в knitr::kable()
это делает это
3 ответа
Причина, по которой высота строки не всегда одинакова, заключается в том, что по умолчанию kable вставляет \addlinespaceevery
каждые 5 строк, когда booktabs указан как TRUE, как показано здесь:
linesep = if (booktabs) c('', '', '', '', '\\addlinespace') else '\\hline'
Чтобы изменить это, добавьте linesep = ""
в качестве аргумента kable()
,
knitr::kable(
head(iris, 20), caption = 'Here is a nice table!',
booktabs = TRUE,
linesep = ""
)
Смотрите раздел Избавление от \addlinespace в kable для более подробной информации.
Также стоит сказать, что вы можете поиграть с этой опцией, если хотите изменить стиль. Например 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))
)
Ответ Барта не сработал для меня на моем удаленном сервере при использовании prettyNum() в таблице и передаче вывода в kableExtra::kable_styling(), где он просто добавил столбец, полный 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"))