如何在 tikzpicture 中的节点中使用 let?

如何在 tikzpicture 中的节点中使用 let?

我尝试使用的代码如下所示。如何让它工作pdflatex

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,intersections,through,backgrounds,fit}
\begin{document}
\begin{tikzpicture}[framed]

  \foreach \y in {0, 1, 2}{
    \foreach \x in {0, 1, 2}{
      \path
        let
          \n1 = {\x+random(2)},
          \n2 = {\y+random(2)}
        in
          node at (\n1,\n2) [shape=circle,draw] {$p_{\x,\y}$};
    }
  }

\end{tikzpicture}
\end{document}

答案1

let我认为你对块内的\x\y可以具有特殊含义这一事实感到困惑。例如,如果你说\p1=(3,2),那么\x1是 3 并且\y1是 2。我知道你不会这样做,但我认为\x和的定义\y在之后会发生变化let

如果您将它们更改为\X\Y您的代码就可以正常工作。但请注意,我认为您实际上在这里不需要它,您可以直接在坐标规范中进行计算,因此您可以说\node at ({\x+random(2)},{\y+random(2)}) ...

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}

\foreach \y in {0, 1, 2}{
  \foreach \x in {0, 1, 2}{      
    \node at ({\x+random(2)},{\y+random(2)}) [shape=circle,draw] {$p_{\x,\y}$};
  }
}

\end{tikzpicture}
\begin{tikzpicture}
\foreach \Y in {0, 1, 2}{
  \foreach \X in {0, 1, 2}{      
    \path
      let 
        \n1 = {\X+random(2)},
        \n2 = {\Y+random(2)}
      in     
        node at (\n1,\n2) [shape=circle,draw] {$p_{\X,\Y}$};
  }
}
\end{tikzpicture}
\end{document}

相关内容