在 knitr 文件中输入 Tex 文件

在 knitr 文件中输入 Tex 文件

我在这里展示一个简单的例子只是为了阐述这个问题。

\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)  
@

输出为: 在此处输入图片描述

相关内容