投影仪框架字幕中的 for 循环

投影仪框架字幕中的 for 循环

我想使用 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}

相关内容