在 Rmarkdown 文档中包含表格时,我想为比页面宽的表格启用自动换行。
我知道,在 kabelExtra 中,使用
column_spec
定义固定宽度,或设置 full.width = TRUE
可以实现换行,但这种解决方案是有代价的:线之间的距离变得有点卡顿。通过设置 booktabs = TRUE
和 linesep = ""
或 linesep = "\\addnewline"
可以部分解决此问题。当然,还有手动插入换行符的解决方法。另请参阅 Hao 的这份文档,概述了专门针对 kableExtra 的方法。
对于 stargazer 或 xtable,我只找到涉及乳胶输出后处理的方法,例如将输出包装在表环境中或使用 gsub
替换部分乳胶代码。我对所有解决方案的问题不是它们不起作用,而是它们很乏味,对数据的变化敏感,通常将文档限制为 tex/pdf 输出,并要求您自定义每个表格(如果您重视一致性) 。它们还经常使其他地方的表格交叉引用变得复杂,并且“一般来说”使事情变得复杂。
我正在寻找的是一个具有强大默认值的开箱即用的解决方案,如果表格会溢出,则在需要时应用换行。最好的情况是也适用于 pdf 以外的其他输出。
是否有人知道接近此的方法,或者知道这是否是任何表包计划的功能?如果有人知道为什么所有软件包都没有这个(看似简单)功能,我也会对此感兴趣。
"```"{r chunk-name}
df <- data.frame(
ShortText = c("Row 1", "Row 2", "Row 3"),
LongText = c(
"This is a longer piece of text for the first row.",
"Here is another extended description, this time for the second row. It's very long and would overflow easily",
"Finally, the third row contains its own lengthy explanation."
)
)
"```"
kable(df)
knitr::kable
和 kableExtra,但最终因为这个原因改用了
flextable
。使用 flextable 可以轻松调整宽度,并且默认换行。语法与 kable 不同,所以我花了一些时间来习惯它,但它是一个非常灵活的包,允许人们做很多事情。
library(flextable)
flextable(df <- data.frame(
ShortText = c("Row 1", "Row 2", "Row 3"),
LongText = c(
"This is a longer piece of text for the first row.",
"Here is another extended description, this time for the second row. It's very long and would overflow easily",
"Finally, the third row contains its own lengthy explanation."
)
))
您可以查看flextable书。