注意:我已经完全重写了这个问题,希望能澄清一些事情。
执行摘要
在 Beamer 中创建 TikZ 图表时,可以向路径和节点添加覆盖规范,如\node<+-> {X};
。令人惊讶的是,这些覆盖规范的行为与纯 Beamer 覆盖规范不同!它的行为不像\uncover<+->{\node {X};}
(正如人们对纯 Beamer 的期望\item
),而是像\only<+->{\node {X};}
。
为什么会这样?是否可以将\node
其规范视为纯 Beamer?有关详细问题,请参阅本文结尾。
背景
“纯” Beamer 中的动作规范
在 Beamer 手册中,对环境的描述actionenv
如下:
没有
⟨overlay specification⟩
动作的 晋升为uncover@⟨overlay specification⟩
。
下面是一个使用列表的示例,显示了当所涵盖材料的呈现分别设置为(默认)和时,对itemize
的提升,并将其行为与的行为进行比较。+-
uncover@+-
invisible
transparent
only@+-
\documentclass{beamer}
\begin{document}
\begin{frame}{Action Specifications with \texttt{\textbackslash item}}
\begin{columns}
\column{0.35\textwidth}
Below uses spec \texttt{<+->}
\begin{itemize}
\item<+-> X
\item<+-> Y
\item<+-> Z
\end{itemize}
Above uses spec \texttt{<+->}
\vspace{\baselineskip}
\setbeamercovered{transparent}
Below uses spec \texttt{<+->}
with \texttt{transparent}
\begin{itemize}
\item<+-> X
\item<+-> Y
\item<+-> Z
\end{itemize}
Above uses spec \texttt{<+->}
with \texttt{transparent}
\column{0.45\textwidth}
Below uses spec \texttt{<only@+->}
\begin{itemize}
\item<only@+-> X
\item<only@+-> Y
\item<only@+-> Z
\end{itemize}
Above uses spec \texttt{<only@+->}
\end{columns}
\end{frame}
\end{document}
\node
TikZ的动作规范
然而,同样的行为不是通过给予 TikZ \path
s 和\node
s 的覆盖规范展示:
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}{Action Specifications with \texttt{\textbackslash node}}
\begin{columns}
\column{0.35\textwidth}
Below uses spec \texttt{<+->}\\
\begin{tikzpicture}
\node<+-> at (0, 0) {X};
\node<+-> at (0,-0.5) {Y};
\node<+-> at (0,-1) {Z};
\end{tikzpicture}\\
Above uses spec \texttt{<+->}
\vspace{\baselineskip}
\setbeamercovered{transparent}
Below uses spec \texttt{<+->}
with \texttt{transparent}\\
\begin{tikzpicture}
\node<+-> at (0, 0) {X};
\node<+-> at (0,-0.5) {Y};
\node<+-> at (0,-1) {Z};
\end{tikzpicture}\\
Above uses spec \texttt{<+->}
with \texttt{transparent}
\column{0.55\textwidth}
Below uses spec \texttt{<only@+->}\\
\begin{tikzpicture}
\node<only@+-> at (0, 0) {X};
\node<only@+-> at (0,-0.5) {Y};
\node<only@+-> at (0,-1) {Z};
\end{tikzpicture}\\
Above uses spec \texttt{<only@+->}
\vspace{\baselineskip}
Below uses spec \texttt{<uncover@+->}\\
\begin{tikzpicture}
\node<uncover@+-> at (0, 0) {X};
\node<uncover@+-> at (0,-0.5) {Y};
\node<uncover@+-> at (0,-1) {Z};
\end{tikzpicture}\\
Above uses spec \texttt{<uncover@+->}
\end{columns}
\end{frame}
\end{document}
与与 s一起使用时不同\item
,操作规范<+->
(无论是否设置transparent
)不会为\node
s 分配空间。换句话说,节点的使用方式与我预期的\only
方式不同\uncover
。此外,添加显式的only@
或uncover@
会导致这些\node
s 出现在所有幻灯片上,就好像它们根本没有被赋予任何操作规范一样!
问题
有没有办法恢复路径和节点的完整操作规范?是的,使用等是一种合理的解决方法,但还有其他方法可以直接
\uncover<+>{\node at (0,0) {X};}
提供操作规范吗?\node
如果不是,Beamer 源中 action-specification-aware 的代码在哪里
\node
?我想尝试修改代码以修复此不一致问题,但我无法找到相关的宏。
答案1
该符号<+>
表示代替最后一个例子,你想要的是<+->
这意味着添加一步步:
代码
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}{Ti\textit{k}Z}
\setbeamercovered{transparent}
\begin{tikzpicture}
\node<+-> at (0,0) {X};
\node<+-> at (1,0) {Y};
\node<+-> at (2,0) {Z};
\draw (current bounding box.south west)
rectangle (current bounding box.north east);
\end{tikzpicture}
\end{frame}
\end{document}