使用命令转移嵌套的 tikz 范围

使用命令转移嵌套的 tikz 范围

我尝试使用 tikz 自动化某些操作,但遇到了一个我无法理解的问题。嵌套范围与定义为命令的移位无法按我预期的方式工作。

例如,这个方法非常有效:

\begin{tikzpicture}
\def\coord{(1,0)}
\begin{scope}[shift={\coord}]
\end{scope}
\begin{scope}[shift={\coord}]
\end{scope}
\end{tikzpicture}

\node[fill,circle] at (0,0) {};并且可以正常工作,通过在范围内部和外部添加一些内容可以看到

但以下操作失败:

\begin{tikzpicture}
\def\coord{(1,0)}
\begin{scope}[shift={\coord}]
  \begin{scope}[shift={\coord}]
  \end{scope}
\end{scope}
\end{tikzpicture}

然而,这

\begin{tikzpicture}
\def\coord{(1,0)}
\begin{scope}[shift={(1,0)}]
  \begin{scope}[shift={(1,0)}]
  \end{scope}
\end{scope}
\end{tikzpicture}

确实有效。我不明白发生了什么。pdflatex返回

Package tikz Error: Cannot parse this coordinate.
See the tikz package documentation for explanation. ...

在有问题的情况下。问题是为什么会发生这种情况?我可能做错了什么,但我真的不知道是什么。

请注意,添加长度单位并不能解决问题。但是,和 的类似问题xshift似乎yshift不会发生。还请注意,我尝试尽可能简化代码;这就是为什么它什么也没画出来。

谢谢,

答案1

正如 qrrbrbirlbel 指出的那样,TikZ 可以逐字解析命令流。根据上下文以及键值系统与宏和文字文本混合的情况,这有时是好事,有时也是坏事。因此,您可以帮助 TikZ 理解它应该读取的内容。因此,更改没有括号的定义就足以让它运行,哦,那肯定是一个坐标

还要注意,需要用括号来隐藏选项中的逗号和括号,您可以在此处将其删除,这样就不需要您额外输入。

\begin{tikzpicture}
\draw[style=help lines] (0,-1) grid[step=1cm] (4,1);
\def\coord{1,0}
\begin{scope}[shift=(\coord)]
  \begin{scope}[shift=(\coord)]
      \begin{scope}[shift=(\coord)]
        \begin{scope}[shift=(\coord)]
        \node (a) at (0,0) {a};
        \end{scope}
      \end{scope}
  \end{scope}
\end{scope}
\end{tikzpicture}

在此处输入图片描述

相关内容