kableExtra column_spec中的宽度不完全

问题描述 投票:0回答:1

我想将2个表与不同的列号对齐。当使用列规格的宽度功能时,我得到不同的列宽。以我的理解,宽度为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我可以手动设置宽度,直到表格完全对齐为止。还是有更好的方法来解决问题?

谢谢您!

r latex r-markdown kable kableextra
1个回答
0
投票

在LaTeX中,每列之间都有一个分隔,也有一个宽度。分隔的大小以\tabcolsep为单位。当您有更多的列时,您将获得更多的分隔符,因此表的总宽度也将更大。

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

\setlength{\tabcolsep}{0pt}

[在LaTeX中,我认为您也可以将宽列的宽度设置为9cm加\tabcolsep,以便将分隔符保留在其他位置,但我不确定kableExtra是否支持。

编辑添加:

这似乎不需要修改\tabcolsep就可以了:创建一个包含它的新长度(实际上是两次,两边都得到分隔),然后使用它。您已将这样的代码放在文档的开头

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

然后使用此代码生成表:

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")
© www.soinside.com 2019 - 2024. All rights reserved.