我不明白为什么会出现以下代码:
\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}
给出了正确的结果:
您的示例不起作用的原因如下:
该
\pgfmathparse
命令计算结果为浮点数(2.0、3.0 等)。您应该
\pgfmathresult
在 之后立即使用\pgfmathparse
。对于原因 2,您可以定义一个新的宏
\pgfmathtruncatemacro\y{\x+1}
,按照@TomBombadil 在评论中的建议,并用替换每个\pgfmathresult
宏\y
。