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)
以下代码仅为第一列的第 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)