第 1 页

第 1 页

我在这里写下了我最初的问题:(LaTeX 中两个并排的表格将分页)。然后,我意识到我需要修改我的问题,同时还要包含一个随之而来的附加问题。我不能将它们分开(就像我在原始查询中所做的那样),否则提供给我的解决方案将无法真正解决我的具体问题。

有关最详细的信息,请参阅上面列出的原始帖子。不过,我将在这里再次陈述基本和完整的问题(以及需要一起陈述的附加问题):

我在 Rstudio 中创建了一个 code.Rnw 文件。然后我使用以下方法进行编织:

knit("code.Rnw","code.tex")

我正在尝试将两个表格并排显示。如果表格很长,我希望它们自动分页。我有一个似乎有效的暂定语法(使用 \quad 命令时),如下所示:

\documentclass[12pt,english,nohyper]{tufte-handout}
\usepackage{longtable}

\begin{document}

<<echo=FALSE,results='asis'>>=
library(xtable)
@

\begin{tabular}{cc}
  \hline
 & vals \\ 
  \hline
a & 3.39 \\ 
  b & 4.35 \\ 
  c & 6.16 \\ 
  d & 9.17 \\ 
  e & 2.82 \\ 
   \hline
\end{tabular}
\quad % separates first and second table
\begin{tabular}{cc}
  \hline
 & vals \\ 
  \hline
a & 3.39 \\ 
  b & 4.35 \\ 
  c & 6.16 \\ 
  d & 9.17 \\ 
  e & 2.82 \\  
   \hline
\end{tabular}

\end{document}

这将创建如下所需的输出:

期望输出

但是,当表格变长时,我遇到了一个问题。在上面的例子中,每个表格只有 5 行。但是,如果我增加行数,以至于每个表格都无法再放在一页上,那么它就不会自动分页,而是会超出页面。它看起来像这样(有更多行,y2、z2 等,但这些行只是超出页面):

输出超出页面范围

我尝试使用“longtable”选项(而不是“tabular”选项)来解决此问题,因为这有助于分页:

\documentclass[12pt,english,nohyper]{tufte-handout}
\usepackage{longtable}

\begin{document}

<<echo=FALSE,results='asis'>>=
library(xtable)
@

\begin{longtable}{cc} % CHANGED FROM "TABULAR" TO "LONGTABLE"
  \hline
 & vals \\ 
  \hline
a & 3.39 \\ 
  b & 4.35 \\ 
  c & 6.16 \\ 
  d & 9.17 \\ 
  e & 2.82 \\ 
   \hline
\end{longtable} % CHANGED FROM "TABULAR" TO "LONGTABLE"
\quad % separates first and second table
\begin{longtable}{cc} % CHANGED FROM "TABULAR" TO "LONGTABLE"
  \hline
 & vals \\ 
  \hline
a & 3.39 \\ 
  b & 4.35 \\ 
  c & 6.16 \\ 
  d & 9.17 \\ 
  e & 2.82 \\  
   \hline
\end{longtable} % CHANGED FROM "TABULAR" TO "LONGTABLE"

\end{document}

虽然它确实解决了长表中的分页符问题(防止文本从页面上掉下来),但它也使得表格不再并排(而是从上到下放置)。这是不受欢迎的输出:

现在表格是不受欢迎的从上到下的

另一个问题(我在原帖中没有提到)是我无法硬编码此表(就像我在本文开头发布的临时解决方案中所做的那样),因为这两个表需要从给定的数据框中自动生成。我的一般想法是将数据框切成两半,然后将每个表输入到由 \quad 之类的东西分隔的某个表函数中。它看起来像这样(这里我没有将数据框切成两半,而只是重复了两次相同的数据框):

\documentclass[12pt,english,nohyper]{tufte-handout}
\usepackage{longtable}

\begin{document}

<<echo=FALSE,results='asis'>>=
library(xtable)
set.seed(1)
myDF = data.frame(vals=runif(5, 1, 10))
row.names(myDF) = letters[1:5]
@

\print(xtable(myDF),floating=FALSE,tabular.environment = "tabular")
\quad
\print(xtable(myDF),floating=FALSE,tabular.environment = "tabular")

\end{document}

理想情况下,当我编织此 code.Rnw 文件时,我将成功获得一个 code.tex 文件,该文件可以转换为包含两个并排且可分页的 code.pdf 文件。但是,我上面的当前语法不起作用。

尽管 (print(xtable(myDF),floating=FALSE,tabular.environment = "tabular")) 将输出正确的表格结构,但我无法在 \print(xtable) 语法之间插入 \quad 并使其正确编织。任何建议都非常感谢!

编辑:

非常感谢您的帮助!我考虑了@DavidCarlisle 提供的资源(在 LaTeX 中平衡多列内的长表)。然后@touhami 让我澄清我仍然无法解决的问题。我无法解决的是如何将数据框放入这种新语法中,以便可以编织 .Rnw 文件。这是我尝试的一个例子(通过从@DavidCarlisle 提供的资源中定制语法):

