kableExtra多DataFrame表格中caption.short参数失效问题咨询
这绝对不是你的操作失误——这是kableExtra包在处理多dataframe列表输入时的一个潜在问题,不少用户都反馈过类似的参数失效情况。
问题根源
当你向kable()传入单个dataframe时,包的内部逻辑会完整处理caption.short、row_spec()、add_header_above()这类参数,并正确生成带短标题的LaTeX代码。但传入多个dataframe组成的列表时,kable()的渲染逻辑是针对多子表场景设计的,目前并没有把caption.short这类附加参数正确映射到最终的LaTeX输出中,导致\listoftables无法识别短标题;同理,row_spec()和add_header_above()这类针对单表的样式函数,也会因为多子表的逻辑兼容问题出现异常。
可行的临时解决方案
除了你已经采用的手动插入LaTeX代码的方法,还有两种更便捷的思路:
拆分生成再组合
先分别为每个子表生成完整的带参数的kable对象,再组合输出,这样每个子表的参数都能正常生效:library(kableExtra) t1 <- c(68, 48, 50, 113, 98, 94) t2 <- c(26, 16, 22, 30, 16, 12) Group <- c("b1", "b2", "b3", "b4", "b5", "b6") cows <- data.frame(Group, t1, t2) colnames(cows) <- c("Group", "t1", "t2") # 分别生成子表 sub_table1 <- kable(cows[1:3,], format = "latex", caption = "Number of some variables (Groups b1-b3)", caption.short = "Vars (b1-b3)", booktabs = T, row.names = F) %>% kable_styling(latex_options = c("striped", "hold_position")) sub_table2 <- kable(cows[4:6,], format = "latex", caption = "Number of some variables (Groups b4-b6)", caption.short = "Vars (b4-b6)", booktabs = T, row.names = F) %>% kable_styling(latex_options = c("striped", "hold_position")) # 组合输出 cat(sub_table1, "\n\n", sub_table2)手动补全LaTeX短标题
如果你需要统一的全局短标题,可以在kable()生成的LaTeX代码基础上,手动修改\caption命令:将生成的
\caption{Number of some variables used in some groups}
修改为\caption[Anything shorter.]{Number of some variables used in some groups}
这个方法和你当前的解决方案一致,能直接让\listoftables识别到短标题。
长期建议
你可以去kableExtra的官方代码仓库搜索是否有相关的已提交问题,如果没有的话,建议带上你的复现代码提交一个新问题,帮助开发者完善多子表场景下的参数兼容逻辑。
内容的提问来源于stack exchange,提问作者M M

