使用 LateX 在 PDF 中动态生成动画图形

使用 LateX 在 PDF 中动态生成动画图形

我是论坛的新人,我希望这里的好心人能帮助我,因为我在网上找遍了所有地方,但还是没能找到解决我特定问题的方法。但是我对 Latex 还比较陌生,所以可能是我在搜索时没有问正确的问题。

首先,让我介绍一下我正在尝试做的事情。我正在尝试创建在创建文档时动态生成的动画图表。这些图表彼此不同,因此它不是简单地用新信息更新同一张图表(我找到了有关此信息)。我在 R 中运行 Latex/knitr 来生成整个文档以及将图表嵌入 PDF 文档。我让 R 进行所有数字运算,并使用 ggplot2 生成多个条形图(彼此都不同)。该文档已经有 150-200 页长,因此我想通过将所有相关图表放在一页上来节省空间,并使用动画包允许用户单击/循环浏览图表。

以下代码成功生成了图形并将其作为 PDF 保存在我的图形文件夹中,但是文档无法生成并显示错误消息:“动画包错误:第一帧的内容不能为零宽度”。我也收到了相同的高度消息。

\documentclass{article}
\usepackage{eso-pic}
\usepackage{helvet}
\usepackage{xcolor,colortbl}
\usepackage{booktabs}
\usepackage{wallpaper}
 %\usepackage[centering,includefoot,top=1in,right=1in,left=.75in,bottom=.5in,headsep = 5mm]{geometry}
\usepackage{fancyhdr}
\usepackage{array}
\usepackage{makecell}
\usepackage{animate}
\usepackage{graphicx}
\usepackage{media9}


\begin{document}
\begin{animateinline}[controls]{1}



 <<echo=TRUE,warning=FALSE,include=FALSE,fig.show="asis",fig.width=5,fig.height=5>>=


for(list_iter in 1: length(output_list)){

  figure_data <- output_list[[list_iter]]
  if(list_iter!=1){
    data_vector <- 7

    knit_child('bar_plot.Rnw')

    if(list_iter<length(output_list)){
    cat("\\ \\newframe")
      }
    }
}

@


\end{animateinline}


\end{document}

bar_plot.rnw 所做的正是您所期望的,根据给定的数据生成图表,然后返回图表。同样,这在生成单个 PDF 时有效。我似乎无法让它们填充到文档中。

非常感谢您提供的任何帮助/见解。如果我没有提供足够的信息,请告知。

答案1

好吧,经过 2.5 天的互联网搜索,显然只需要这里的一篇文章就能让我的大脑回到正轨。我终于成功地将动态创建的图表包含在文档中。问题是我未能正确地告诉代码将图表包含在 Latex 环境中。以下代码现在可以正常工作:

\documentclass{article}
\usepackage{eso-pic}
\usepackage{helvet}
\usepackage{xcolor,colortbl}
\usepackage{booktabs}
\usepackage{wallpaper}
%\usepackage[centering,includefoot,top=1in,right=1in,left=.75in,bottom=.5in,headsep = 5mm]{geometry}
\usepackage{fancyhdr}
\usepackage{array}
\usepackage{makecell}
\usepackage{animate}
\usepackage{graphicx}
\usepackage{media9}


\begin{document}

\begin{animateinline}[controls]{1}


<<echo=FALSE,warning=FALSE,include=FALSE>>=

out <- ""
for(list_iter in 1: length(output_list)){

  figure_data <- output_list[[list_iter]]
  if(list_iter!=1){
    data_vector <- 7
  out = c(out, knit_expand(file='bar_plot.Rnw'))
  }
}

@
\Sexpr{paste(out, collapse = '\n')}


\end{animateinline}


\end{document}

对于不熟悉 R 的人来说,这样做是在“out”变量中构建一个图形向量。我之前缺少的是“\Sexpr”命令,该命令让 Latex 知道 knitr 块中的“out”变量需要包含在文档中。我之前曾尝试过“print(out)”和“cat(out)”来实现这一点,但这些都没有用。你还会注意到,我原始帖子中的“\new frame”命令现在不见了。我将其移入 bar_plot.rnw 文件中,因此它仍在使用中(因为它需要),但只是应用于代码的不同部分。

相关内容