动态Sweave文档

3

通过Sweave生成LaTeX文档时,能否不预定义元素的数量? 我的意思是,假设我需要为数据框中的每一行构建一个表格。文档中表格的数量将取决于数据框中行的数量。

换句话说,在for循环内部生成LaTeX元素。对于每一行,Sweave会生成一个表格。

对于页面或其他元素也可以这样做吗? 这种做法是否可行?


1
这篇博客中,有一个使用brew的不错教程。 - baptiste
是的,我相信在我的情况下,最好的方法是使用brew生成tex文件。这样我就可以使用for循环、if语句和其他控制结构来动态生成tex文件。 - João Daniel
2个回答

2
这能帮到您吗:

这有帮助吗:

\documentclass[a4paper,12pt]{article}
\usepackage{Sweave}

\begin{document}

<<echo=FALSE>>=
library( xtable )
df <- structure(list(ID = 2:6, home_pc = structure(c(2L, 6L, 1L, 3L,
5L), .Label = c("BY5 8IB", "CB4 2DT", "DH4 6PB", "KN4 5GH", "MP9 7GH",
"NE5 7TH", "VB2 4RF"), class = "factor"), start_pc = structure(c(4L,
3L, 4L, 2L, 1L), .Label = c("BV6 5PB", "CB3 5TH", "FC5 7YH",
"Home", "NA"), class = "factor"), end_pc = structure(c(1L, 3L,
3L, 3L, 2L), .Label = c("CB5 4FG", "GH6 8HG", "Home", "NA"), class = "factor")), .Names = c("ID",
"home_pc", "start_pc", "end_pc"), row.names = 2:6, class = "data.frame")
count = 1
end = 3
@

<<fun,echo=FALSE,eval=FALSE>>=
print( xtable( df ) )
@


<<echo=FALSE,results=tex>>=
for( i in 1:end )
{
    print( xtable( df ) )
    i <- i + 1
}
cat( "\\newpage" )
@

<<echo=FALSE,results=tex>>=
if( count < end )
<<fun>>
count = count + 1
cat( "\\newpage" )
@

<<echo=FALSE,results=tex>>=
if( count < end )
<<fun>>
count = count + 1
cat( "\\newpage" )
@

<<echo=FALSE,results=tex>>=
if( count < end )
<<fun>>
count = count + 1
cat( "\\newpage" )
@

\end{document}

如果这是正确的方向,我很乐意提供更多细节!


编辑版本,使用像@Ramnath一样的mtcars(比我手工制作的要好得多)在此处链接。我试图展示这种灵活性,尽管方法可能会更长。 - vaettchen

0

这里有一种更简短的方法来完成同样的事情。我正在使用R中的mtcars数据集,并将说明如何按汽缸数创建表格。您可以使用Sweaveknitr(这是新生代)处理此文档。让我知道它的效果如何。

\documentclass{article}
%\SweaveOpts{echo = F}

\begin{document}
<<load-libraries>>=
suppressMessages(require(plyr))
suppressMessages(require(xtable))
@

<<gen-tables, results = tex>>=
d_ply(mtcars, .(cyl), xtable, .print = TRUE)
@

\end{document}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接