我尝试使用 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}