我在制作简单的 TikZ 图(具有可变节点数的梳状图)时遇到了一些奇怪的问题。这种奇怪的现象来自应用于边缘路径的样式。以下是(最小)示例:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\begin{document}
\begin{tikzpicture}[auto,scale=1.0,%
block/.style = {draw,circle,very thick,minimum size=0.5cm},%
directed/.style ={draw,-triangle 45, shorten >= 0pt, very thick}]
% Parameters
\pgfmathsetmacro{\numXnodes}{int(3)}
\pgfmathsetmacro{\strch}{2}
\foreach \i in {1,...,\numXnodes}{
\path (\strch*\i-\strch, 0) node[block] (x\i) {\i};
\path (x\i) ++(0,-\strch) node[block] (z\i) {\pgfmathparse{int(\numXnodes+\i)}\pgfmathresult};
\path (x\i) [directed] -- (z\i);
}
\pgfmathsetmacro{\nnmo}{{int(\numXnodes-1)}}
\foreach \i in {1,...,\nnmo} {
\pgfmathparse{int(\i+1)}
\draw (x\i) [draw,-triangle 45,thick] -- (x\pgfmathresult);
}
\end{tikzpicture}
\end{document}
上述代码绘制了一个具有正确结构/方向性的图形。但是,“x”节点之间的边非常细。
问题是,如果我将行上的样式更改为
\draw (x\i) [draw,-triangle 45] -- (x\pgfmathresult);
,\draw (x\i) [draw,-triangle 45,thick] -- (x\pgfmathresult);
我会收到一条错误消息Package pgf Error: No shape named x0 is known. } (followed by: )
有没有想过为什么这个错误会在这里发生,而不是在用定义的样式绘制的第一组边中directed
(即在第一个循环中)?
提前致谢!
答案1
\pgfmathresult
宏几乎在代码的每一步都会被覆盖,因此您需要快速使用它的值。最有可能的是,thick
选项会导致临时计算并删除您的结果。相反,您可以使用选项[count=\variable from number]
。
我真的建议不要将其用作\i
计数器,因为如果它没有正确扩展,否则变量中就会出现希腊字母无点i
字符,直到调试一段时间后才会注意到。此外,您还可以使用它来自动获取整数部分。iota
\pgfmathtruncatemacro
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\begin{document}
\begin{tikzpicture}[auto,scale=1.0,%
block/.style = {draw,circle,very thick,minimum size=0.5cm},%
directed/.style ={draw,-triangle 45, shorten >= 0pt, very thick}]
% Parameters
\pgfmathtruncatemacro{\numXnodes}{3} % \def or \newcommand would also be OK here.
\pgfmathtruncatemacro{\strch}{2}
\foreach \x in {1,...,\numXnodes}{
\path (\strch*\x-\strch, 0) node[block] (x\x) {\x};
\path (x\x) ++(0,-\strch) node[block] (z\x) {\pgfmathparse{int(\numXnodes+\x)}\pgfmathresult};
\path (x\x) [directed] -- (z\x);
}
\pgfmathtruncatemacro{\nnmo}{\numXnodes-1}
\foreach \x[count=\xi from 2] in {1,...,\nnmo} {
\draw (x\x) [draw,-triangle 45,thick] -- (x\xi);
}
\end{tikzpicture}
\end{document}