假设我有一个循环:
\begin{tikzpicture}
\foreach \frm \in {1,...,6}{ \only<\frm>{
% if \frm > 4: set \x to 1, 0 otherwise
\node (foo) at (10+5*\x,7) {hello};
}}
\end{tikzpicture}
我想在给定的幻灯片上“移动”节点,但我很难找到合适的方法来表达 TeX 中注释中的条件。
编辑:我试过\ifthenelse
但没有成功:
\node (foo) at (10+5*\ifthenelse{\frm<5}{0}{1},7) {hello};
出现此错误,我根本无法解析
! Use of \beamer@only doesn't match its definition.
\new@ifnextchar ...served@d = #1\def \reserved@a {
#2}\def \reserved@b {#3}\f...
答案1
以下技巧应该可以解决问题。我稍微修改了坐标,以便它们保留在屏幕上。
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}[fragile]
\begin{tikzpicture}
\foreach \frm in {1,...,6}{
\draw (0,0) node {origin};
\only<\frm>{
% if \frm > 4: set \x to 1, 0 otherwise
\ifnum\frm>4\relax\def\x{1}\else\def\x{0}\fi%
\node (foo) at (5+5*\x,7) {hello};
}}
\end{tikzpicture}
\end{frame}
\end{document}
答案2
我不知道您为什么这样做,而且我猜这是在投影仪演示中进行的,因此下面的操作似乎可以实现您想要的效果。
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}{title}
\begin{tikzpicture}
\foreach \frm in {1,...,6}{
\onslide<\frm>{
% if \frm > 4: set \x to 1, 0 otherwise
\pgfmathparse{\frm > 4? 1 : 0}
\node (foo) at (10 + 5*\pgfmathresult,7) {hello};
}
}
\end{tikzpicture}
\end{frame}
\end{document}