代码

代码

我正在尝试按顺序显示使用循环制作的 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}

相关内容