我正在使用knitr迭代生成LaTeX表。一切都很好,除了我在每张桌子前留下额外的标记。这是一个简单的例子,尽管这可以作为更复杂问题的模板,即不同大小的表,不同的数据集等。
我可以做些什么来摆脱每张桌子前的额外文字?
\documentclass{article}
\usepackage{setspace, relsize}
\usepackage[margin=.5in, landscape]{geometry}
\usepackage{pdfpages}
\begin{document}
<<setup, include=FALSE>>=
opts_chunk$set(echo=FALSE, warning = FALSE, message = FALSE, cache = FALSE, error = FALSE)
library("ggplot2")
library("knitr")
library("Hmisc")
mytable_function = function(mydata){
foo = as.matrix(head(mydata))
colnames(foo) = names(mydata)
rownames(foo) = c("First", "Second", "Third", "Fourth", "Fifth", "Sixth")
return(foo)
}
template <- "<<thisthing-{{i}}>>=
mytable = mytable_function(iris[iris$Species == unique(iris$Species)[i],])
latex(mytable, file = '',
title = '',
where = '!h',
caption = 'This is a table',
col.just = rep('r', ncol(mytable)))
@"
for(i in 1:3){
cat(knit(text = knit_expand(text = template, i = i, quiet = TRUE)))
}
@
\end{document}
Fwiw这里是我刚才问过的一个类似的问题,但因为我在这里制作表而不是数字,我认为这是一个稍微不同的解决方案。 Print a list of dynamically-sized plots in knitr
答案 0 :(得分:1)
提供的代码与您提供的输出不匹配。实际上,它不会产生任何输出。
include=FALSE
关于文档中唯一的块是非常致命的......替换为echo=FALSE
。setup
)以及模板块需要results="asis"
。 message=FALSE
应该是setup
的一个块选项。将其设置为setup
中的默认选项不会影响来自当前块的消息。这一行
cat(knit(text = knit_expand(text = template, i = i, quiet = TRUE)))
应该
cat(knit(text = knit_expand(text = template, i = i), quiet = TRUE))
quiet
是knit
的参数,而不是knit_expand
。
虽然这有效,但这是一个过于复杂的矫枉过正。您链接到动态生成的块的答案,因为fig.height
没有按照该情况所需的方式进行矢量化。在这里,我们可以只使用一个块:
\documentclass{article}
\begin{document}
<<setup, echo = FALSE, results='asis', message = FALSE>>=
mytable_function = function(mydata){
foo = as.matrix(head(mydata))
colnames(foo) = names(mydata)
rownames(foo) = c("First", "Second", "Third", "Fourth", "Fifth", "Sixth")
return(foo)
}
for(i in 1:3){
mytable = mytable_function(iris[iris$Species == unique(iris$Species)[i],])
Hmisc::latex(mytable,
file = '',
title = '',
where = '!h',
caption = 'This is a table',
col.just = rep('r', ncol(mytable)))
}
@
\end{document}