我想要一个自定义命令在两个连续的叠加层中显示一些略有不同的版本的内容。没有自定义命令的 MWE:
\documentclass{beamer}
\begin{document}
\begin{frame}<1-2>
\only<1>{xA}
\only<2>{yA}
\end{frame}
\end{document}
\newcommand<>
将以一个参数的形式提供完整的覆盖规范,因此没有机会修改和重用它。(或者有吗?)
由于我只需要非常简单的规范即可在单个页面上显示内容,因此我使用常规\newcommand*
并将覆盖作为一个参数传递。现在,当我尝试修改此参数时,覆盖就会被删除。没有错误,但也没有内容。
\documentclass{beamer}
\newcommand*{\delayDouble}[2]{
\only<#1>{x#2}
\only<\numexpr 1+#1\relax>{y#2}
}
\begin{document}
\begin{frame}<1-2>
\delayDouble{1}{A}
\end{frame}
\end{document}
生成空白的第二张幻灯片。有趣的是,\numexpr #1\relax
运行良好,但当然在同一张幻灯片上显示两个输出。
为什么我的方法失败了?我该如何解决它?
根据要求,以下是有关实际用例的更多信息。我想在演示文稿中嵌入不同的图片。在第一步(命令给出的叠加层)中,每张图片都应在幻灯片的中心显示为大图片。在后续叠加层中,小版本应出现在幻灯片上的“自然位置”。代码现在看起来像这样
\documentclass[demo]{beamer}
\usepackage{tikz}
\NewDocumentCommand \thumb { D <> {1} +m }
{%
\only<#1>{%
\tikz[remember picture, overlay] {%
\node at (current page) {\includegraphics[keepaspectratio, width=.8\textwidth, height=.7\textheight]{#2}};
}%
}%
\visible<+(#1)->{%
\fbox{\raisebox{-.5\height}{\includegraphics[keepaspectratio, width=2cm, height=1cm]{#2}}}%
}%
}
\begin{document}
\begin{frame}<1-3>
\thumb<1>{picture.pdf}
\end{frame}
\end{document}
简单的偏移对我来说效果很好。我也尝试使用 Beamer 的内置功能,但在常规\newcommand
和语法中\only<#1(1)>
失败了。
答案1
Ulrich Diez 已经回答了您的一般问题一条评论,但如果您想进行相对简单的转换(例如相对于指定的覆盖规范递增),那么您只需使用 Beamer 的内置语法即可。
此示例还用于\NewDocumentCommand
支持更类似 Beamer 的语法。
\documentclass{beamer}
\NewDocumentCommand \delayDouble { D <> {1} +m }
{%
\only<#1>{x#2}%
\only<+(#1)>{X#2}%
}
\begin{document}
\begin{frame}<1-2>
\delayDouble<1>{A}
\end{frame}
\end{document}
答案2
你不需要自己做任何计算。你可以使用 beamer 的\temporal
宏:
\temporal<overlay specification>{before slide text}{default text}{after slide text}
这使您可以指定指定覆盖之前、之上和之后的内容:
\documentclass{beamer}
\usepackage{tikz}
\newcommand<>{\thumb}[1]{%
\temporal#2{}{
\tikz[remember picture, overlay] {%
\node at (current page) {\includegraphics[keepaspectratio, width=.8\textwidth, height=.7\textheight]{#1}};
}%
}{
\fbox{\raisebox{-.5\height}{\includegraphics[keepaspectratio, width=2cm, height=1cm]{#1}}}%
}
}
\begin{document}
\begin{frame}<1-3>
\thumb<2>{example-image-duck}
\end{frame}
\end{document}