我想使用 for 循环从每张幻灯片中的一组中加载特定的图像文件,从而在 beamer 中构建一帧的多个幻灯片。
目前,我可以在框架内循环并在幻灯片中前进:
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}
\frametitle{A title}
\framesubtitle{A subtitle}
\foreach \i in {1,2}{% loop
\only<\i>{\includegraphics[height=0.3\textheight]{pic\i.PNG}
This is pic \i.}
}% end of loop
\end{frame}
或者我可以迭代创建不同的框架,保留相同的标题但推进副标题:
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\foreach \i in {1,2}{% loop
\begin{frame}
\frametitle{A title}
\framesubtitle{A subtitle for pic \i}
\includegraphics[height=0.3\textheight]{pic\i.PNG}
\end{frame}
}% end of loop
\end{document}
最后输出了我想要的结果,但这只是一种解决方法:框架是分开的,但只是带有多余的标题。
当我尝试在仅包含字幕的框架内循环时(如下所示),它不起作用:
\begin{frame}
\foreach \i in {1,2}{% loop
\frametitle{A title}
\framesubtitle{A subtitle for pic \i{} that doesn't increment}
\includegraphics[height=0.3\textheight]{pic\i.PNG}
}% end of loop
\end{frame}
有什么想法可以实现这一点吗?这样做的好处是,可以在副标题而不是正文中添加简短的递增描述,而不会占用图像可用的 \textheight 空间。
编辑:还尝试定义一个数组并将其作为参数传递,但仍然不起作用:
\documentclass{beamer}
\usepackage{mwe} % added based on Andrew's comment
\usepackage{tikz}
\usepackage{arrayjobx}
%
\begin{document}
\newarray\myIncStr
\readarray{myIncStr}{1&2}
\begin{frame}
\foreach \i\iChar in {1/a,2/b}{% loop
\frametitle{A title}
\framesubtitle<\i>{Subtitle \myIncStr(\i)}
\only<\i>{%
\includegraphics[height=0.3\textheight]{example-image-\iChar}
\myIncStr(\i)%
}
}% end of loop
\end{frame}
\end{document}
我成功更新副标题的唯一方法是在其参数中使用计数器。请注意其评估如何导致幻灯片正文 +1。
\documentclass{beamer}
\usepackage{mwe}
\usepackage{tikz}
\newcounter{acounter}
\begin{document}
\setcounter{acounter}{0}
\begin{frame}
\foreach \i\iChar in {1/a,2/b}{% loop
\frametitle{A title}
\framesubtitle<\i>{Subtitle \theacounter{}} % evaluated after stepping up
\only<\i>{%
\includegraphics[height=0.3\textheight]{example-image-\iChar}
\theacounter{}
\stepcounter{acounter}
}
}% end of loop
\end{frame}
\end{document}
答案1
我不知道这是否足够好,但该\framesubtitle
命令接受<>
-argument 来指定幻灯片。不幸的是,似乎无法在循环内定义它,但您可以先设置帧字幕,然后在循环内加载图像:
\documentclass{beamer}
\usepackage{mwe}
\usepackage{pgffor}
\begin{document}
\begin{frame}{A title}
\framesubtitle<1>{A subtitle for pic 1 that doesn't increment}
\framesubtitle<2>{A subtitle for pic 2 that doesn't increment}
\foreach \img in {a,b}{% loop
\includegraphics<\sli>[height=0.3\textheight]{example-image-\img}
}% end of loop
\end{frame}
\end{document}
得出的结果为:
我正在使用来自姆韦包,这就是为什么我要循环a,b
而不是循环1,2
。由于我不明白的原因,以下内容无法编译:
\documentclass{beamer}
\usepackage{mwe}
\usepackage{pgffor}
\begin{document}
\begin{frame}{A title}
\foreach \ind/\img in {1/a,2/b}{% loop
\framesubtitle<\ind>{A subtitle for pic \ind{} that doesn't increment}
\includegraphics<\ind>[height=0.3\textheight]{example-image-\img}
}% end of loop
\end{frame}
\end{document}