【发布时间】:2014-05-09 20:45:55
【问题描述】:
我想使用 knitr 包和块选项 fig.show='animate' 在 beamer 中创建动画,其中数字被覆盖而不是替换,类似于默认情况下 \multiinclude 的工作方式。
一个最小的非工作示例如下(Rnw 文件),我希望将每个点一个接一个地添加到动画中的现有绘图中。
\documentclass{beamer}
\usepackage{animate}
\begin{document}
\begin{frame}[fragile]
<<fig.show='animate', fig.width=5, fig.height=5, size='tiny', out.width='.8\\linewidth', fig.align='center', echo=FALSE>>=
x = 1:2
plot(x,x,type="n")
for (i in 1:length(x)) {
points(x[i],x[i])
}
@
\end{frame}
\end{document}
通过查看knitr graphics manual,它指出两个图源是plot.new() 和grid.newpage(),但有一个脚注可以看到?recordPlot。所以我尝试将recordPlot() 放在points 命令之后(还通过par(bg=NA) 添加透明背景,但这不起作用,因为只创建了一个图。
一个最小的工作示例如下
\documentclass{beamer}
\usepackage{animate}
\begin{document}
\begin{frame}[fragile]
<<fig.show='animate', fig.width=5, fig.height=5, size='tiny', out.width='.8\\linewidth', fig.align='center', echo=FALSE, fig.keep='all'>>=
x = 1:2
plot(x,x,type="n")
for (i in 1:length(x)) {
for (j in 1:i) points(x[j],x[j])
}
@
\end{frame}
\end{document}
但这似乎有点矫枉过正,因为每个图形都重新绘制了情节和所有前面的点。
有什么方法可以摆脱j 上的循环吗?或以其他方式覆盖投影仪/编织器中的绘图?如果是,如何修改我上面的代码以实现这一点?
【问题讨论】:
-
这是一个很好的建议,我没有尝试过。包括
fig.keep='all'允许我简化最小的工作示例(我已经更新),但在非工作示例中,它只提供两个图:一个没有点,一个有所有点,而不是添加一系列图由于 R 将循环视为单个表达式,因此每个点依次进行。 -
我不需要使用 R 代码中的库(动画)吗?
标签: r animation latex knitr beamer