我想在 Beamer 的 tikzpicture 环境中制作动画。动画由一系列通过组合\foreach
和制作的幻灯片组成,效果很好。然后我想继续我的动画,使用由命令制作但不在命令内的\onslide
几张幻灯片。但由于某种原因,编译卡住了。\onslide
\foreach
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\pgfmathsetmacro{\N}{3}
\foreach \n in {1,2,...,\N}{
\onslide<\n>{
\draw (0,0) node {node on slide \n};
}
}
\onslide<\N+1>{
\draw (0,0) node {node on slide {\N+1}};
}
\end{tikzpicture}
\end{frame}
\end{document}
问题源于\onslide<\N+1>
。\onslide<4>
用 代替 可以正常工作。但是,出于可维护性原因,我不想对幻灯片编号进行硬编码。为了解决这个问题,我尝试用括号括住 \N+1:
\onslide<{\N+1}>
无济于事;以下代码也不起作用:
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\pgfmathsetmacro{\N}{3}
\foreach \n in {1,2,...,\N}{
\onslide<\n>{
\draw (0,0) node {node on slide \n};
}
}
\pgfmathsetmacro{\n}{\N+1}
\onslide<\n>{
\draw (0,0) node {node on slide {\N+1}};
}
\end{tikzpicture}
\end{frame}
\end{document}
有任何想法吗?
答案1
问题是\pgfmathsetmacro
插入了小数,因此\N
被定义为3.0
,这会对初始帧内容读出造成严重破坏。如果要定义整数,请对其进行\def
ine 或使用\pgfmathtruncatemacro
。
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\pgfmathtruncatemacro{\N}{3}
\foreach \n in {1,2,...,\N}{
\onslide<\n>{
\draw (0,0) node {node on slide \n};
}
}
\pgfmathparse{int(\N+1)}
\onslide<\pgfmathresult>{
\draw (0,0) node {node on slide {\number\numexpr\N+1\relax}};
}
\end{tikzpicture}
\end{frame}
\end{document}