RMarkdown XeLaTeX生成PDF时用kableExtra修改kable单元格字体颜色
解决方案
可以实现需求,同时支持用cell_spec完成。你可以选择直接在现有代码基础上追加row_spec调用实现零改动原有逻辑,也可以用cell_spec实现更灵活的批量单元格样式配置,以下是两种实现方案:
方案1:最小改动扩展现有代码(推荐)
直接在你现有代码的管道末尾追加row_spec语句即可,row_spec的column参数可以选中对应行的特定列,直接设置字体颜色,完全不影响原有逻辑:
library(kableExtra) x_latex <- knitr::kable(head(mtcars), "latex", booktabs=T, col.names = NULL) kable_styling(x_latex, latex_options = c("striped","HOLD_position"), stripe_color = "gray!13") %>% sub("\\\\toprule", "", .) %>% sub("\\\\bottomrule", "", .) %>% row_spec(2,bold=TRUE) %>% # 新增单元格颜色配置 row_spec(row = 1, column = 1, color = "red") %>% row_spec(row = 2, column = 2, color = "red")
该方案适合少量单元格自定义样式的场景,不需要调整原有代码逻辑。
方案2:使用cell_spec实现
如果需要批量修改大量不规则单元格,可以采用cell_spec预先给数据框单元格添加样式,代码如下:
library(kableExtra) # 预处理数据,给指定单元格套上样式 df <- head(mtcars) df[1,1] <- cell_spec(df[1,1], color = "red", format = "latex") df[2,2] <- cell_spec(df[2,2], color = "red", format = "latex") x_latex <- knitr::kable(df, "latex", booktabs=T, col.names = NULL, escape = FALSE) kable_styling(x_latex, latex_options = c("striped","HOLD_position"), stripe_color = "gray!13") %>% sub("\\\\toprule", "", .) %>% sub("\\\\bottomrule", "", .) %>% row_spec(2,bold=TRUE)
注意需要给kable添加escape = FALSE参数,避免样式标签被转义失效。
内容的提问来源于stack exchange,提问作者JK Lambert
相关产品推荐
相关产品推荐

