这应该是一个常见问题,但我在这里或其他地方找不到答案。我经常想写类似的东西
\draw[fill=\alt<2>{red}{white}] ...
但我从来没有找到将扩展值转化为命令选项值的方法。
有办法解决这个问题,比如将整个命令嵌入到里面\alt
,但我宁愿写一些简单而明显的东西。
我是否错过了这样一件事?
答案1
正如前面提到的,该overlay-beamer-styles
库有许多很棒的工具,允许人们使用 中的叠加层tikz
。有了这个库,你可以使用类似
\draw[background fill=red,fill on=<2>] ...
但是,为了从字面上回答你的问题,我们也可以定义一个新的密钥处理程序,,/.alt
上面的内容变为
\draw[fill/.alt=<2>{red}{none}] ...
这个新的(?)键处理程序在以下示例中定义并使用。
\documentclass{beamer}
\usepackage{tikz}
\pgfkeys{/handlers/.alt/.code args={<#1>#2#3}{%
\alt<#1>{%
\pgfkeys{\pgfkeyscurrentpath=#2}%
}{%
\pgfkeys{\pgfkeyscurrentpath=#3}%
}}}
\begin{document}
\begin{frame}
\frametitle{The \texttt{/.alt} key handler}
\centering
\begin{tikzpicture}
\draw[fill/.alt=<2>{red}{none}] circle[radius=1];
\end{tikzpicture}
\end{frame}
\end{document}
此密钥处理程序在 未预料到的情况下可能更有用overlay-beamer-styles
。还可以为 创建一个类似的密钥处理程序\only
,这可能更适合于您只想在某些覆盖层上执行某些操作而对其余覆盖层不执行任何操作的情况。
答案2
我只想强调该overlay-beamer-styles
库启用的一个选项,因为它看起来像是 user255043 提到的选项之间的折衷。
其中有一个alt
选项,因此可以编写以下内容,并获得与 user255043 所示相同的结果。
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{overlay-beamer-styles}
\begin{document}
\begin{frame}
\frametitle{The \texttt{alt} }
\centering
\begin{tikzpicture}
\draw[alt=<2>{fill=red}] circle[radius=1];
\end{tikzpicture}
\end{frame}
\end{document}
尚未阅读的文档overlay-beamer-styles
,但alt=<1>{alternative}{default}
需要两个参数,就像来自类的参数一样beamer
,可以多次定义:
\draw[alt=<2>{fill=red}{fill=blue, draw=red}, alt=<5>{fill=green, very thick}] circle[radius=1];