我使用 beamer 创建程序执行的复杂动画,其中每个步骤都会有多个部分发生变化。最终的动画有 30 到 40 个步骤。这是一个简化的 MWE:
\begin{document}
\begin{frame}
\only<1-3>{Some initial text}
\begin{columns}
\begin{column}{.3\linewidth}
\uncover<8>{
\begin{block}{Part 1}
\uncover<9>{A}
\uncover<11>{B}
\uncover<8>{C}
\uncover<10>{D}
\end{block}
}
\end{column}
\begin{column}{.3\linewidth}
\uncover<4-7>{
\begin{block}{Part 2}
\uncover<4>{E}
\uncover<7>{F}
\uncover<5>{G}
\uncover<6>{H}
\end{block}
}
\end{column}
\end{columns}
\end{frame}
\end{document}
在叠加规范中使用数字是一场噩梦,因为任何更改都需要重新编号所有内容。使用相对规范更糟糕,因为 LaTeX 文件中的顺序不是屏幕上显示的顺序。
我发现最好的方法是使用 lualatex:
\documentclass{beamer}
\usepackage{luacode}
\begin{luacode*}
first = 4;
part2_first = first;
part2_E = part2_first;
part2_G = part2_E + 1;
part2_H = part2_G + 1;
part2_F = part2_H + 1;
part2 = {part2_first, part2_F};
part1_first = part2[2] + 1;
part1_C = part1_first;
part1_A = part1_C + 1;
part1_D = part1_A + 1;
part1_B = part1_D + 1;
part1 = {part1_first, part1_B};
function num(a) tex.sprint(tostring(a)); end
function range(a) num(a[1]); tex.sprint("-"); num(a[2]); end
\end{luacode*}
\begin{document}
\begin{frame}
\only<1-3>{Some initial text}
\begin{columns}
\begin{column}{.3\linewidth}
\uncover<\directlua{range(part1)}>{
\begin{block}{Part 1}
\uncover<\directlua{num(part1_A)}>{A}
\uncover<\directlua{num(part1_B)}>{B}
\uncover<\directlua{num(part1_C)}>{C}
\uncover<\directlua{num(part1_D)}>{D}
\end{block}
}
\end{column}
\begin{column}{.3\linewidth}
\uncover<\directlua{range(part2)}>{
\begin{block}{Part 2}
\uncover<\directlua{num(part2_E)}>{E}
\uncover<\directlua{num(part2_F)}>{F}
\uncover<\directlua{num(part2_G)}>{G}
\uncover<\directlua{num(part2_H)}>{H}
\end{block}
}
\end{column}
\end{columns}
\end{frame}
\end{document}
我对这个解决方案比较满意,但我想知道是否有一个本机解决方案可以让我与其他引擎的用户共享我的文档。