kable 缩进所有列的具有特定 hspace 的行

kable indent rows with specific hspace for all columns

以下代码仅为第一列的第 2 行和第 4 行添加缩进。

library(kableExtra)
knitr::kable(head(mtcars[ ,1:4]), "latex") %>% 
  add_indent(positions = c(2, 4))

想知道如何将特定 hspace 的缩进添加到所有列的第 2 行和第 4 行。像这样

library(kableExtra)
knitr::kable(head(mtcars[ ,1:4]), "latex") %>% 
  add_indent(positions = c(2, 4), hspace = "2em", allCols = TRUE)

add_indent确实只为第一列制作。

解决方法是在数据框中手动添加缩进:

head(mtcars) %>%
  mutate_all(., funs(ifelse(row_number() %in% c(2, 4), 
                            paste0("\hspace{1em}", .), .))) %>%
  kable(format = "latex", booktabs = T, escape = F)

给出:

我们可以编写一个添加此选项的 add_indent 函数版本。这样做可以确保在每一行中一致地应用诸如 digits 之类的 kable 选项。

add_indent = function(kable_input, positions, allCols = FALSE) {
  out = kableExtra::add_indent(kable_input, positions)
  if (allCols){  
    table_info <- magic_mirror(kable_input)
    for (i in positions + table_info$position_offset) {
      rowtext <- table_info$contents[i]
      table_info$contents[i] <- gsub(' &', paste(' &', kableExtra:::latex_indent_unit('')), rowtext)
      out <- gsub(rowtext, table_info$contents[i], out, fixed = T)
    }
    out <- structure(out, format = "latex", class = "knitr_kable")
    attr(out, "kable_meta") <- table_info
  }  
  return(out)
}


kable(head(mtcars[ ,1:4]), "latex", align = 'l') %>% 
  add_indent(positions = c(2, 4), allCols = T)