kableExtra column_spec 中的宽度不准确

width in kableExtra column_spec not exact

我想对齐 2 个具有不同列号的表。使用 column spec 的 width 函数时,我得到不同的列宽。在我的理解中,宽度为 9cm 的列应该与宽度为 6cm 和 3cm 的 2 列一样大。我的逻辑对吗?

我的代码:

library(kableExtra)
library(xtable)
df = mtcars[1:5,1:4]

df = xtable(df)
align(df) = c("l","l","r","r","r")

df %>% xtable2kable(include.rownames=FALSE) %>%   column_spec(1, width = "6cm") %>% column_spec(2, width = "3cm") %>%
column_spec(3, width = "3cm") %>%  column_spec(4, width = "2cm") %>% row_spec(0, bold = T, color = "white", background = "#2F2E41")

df = mtcars[1:5,c(1,3,4)]
df = xtable(df)
align(df) = c("l","l","r","r")
df %>% xtable2kable(include.rownames=FALSE)  %>%  column_spec(1, width = "9cm") %>%
column_spec(2, width = "3cm") %>% column_spec(3, width = "2cm")  %>% row_spec(0, bold = T, color = "white", background = "#2F2E41")

Ofc 我可以手动设置宽度,直到表格完全对齐。或者有没有更好的方法来解决问题?

提前致谢!

在 LaTeX 中,每一列之间都有一个分隔符和一个宽度。分隔的大小在 \tabcolsep 中。当你有更多的列时,你会得到更多的分隔符,因此总体上 table 更宽。

您可以通过将分隔设置为零来解决此问题,例如将此 LaTeX 代码放在文档的前面:

\setlength{\tabcolsep}{0pt}

在 LaTeX 中,我想你也可以将宽列的宽度设置为 9cm 加上 \tabcolsep 这样你就可以在其他地方保持分隔,但我不确定 kableExtra 是否支持.

编辑添加:

这似乎无需修改就可以工作 \tabcolsep:创建一个包含它的新长度(实际上是两次,两边都有分隔),然后使用它。你会把这样的代码放在文档的前面

\newlength{\widecolsize}
\setlength{\widecolsize}{9cm}
\addtolength{\widecolsize}{2.0\tabcolsep}

然后使用此代码生成 table:

df %>% xtable2kable(include.rownames=FALSE)  %>%  column_spec(1, width = "\\widecolsize") %>%
column_spec(2, width = "3cm") %>% column_spec(3, width = "2cm")  %>% row_spec(0, bold = T, color = "white", background = "#2F2E41")