我想tikzpicture
在动画中使用以下内容,如果宏\iFrame
不等于零,则不应绘制其中的一部分。如果我在standalone
不带以下代码的类中使用以下代码frame
环境的类中使用以下代码,它会按预期工作,如果我使用\ifnum
外部它tikzpicture
也按预期工作。但是,如果我\ifnum
在 a 内部使用tikzpicture
a frame
,编译会因Incomplete \ifx; all text was ignored after line 40.
错误而停止。我想知道为什么。
\documentclass{beamer}
\usepackage{tikz}
\tikzset{
axis/.style={-stealth,line width=1.5pt},
xaxis/.style={axis,red},
yaxis/.style={axis,green},
zaxis/.style={axis,blue}
}
\begin{document}
\begin{frame}
\begin{tikzpicture}[line width = 1pt]
\pgfmathtruncatemacro\iFrame{15}
\begin{scope}[shift={(0,0)},rotate=30]
\filldraw[fill=violet,fill opacity=.5] (0,0) circle (2.2 and 0.6);
\draw[xaxis] (0,0,0) -- (1,0,0);
\draw[yaxis] (0,0,0) -- (0,1,0);
\draw[zaxis] (0,0,0) -- (0,0,1);
\node[left] {\( \Psi_a \)};
\coordinate (pa1) at (2,0);
\fill (pa1) circle (1mm);
\end{scope}
\begin{scope}[shift={({\iFrame/10+4*cos(30)},0)},rotate=330]
\filldraw[fill=orange,fill opacity=.5] (0,0) circle (2.2 and 0.6);
\draw[xaxis] (0,0,0) -- (1,0,0);
\draw[yaxis] (0,0,0) -- (0,1,0);
\draw[zaxis] (0,0,0) -- (0,0,1);
\node[above left] {\( \Psi_b \)};
\coordinate (pb1) at (-2,0);
\fill (pb1) circle (1mm);
\end{scope}
\ifnum\iFrame=0\relax
\begin{scope}[shift={({2*cos(30)},{2*sin(30)})}]
\draw[xaxis] (0,0,0) -- (1,0,0);
\draw[yaxis] (0,0,0) -- (0,1,0);
\draw[zaxis] (0,0,0) -- (0,0,1);
\node[above right] {\( \Psi_j \)};
\end{scope}
\fi
\end{tikzpicture}
\end{frame}
\end{document}
答案1
一种解决方案是使用环境fragile
选项frame
,这样内容就会逐字写入辅助文件,并且beamer
在读取材料时不会混淆。我不太确定问题出在哪里,但它肯定存在于“原始”条件中。
事实上,另一种解决方案是执行条件
\ifnumequal{\iFrame}{0}
{
\begin{scope}[shift={({2*cos(30)},{2*sin(30)})}]
\draw[xaxis] (0,0,0) -- (1,0,0);
\draw[yaxis] (0,0,0) -- (0,1,0);
\draw[zaxis] (0,0,0) -- (0,0,1);
\node[above right] {\( \Psi_j \)};
\end{scope}
}{}
不要忘记“假”分支的空括号。没有扫描“原始”条件,一切顺利。构造\ifnumequal
由 定义etoolbox
,并由 自动加载beamer
。