![参考带名称的覆盖编号](https://linux22.com/image/242460/%E5%8F%82%E8%80%83%E5%B8%A6%E5%90%8D%E7%A7%B0%E7%9A%84%E8%A6%86%E7%9B%96%E7%BC%96%E5%8F%B7.png)
我有两列幻灯片,左侧是 tikz 图形,右侧是条目。由于条目中的停顿,因此有 >10 个叠加,并且 tikz 图片的某些部分被相应地添加/删除/修改(使用\only<>
),未覆盖的项目也是如此。
通过添加一个,很容易破解代码\pause
,因为必须重写所有数字。
有没有办法(Beamer 手册第 9 章中没有提示)beamerpause
在第一次发现该部分时将计数器的值分配给符号名称,类似于以下(需要多次传递才能解决)?
\begin{column}{..}
\only</bar->{...} % <2-> (use e.g. / to reference labels)
\only<-/baz>{...} % <-3>
\end{column}
\begin{column{..}
\begin{itemize}
\item foo \pause
\item bar \firstUncoveredLabel{bar}\pause % assign 2 to label /bar
\item baz \pause[baz] % nicer syntax; assign 3 to label /baz
\item end
\end{itemize}
\end{column}
编辑:最小工作示例:
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}
\begin{columns}
\begin{column}{.5\textwidth}
\tikz{
\draw< -3> (0,0) grid (3,3);
\draw<2-3>[red] (0,0) -- (3,1);
\draw<3- >[green] (0,0) -- (3,2);
\draw<4 >[blue] (0,0) -- (3,3);
}
\end{column}
\begin{column}{.5\textwidth}
\begin{itemize}
%%%% uncomment this item and all numbers above have to be shifted :-(
% \item important remark at the beginning \pause
\item grid \pause
\item grid, red \pause
\item grid, red, green \pause
\item green, blue
\end{itemize}
\end{column}
\end{columns}
\end{frame}
\end{document}
这就是我的梦想(无法编译):
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}
\begin{columns}
\begin{column}{.5\textwidth}
\tikz{
%% use symbolic names for overlay specificaiton
\draw<-/gridRedGreen> (0,0) grid (3,3);
\draw</gridRed-/gridRedGreen>[red] (0,0) -- (3,1);
\draw</gridRedGreen-> [green] (0,0) -- (3,2);
\draw</last> [blue] (0,0) -- (3,3);
}
\end{column}
\begin{column}{.5\textwidth}
\begin{itemize}
%%%% uncomment and overlays are still correct :-)
% \item important remark at the beginning \pause
\item grid \pause[grid]
\item grid, red \pause[gridRed]
\item grid, red, green \pause[gridRedGreen]
\item green, blue
\end{itemize}
\end{column}
\end{columns}
\end{frame}
\end{document}
答案1
以下是按名称引用覆盖的可能方法:
\makeatletter
\DeclareRobustCommand*{\savepause}[1]{\only<1>{\immediate\write\@auxout{\string\pauseentry{\the\c@framenumber}{#1}{\the\c@beamerpauses}}}}
\newcommand*{\usepause}[1]{\@ifundefined{pauses@\the\c@framenumber @#1}{1}{\@nameuse{pauses@\the\c@framenumber @#1}}}
\newcommand*{\pauseentry}[3]{\global\@namedef{pauses@#1@#2}{#3}}
\makeatother
将此代码包含在文档的前言中,即\documentclass{beamer}
和之间\begin{document}
。它定义了两个用户级命令,\savepause
和\usepause
:
\savepause{overlayname}
将计数器的当前值保存beamerpauses
为overlayname
。在命令之前立即发出它\pause
。\usepause{overlayname}
指的是先前保存的值,因此如果您在第三个覆盖上overlayname
使用,将扩展为 3。\savepause{overlayname}
\usepause{overlayname}
由于值将保存到辅助文件中,因此需要至少两次 LaTeX 运行才能产生稳定的输出。
您无法\pause[overlayname]
按照建议使用语法来保存值,因为可选参数beamer
本身已被使用。但是,您可以定义自己的命令以方便使用:
\newcommand*{\mypause}[1]{\savepause{#1}\pause}
其用法类似\mypause{overlayname}
。
示例代码:
\documentclass{beamer}
\makeatletter
\DeclareRobustCommand*{\savepause}[1]{\only<1>{\immediate\write\@auxout{\string\pauseentry{\the\c@framenumber}{#1}{\the\c@beamerpauses}}}}
\newcommand*{\pauseentry}[3]{\global\@namedef{pauses@#1@#2}{#3}}
\newcommand*{\usepause}[1]{\@ifundefined{pauses@\the\c@framenumber @#1}{1}{\@nameuse{pauses@\the\c@framenumber @#1}}}
\makeatother
\usepackage{tikz}
\begin{document}
\begin{frame}
\begin{columns}
\begin{column}{.5\textwidth}
\tikz{
%% use symbolic names for overlay specificaiton
\draw<-\usepause{gridRedGreen}> (0,0) grid (3,3);
\draw<\usepause{gridRed}-\usepause{gridRedGreen}>[red] (0,0) -- (3,1);
\draw<\usepause{gridRedGreen}-> [green] (0,0) -- (3,2);
\draw<\usepause{last}> [blue] (0,0) -- (3,3);
}
\end{column}
\begin{column}{.5\textwidth}
\begin{itemize}
%%%% uncommented and overlays are still correct :-)
\item important remark at the beginning \pause
\item grid \savepause{grid}\pause
\item grid, red \savepause{gridRed}\pause
\item grid, red, green \savepause{gridRedGreen}\pause
\item green, blue
\end{itemize}
\end{column}
\end{columns}
\savepause{last}
\end{frame}
\end{document}