使用包可能可以做到这一点tables
,但xtable
提供了一个非常简单的解决方案。以下最小示例显示了两种不同的方法:
\documentclass{article}
\begin{document}
<<setup, echo = FALSE>>=
library(xtable)
library(knitr)
opts_chunk$set(echo = FALSE, results = "asis")
matrix <- matrix(1:9, nrow = 3)
colnames(matrix) <- c(
"first column",
"second column which I want to have 2 lines because of its very long header title",
"third column")
@
<<ChangeColumnType>>=
print(xtable(matrix, align = c("r", "r", "p{4cm}", "r")), include.rownames = FALSE)
@
<<ChangeOnlyCell>>=
colnames(matrix)[2] <- "\\multicolumn{1}{p{4cm}}{second column which I want to have 2 lines because of its very long header title}"
print(xtable(matrix), include.rownames = FALSE, sanitize.colnames.function = identity)
@
\end{document}
第一种方法(chunk ChangeColumnType
)非常简单:它将第 2 列的列类型设置为p{4cm}
. 这给出了一个 4 厘米宽的列,并带有自动文本换行(有关更多详细信息,请参见wikibooks.org)。缺点是,这会影响整个列,而不仅仅是第一行中的单元格。
第二种方法(chunk ChangeOnlyCell
)使用默认对齐方式(或您想通过 指定的任何内容align
)并仅使用 更改有问题的单元格的列类型\multcolumn
。默认情况下,xtable
“清理”您的表格,这意味着所有特殊的乳胶字符都将被转义。这很方便,因为你不能(轻易地)破坏你的 TEX 代码,但是在这里我们要手动注入 LaTeX 代码,所以我们必须关闭它。因此,设置sanitize.colnames.function = identiy
. 所有列名都将按照您指定的方式使用——因此在 LaTeX 中使用具有特殊含义的字符时要小心。
上面的示例提供了下表:
