我在这里展示一个简单的例子只是为了阐述这个问题。
\documentclass{article}
\begin{document}
<<>>=
library('ggplot2')
dataset <- diamonds
@
\begin{table}[htbp]
\centering
\begin{tabular}{c|c|c|c}
\textbf{Name} & \textbf{Columns} \\\hline \hline
dataset & \Sexpr{length(colnames(dataset))} \\
\end{tabular}
\caption{Repeated table}
\end{table}
\end{document}
现在我在文件中多次重复此表(精确表)。(想象一下在调用此表之前用另一组数据集替换数据集)。
\documentclass{article}
\begin{document}
<<>>=
library('ggplot2')
dataset <- diamonds;
@
\input{table-file.tex}
\end{document}
我将整个表格部分放入此文件中,然后将其输入到多个位置。但我无法让它工作。我想知道这是否可行?有没有更好的方法可以使此表“模块化”。
谢谢
答案1
下面是根据 knitr 文档 yihui.name/knitr/demo/child 使用 knitr 子文件进程的示例。
首先是新的主文件,我将其命名为“knitr01.Rnw”
\documentclass{article}
\begin{document}
<<>>=
library('ggplot2')
dataset <- diamonds
@
<<child='child-knitr01.Rnw'>>=
@
<<>>=
dataset<-mtcars
@
<<child='child-knitr01.Rnw'>>=
@
\end{document}
请注意,我两次输入了孩子的数据集,每次都不同。
还有我将其命名为“child-knitr01.Rnw”的子文件。
\begin{table}[htbp]
\centering
\begin{tabular}{c|c|c|c}
\textbf{Name} & \textbf{Columns} \\\hline \hline
dataset & \Sexpr{length(colnames(dataset))} \\
\end{tabular}
\caption{Repeated table}
\end{table}
当首先通过“knit”然后通过“pdflatex”运行时,结果是
为了继续演示的完整性,这还允许子文件输入孙文件。
knitr01.Rnw 更改如下。
\documentclass{article}
\begin{document}
<<>>=
library('ggplot2')
dataset <- diamonds
title="These are diamonds"
@
<<child='child-knitr01.Rnw'>>=
@
<<>>=
dataset<-mtcars
title="These are cars"
@
<<child='child-knitr01.Rnw'>>=
@
\end{document}
这是修订后的“child-knitr01.Rnw”文件
\begin{table}[htbp]
\centering
\begin{tabular}{c|c|c|c}
\textbf{Name} & \textbf{Columns} \\\hline \hline
dataset & \Sexpr{length(colnames(dataset))} \\
\end{tabular}
\caption{\Sexpr{paste(substr(capture.output(print(title)),5,50))}}
% The 5 is to remove some leading R stuff (try with 1 to see why)
% The 50 is chosen to be longer than the string
\end{table}
<<child='grand-child-knitr01.Rnw'>>=
@
这是“grand-child-knitr01.Rnw”文件
Demonstration that you can call on 'grandchildren' files with knitr.
<<>>=
names(dataset)
@
输出为: