2016-04-25 60 views
2

This question不解决这个问题,因为这是有关线宽内居中,我感兴趣的是全幅。)xtable和knitr:如何在整页宽度上居中对齐表格?

我产生一个表是这样的:

\documentclass{article} 

\begin{document} 

<<tabletest, message=F, warning=F, echo = F, results = "asis">>= 
library(readr) 
library(xtable) 
# Create dummy data.frame 
values <- 1:14 
df <- t(data.frame(values, values)) 
colnames(df) <- paste("column", values, sep="") 
rownames(df) <- c("row1", "row2") 
ltable <- xtable(
    x = df 
) 
print(ltable) 
@ 

\end{document} 

结果看起来像这样:

enter image description here

我想在页面上水平居中这一点。我的第一次尝试是在包装的\centerline{}块,但是这让我这个:

Runaway argument? 
{ \begin {table}[ht] \centering \begin {tabular}{rrrrrrrrrrrrrrr} \hline \ETC. 
! Paragraph ended before \centerline was complete. 
<to be read again> 
        \par 

中产生的.tex文件中有趣的部分是这样的:

\centerline{ 
% latex table generated in R 3.2.5 by xtable 1.8-2 package 
% Mon Apr 25 16:40:48 2016 
\begin{table}[ht] 
\centering 
\begin{tabular}{rrrrrrrrrrrrrrr} 
    \hline 
& column1 & column2 & column3 & column4 & column5 & column6 & column7 & column8 & column9 & column10 & column11 & column12 & column13 & column14 \\ 
    \hline 
row1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 \\ 
    row2 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 \\ 
    \hline 
\end{tabular} 
\end{table} 

} 

如果我手动编辑那对此:

% latex table generated in R 3.2.5 by xtable 1.8-2 package 
% Mon Apr 25 16:40:48 2016 
\begin{table}[ht] 
\centerline{ 
\begin{tabular}{rrrrrrrrrrrrrrr} 
    \hline 
& column1 & column2 & column3 & column4 & column5 & column6 & column7 & column8 & column9 & column10 & column11 & column12 & column13 & column14 \\ 
    \hline 
row1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 \\ 
    row2 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 \\ 
    \hline 
\end{tabular} 
} 
\end{table} 

然后它工作。但我怎么能自动完成这一点?阅读thisthis后,我想:

x <- capture.output(print(xtable(ltable))) 
x <- gsub("\\\\centering", "", x, fixed=TRUE) # Remove \centering 
x <- gsub("\\begin{table}[ht]", "\\begin{table}[ht]\\centerline{", x, fixed=TRUE) # Add \centerline{ 
x <- gsub("\\end{table}", "\\end{table}}", x, fixed=TRUE) # Add ending } 

x格式是不是我打电话print(ltable)当早点起床:

> print(x) 
[1] "% latex table generated in R 3.2.5 by xtable 1.8-2 package"                                                                    
[2] "% Mon Apr 25 16:51:02 2016" 

也就是说,这将输出与前面的数字括号的每一行,它不会产生一个表。谁能帮我这个?

+0

你想表浮动? –

+0

我希望桌子位于整个页面宽度的中间(水平方向)。 – L42

+0

当然。但它仍然可以浮动(根据LaTeX的规则,它会出现在适合的位置),或者作为文本的一部分出现在与源代码中位置相对应的位置。 –

回答

3

案例1:非浮动表

如果表是不应该浮动,很容易在makebox包围tabular的建议here

\documentclass{article} 
\begin{document} 

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

cat("\\makebox[\\textwidth]{") 
print(xtable(t(cars)[, 1:16]), floating = FALSE) 
cat("}") 

@ 
\end{document} 

Output case 1

案例2:浮动表

在这种情况下,best solution I found使用changepage软件包中的adjustwidth环境。

首先,定义一个新环境,将其内容封装在一个adjustwidth环境中以删除左边距。

\newenvironment{widestuff}{\begin{adjustwidth}{-4.5cm}{-4.5cm}\centering}{\end{adjustwidth}} 

其次,通过这种新的环境latex.environmentsprint.xtable。 (如果是参数传递给环境latex.environments的方式,自定义的环境就没有必要在所有。)

\documentclass{article} 
\usepackage{changepage} 
\newenvironment{widestuff}{\begin{adjustwidth}{-4.5cm}{-4.5cm}\centering}{\end{adjustwidth}} 
\begin{document} 
<<echo = F, results = "asis">>= 
library(xtable) 
print(xtable(t(cars)[, 1:16]), latex.environments = "widestuff") 

print(xtable(t(cars)[, 1:12]), latex.environments = "widestuff") 
@ 
\end{document} 

Output case 2

(截图包含一些文本是不存在的代码示例。它只是在那里可视化的页面尺寸。)

+0

谢谢你的回答。这两种方法实际上都无法将表格集中在整个页面宽度上。情况1使用'\ textwidth'居中表,这不是我想要的。你有什么建议,我可以调整这个工作的纸张宽度,而不是?第二种情况需要使用调整宽度值来获取表格居中,但是相同的值不会将文档中的下一个表格居中,该表格具有不同的宽度。 – L42

+0

@ L42您是否测试过案例1?我认为它是有效的,除了在左边非常小的余量。对不起,第二种情况,这是错误的,但我认为我解决了它。您不必为每个表调整'adjustvalue'设置,而只调整一次以匹配文档的左右页边距。我添加了一些截图。 –

+1

是的,我测试过。案例1:[code here](http://pastebin.com/Ld1grkCw)和[这里截图](http://s31.postimg.org/fzcqkuiwr/case1.png)。对于新的情况2:[code here](http://pastebin.com/mbN3uS1v)和[这里截图](http://s31.postimg.org/rbect6tkr/case2.png)。请参阅情况2中的第二个表格:这太靠右了。 – L42

相关问题