2015-08-13 29 views
2

我最终使用tables包装和knitr,但我无法弄清楚如何获得多行标题。下面是代码:使用knitr和乳胶的多行表格标题

<<test_table, results='asis', echo=FALSE>>= 
matrix <- matrix(1:9, nrow = 3) 
colnames(matrix) <- c("first column", "seconf column which I want to have 2  lines because of its very long header title", "third column") 
library(tables) 
table <- as.tabular(matrix) 
latex(table) 
@ 
+1

你能简单地添加\ n,如“我想有2个\ nlines ...... – lawyeR

+0

它是否适合你seconf列@lawyeR对我来说“\ n”简单地被忽略 – dariaa

+0

@dariaa,你是对的,似乎没有工作(我也尝试了一个简单的回车并尝试了setNames()函数,我不是乳胶大师,但是你有查看http://tex.stackexchange.com/questions/39253/multiline-table-header – lawyeR

回答

0

这也许可能与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} 

第一种方法(块ChangeColumnType)非常简单:它设置到p{4cm}列型柱2。这给出了一个4厘米宽的列自动文字换行(更多细节见wikibooks.org)。缺点是,这会影响整个列,而不仅仅是第一行的单元格。

第二种方法(块ChangeOnlyCell)使用默认对齐方式(或任何您想要通过align指定),并使用\multcolumn仅更改有问题的单元格的列类型。 默认情况下,xtable“清理”您的表格,这意味着所有特殊的乳胶字符都将被转义。这很方便,因为你不能(很容易)破坏你的TEX代码,但是在这里我们手动的想注入LaTeX代码,所以我们必须关闭它。因此,请设置sanitize.colnames.function = identiy。所有列名将在您指定时使用 - 所以在LaTeX中使用具有特殊含义的字符时要小心。

从上面的例子提供了以下表格: Result