![使用 knitr、beamer 和 /foreach 从 R 字符串变量生成 pdf 中唯一的章节标题](https://linux22.com/image/290805/%E4%BD%BF%E7%94%A8%20knitr%E3%80%81beamer%20%E5%92%8C%20%2Fforeach%20%E4%BB%8E%20R%20%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8F%98%E9%87%8F%E7%94%9F%E6%88%90%20pdf%20%E4%B8%AD%E5%94%AF%E4%B8%80%E7%9A%84%E7%AB%A0%E8%8A%82%E6%A0%87%E9%A2%98.png)
使用 R、knitr 和 beamer,我创建了一个 pdf,其中包含我们地区每所学校的图表。我使用 /foreach 循环中的 \includegraphics 命令读取每个图表。我想使用 R 变量“学校”为每所学校创建一个唯一的部分名称。我希望此部分名称出现在左侧目录中。相关代码如下。谢谢。
\foreach \i in {1,...,\Sexpr{length(school)}} {%
\section{\Sexpr{school[i]}} %%% Here is where it is breaking down
\begin{frame}
\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{plot_\i.pdf}
\end{frame}%
}
答案1
您使用变量\i
,它是 TeX 变量。问题是,R 对此一无所知。由于 R 在 TeX 之前运行,因此您的循环永远不会到达 R。
相反,您可以在 R 中创建循环。R 代码应该生成 TeX 代码。您需要在模式中输出结果asis
,并抑制代码本身。
这对我有用:
<<echo=FALSE,results='asis'>>=
for (i in 1:length(school)) {
cat(paste("\\section{",school[i],"}\n",sep=""))
cat("\\begin{frame}\n")
cat(paste("\\includegraphics[width=\\textwidth,",
"height=\\textheight,keepaspectratio]{plot_",
i, ".pdf}\n", sep=""))
cat("\\end{frame}\n")
}
@
每个都cat
形成一个 TeX 行,包含在 TeX 文件中;块选项使代码对 TeX 不可见,并且结果按“原样”发送