在 \foreach 循环之后使用 \onslide 继续播放 TikZ 动画

在 \foreach 循环之后使用 \onslide 继续播放 TikZ 动画

我想在 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,这会对初始帧内容读出造成严重破坏。如果要定义整数,请对其进行\define 或使用\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}

相关内容