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}

Результат выглядит так:

Введите описание изображения здесь

Я хочу расположить это горизонтально на странице. Моя первая попытка была обернуть кусок в 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}

Тогда это работает. Но как я могу сделать это автоматически? Прочитав это и это , я попробовал:

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"

То есть, это выведет скобки с числами перед каждой строкой, и это не будет производить таблицу. Может ли кто-нибудь помочь мне с этим?

1 2

1 ответ:

Случай 1: неплавающая таблица

Если таблица не предполагается плавающей, то легко заключить tabular в makebox, как предложено здесь :

\documentclass{article}
\begin{document}

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

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

@
\end{document}

Случае выход 1

Случай 2: плавающая таблица

В этом случае лучшее решение, которое я нашел, использует среду adjustwidth из пакета changepage.

Сначала определите новую среду, которая заключает свое содержимое в среду adjustwidth, чтобы удалить левую прибыль.

\newenvironment{widestuff}{\begin{adjustwidth}{-4.5cm}{-4.5cm}\centering}{\end{adjustwidth}}
Во-вторых, передайте эту новую среду как latex.environments в print.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}

Случае выход 2

(скриншоты содержат некоторый текст, которого нет в примере кода. Он существует только для визуализации размеров страницы.)