tikz 节点名称及计算

tikz 节点名称及计算

我不明白为什么会出现以下代码:

\documentclass[border=0mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,shapes.multipart, fit,backgrounds,calc}

\begin{document}
\begin{tikzpicture}
\node(poste1){poste};
\foreach\x in {1,...,5}{%
\pgfmathparse{\x+1}
\node[right=of poste\x](poste\pgfmathresult){poste\pgfmathresult};
}
\end{tikzpicture}

不起作用。使用此代码

\documentclass[border=0mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,shapes.multipart, fit,backgrounds,calc}

\begin{document}
\begin{tikzpicture}
\node(poste1){poste};
\foreach\x in {1}{%
\pgfmathparse{\x+1}
\node[right=of poste\x](poste\pgfmathresult){poste\pgfmathresult};
}

\end{tikzpicture}
\end{document}

\end{document}

看来\pgfmathresult命令返回了错误的数字,因此出现错误,但我不知道为什么会发生这种情况。有人能帮我吗?

答案1

比使用更简单的\pgfmathparse是:

\documentclass[border=0mm,tikz]{standalone}
\usetikzlibrary{%backgrounds,calc,fit,
                positioning,
                %shapes.multipart
                }

\begin{document}
\begin{tikzpicture}[node distance= 2mm]
\node (poste1) {poste1};
\foreach \x [count=\xx from 2] in {1,2,...,5}
{
\node[right=of poste\x] (poste\xx) {poste \xx};
}
    \end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

您可以使用evaluate=如下简单的方法:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,shapes.multipart, fit,backgrounds,calc}
\begin{document}

\begin{tikzpicture}
\node(poste1){poste1};
\foreach \x [evaluate=\x as \y using int(\x-1)] in {2,...,6}{%
\node[right=of poste\y](poste\x){poste\x};
}
\end{tikzpicture}

\end{document}

给出了正确的结果:

在此处输入图片描述

您的示例不起作用的原因如下:

  1. \pgfmathparse命令计算结果为浮点数(2.0、3.0 等)。

  2. 您应该\pgfmathresult在 之后立即使用\pgfmathparse

  3. 对于原因 2,您可以定义一个新的宏\pgfmathtruncatemacro\y{\x+1},按照@TomBombadil 在评论中的建议,并用替换每个\pgfmathresult\y

相关内容