我正在尝试按顺序显示使用循环制作的 TikZ 绘图的各个部分 \foreach
。
代码如下:
\documentclass[beamer]{standalone}
\usepackage{tikz}
\usetikzlibrary{automata,calc,fit,shapes}
\begin{document}
\begin{tikzpicture}
\foreach \x in {1,...,6} {
\visible<\x+2->{
\node[] at (\x*0.75,0) (n\x) {$\x$};
\foreach \y in {1,...,\x} {
\node[] (p\x\y) [below = 0.3 + 0.3*\y of n\x] {$\bullet$};
}}}
\end{tikzpicture}
\end{document}
问题是我想要\visible
命令 counter 相对于 counter 延迟两个单位\x
。而 LaTeX 似乎无法识别以下任何语法:
\visible<\x+2>
\visible<$\x+2$>
\visible<(\x+2)>
\visible<$(\x+2)$>
我究竟做错了什么?
答案1
Beamer 覆盖无法直接评估类似 的表达式\x+2
。因此,您必须通过添加以下代码来帮助它:
\pgfmathtruncatemacro\z{\x+2}
并用于指定覆盖。另外,请注意,您的序言中\z
缺少一个库。positioning
代码
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{automata,calc,fit,shapes,positioning}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\foreach \x in {1,...,6} {
\pgfmathtruncatemacro\z{\x+2}
\visible<\z->{
\node[] at (\x*0.75,0) (n\x) {$\x$};
\foreach \y in {1,...,\x} {
\node[] (p\x\y) [below = 0.3 + 0.3*\y of n\x] {$\bullet$};
}}}
\end{tikzpicture}
\end{frame}
\end{document}
输出
答案2
与 @Herr K. 的回答略有不同,我喜欢evaluate
在循环中使用。与“pgfthingy”(pgftruncate 等)相比,它更容易操作
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{automata,calc,fit,shapes,positioning}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\foreach %
[evaluate ={\z = int(\x+2);}] %%%%%% <- here %%%%%%%
\x in {1,...,6} {
\visible<\z->{
\node[] at (\x*0.75,0) (n\x) {$\x$};
\foreach \y in {1,...,\x} {
\node[] (p\x\y) [below = 0.3 + 0.3*\y of n\x] {$\bullet$};
}}}
\end{tikzpicture}
\end{frame}
\end{document}