2015-10-19 30 views
0

我想保留列的寬度我設置使用的xtablealign地爭吵,我想所有的數字列右對齊,人到左側,頭中央。如何在xtable的align參數中設置列寬和文本對齊?

我發現了一些使用直接寫入rnw文件的表格的解決方案,但我想從文件加載我的數據,因爲我的表格非常大,可以在創建knitr文檔時更改。

的代碼(我用這個例子,而不是我自己的數據iris數據集):

<<table_symbionts_chunk, results="asis", echo=FALSE>>= 
    library(xtable) 

     irisX <-print (xtable (iris, 
            digits=rep(0,6), 
            align= c("p{0.015\\textwidth}|", 
               "p{0.37\\textwidth}|", 
               "p{0.12\\textwidth}|", 
               "p{0.08\\textwidth}|", 
               "p{0.02\\textwidth}|", 
               "p{0.35\\textwidth}|"))) 
     @ 
+0

請看看[此答案](http://tex.stackexchange.com/a/5018/37118) 。它回答你的問題嗎? –

+0

謝謝。我在這裏問過之前我已經看過這個。我想我可以使用,如果我想直接寫入.Rnw文件表。我不知道如何使用代碼塊從文件導入的數據。 – kamila

回答

4

這個問題的最棘手的部分是指膠乳。請不是我的TeX的代碼是基於tex.stackexchange這兩個問題:

問題的

一部分是容易回答:如何設置固定列的寬度,但對齊所有數字列的權利和所有其他列左?

這是唯一正確的列類型的問題(見上面鏈接的答案)。一個解決辦法是:R

\documentclass{article} 

\usepackage{array} 
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}p{#1}} 

\begin{document} 
<<table_symbionts_chunk, results="asis", echo=FALSE>>= 
library(xtable) 

irisShort <- head(iris) 
print(xtable(irisShort, 
      digits=rep(0,6), 
      align=c(
       "p{0.015\\textwidth}|", 
       "R{0.37\\textwidth}|", 
       "R{0.12\\textwidth}|", 
       "R{0.08\\textwidth}|", 
       "R{0.02\\textwidth}|", 
       "p{0.35\\textwidth}|"))) 
@ 
\end{document} 

由於p{}列留在默認情況下我們只需要定義右對齊列一個新列式與固定寬度合理的。

注意,列名重疊,但是這是由於在問題中指定的寬度。


居中列名僅需要第一行的不同理由。這可以通過使用\multicolumn命令來實現。然而,當我們想LaTeX的代碼添加到的列名,我們另外有使用sanitize.colnames.function = identity防止xtable從消毒列名:

irisShort2 <- irisShort 
colnames(irisShort2) <- paste("\\multicolumn{1}{c|}{", colnames(irisShort2), "}") 

print(xtable(irisShort2, 
      digits=rep(0,6), 
      align=c(
       "p{0.015\\textwidth}|", 
       "R{0.37\\textwidth}|", 
       "R{0.12\\textwidth}|", 
       "R{0.08\\textwidth}|", 
       "R{0.02\\textwidth}|", 
       "p{0.35\\textwidth}|")), 
     sanitize.colnames.function = identity) 

paste("\\multicolumn{1}{c|}{", colnames(irisShort2), "}")使用原始列名,但圍繞它們\multicolumn{1}{c|}{colname的}它提供居中的列名稱。

注意,現在列名不重疊了(相反,該表是太寬),因爲第一行中的改變列類型。


在該應答中的兩個代碼段產生以下輸出: enter image description here

相關問題