\documentclass[11pt, a4paper]{article}
\usepackage[margin=3cm]{geometry}
\usepackage{longtable}
\usepackage{multicol}

\newsavebox\ltmcbox

\def\tabline{Student & Correct Percent\\}
\def\tablines{\tabline\tabline\tabline}

\begin{document}

<<echo=FALSE,results='asis'>>=
library(xtable)
set.seed(1)
myDF = data.frame(vals=runif(10, 1, 10))
row.names(myDF) = letters[1:10]
@

\begin{multicols}{2}

\setbox\ltmcbox\vbox{
\makeatletter\col@number\@ne
\begin{longtable}{|l|l|}
myDF
\end{longtable}
\unskip
\unpenalty
\unpenalty}
\unvbox\ltmcbox
\end{multicols}
\end{document}

当我编织这个新的 .Rnw 代码时,这是我的输出:

新定制脚本的输出不理想

我还尝试了其他不成功的方法,如下所示:

\documentclass[11pt, a4paper]{article}
\usepackage[margin=3cm]{geometry}
\usepackage{longtable}
\usepackage{multicol}

\newsavebox\ltmcbox

\def\tabline{Student & Correct Percent\\}
\def\tablines{\tabline\tabline\tabline}

\begin{document}

<<echo=FALSE,results='asis'>>=
library(xtable)
set.seed(1)
myDF = data.frame(vals=runif(10, 1, 10))
row.names(myDF) = letters[1:10]

cat(sprintf('\\begin{multicols}{2}
\\setbox\ltmcbox\vbox{
\\makeatletter\col@number\@ne
\\begin{longtable}{|l|l|}'))
myDF
cat(sprintf('\\end{longtable}
\\unskip
\\unpenalty
\\unpenalty}
\\unvbox\ltmcbox
\\end{multicols}'))
@

\end{document}

这给了我错误:

Error: '\l' is an unrecognized escape in character string starting "'\\begin{multicols}{2}

如果您对如何使用@DavidCarlisle 提供的有用资源来解决我的具体问题有任何建议,请告诉我。谢谢!

答案1

以下是链接的快速演示R和 LaTeX 使用“knitr”包。这已在 、 和 IDE 上运行Windows 8.1MikTeX 2.9以下TeXmaker 4.4.1代码保存为knit02.Rnw(区分大小写)。在 R 3.1.3 中安装“knitr”包后,运行以下命令:knit("knit02.Rnw")。这将生成文件“knit02.tex”,您现在可以使用它进行编译pdflatex并将其视为pdf

该示例分为三部分。第一部分是一个简单的 longtable;第二部分是一个简单的 tablular;第三部分是多个 data.frame 合并成一个 longtable。输出仍然不是最佳的,尤其是在标题部分。不过此时,您必须迁移到https://stackoverflow.com/questions/tagged/r并询问如何使用 xtable 传递 longtable 的定制的具体问题。

\documentclass[10pt,letterpaper]{article}
\usepackage{longtable}
\usepackage[tmargin=2in,bmargin=2in]{geometry} % Done to force early page changes for demonstration. 
\begin{document}
\textbf{Note: In all three of these examples the \LaTeX{} environment is determined in the R code block. }


Demonstration of a very large R table exported to \LaTeX{] using the package \textit{longtable}.
<<echo=FALSE>>=
library(xtable)
set.seed(1)
@

<<echo=FALSE,results='asis'>>=
## Demonstration of longtable support.
## Remember to insert \usepackage{longtable} on your LaTeX preamble
x <- matrix(rnorm(500), ncol = 10)
x.big <- xtable(x, label ='tabbig',caption ='Example of longtable spanning several pages')
print(x.big, tabular.environment ='longtable', floating = FALSE)
@
\clearpage
Now here is a regular (as in fit on one page) table using \textit{tabular}.

<<echo=FALSE,results='asis'>>=
x <- x[1:20, ]
x.small <- xtable(x, label ='tabsmall', caption ='regular table env')
print(x.small)  # default, no longtable
@
\clearpage
Demonstration of a  large R table composed of multiple data.frames exported to \LaTeX{] using the package \textit{longtable}.


<<echo=FALSE,results='asis'>>=
## Demonstration of longtable support with combining two data.frames.
## Remember to insert \usepackage{longtable} on your LaTeX preamble
x <- rnorm(100)
y <- rnorm(100)
id<- rep(letters[1:25],4)
spacecolumn<- rep(" ",100)
dtableone<-data.frame(id,x,y)
dtabletwo<-data.frame(id,y,x)
fulltable<-data.frame(dtableone,spacecolumn,dtabletwo)
names(fulltable)<-c("id","x","y"," ","id","y","x")

x.big <- xtable(fulltable, label ='tabtwo',caption ='Example of longtable spanning several pages build from 2 data.frames')
print(x.big, tabular.environment ='longtable', floating = FALSE)
@

\end{document}

第 1 页

在此处输入图片描述

第2页

在此处输入图片描述

第 3 页

在此处输入图片描述

第 4 页

在此处输入图片描述

第 5 页

在此处输入图片描述

第 6 页

在此处输入图片描述

相关内容