TikZ 边缘厚度导致 foreach 循环中的错误

TikZ 边缘厚度导致 foreach 循环中的错误

我在制作简单的 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}

在此处输入图片描述

相关内容