答案1
\pgfmathparse
计算结果为浮点数:1.0, 2.0, ... 然后,您将得到below = of n1.0
。.0
是边框锚点,即边框的角度为 0°,与 相同n.east
。 这解释了向右的偏移。 下部节点的中心位于上部节点右侧下方。
可以.0
通过 来剥离\pgfmathtruncatemacro
,例如:
\documentclass[tikz]{standalone}
\usetikzlibrary[positioning]
\begin{document}
\begin{tikzpicture}
\node (n1){First};
\foreach \x in {2,...,6}{%
\pgfmathtruncatemacro{\lastx}{\x - 1}
\node [below = of n\lastx](n\x) {\x};
}
\end{tikzpicture}
\end{document}
另一种方法是remember
在\foreach
循环中使用 key 来记住先前的值,而无需计算它:
\documentclass[tikz]{standalone}
\usetikzlibrary[positioning]
\begin{document}
\begin{tikzpicture}
\node (n1){First};
\foreach \x [remember=\x as \lastx (initially 1)] in {2,...,6}{%
\node [below = of n\lastx](n\x) {\x};
}
\end{tikzpicture}
\end{document}
答案2
扎尔科和海科·奥伯迪克并解释了问题的原因(\pgfmathparse
除非另有说明,否则产生浮点结果;.0
被解释为 Ti钾Z 锚点规格:0°=east
锚点)。
以下是一些不依赖于\node
不覆盖的其他可能性\pgfmathresult
:
\documentclass[tikz]{standalone}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\node (n1) {First};
\foreach \x in {2,...,6}
{
\pgfmathtruncatemacro{\xMinusOne}{\x-1}
\node [below = of n\xMinusOne] (n\x) {\x};
}
\end{tikzpicture}
\end{document}
和
\documentclass[tikz]{standalone}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\node (n1) {First}
foreach[evaluate=\x as \xMinusOne using int(\x - 1)] \x in {2,...,6}
{ node[below = of n\xMinusOne] (n\x) {\x} };
\end{tikzpicture}
\end{document}
答案3
以下是使用 tikz 库的另一种可能性chains
:
\documentclass[tikz]{standalone}
\usetikzlibrary{chains}
\begin{document}
\begin{tikzpicture}
\begin{scope}[start chain=1 going below, nodes={on chain=1}]
\node (n1) {First}
foreach \x in {2,...,6}
{ node (n\x) {\x} };
\end{scope}
\end{tikzpicture}
\end{document}
答案4
您需要将节点位置计算为\pgfmathparse{int(\x-1)}%
,而没有坐标的int
格式n1.0
在您的情况下不是有效格式(小数点后的数字确定节点边界上的锚点),用于在图像中定位节点。
完成 MWE:
\documentclass[tikz]{standalone}
\usetikzlibrary[positioning]
\begin{document}
\begin{tikzpicture}[node distance=1ex]
\node (n1) {First};
\foreach \x in {2,...,6}{%
\pgfmathparse{int(\x-1)}%
\node [below = of n\pgfmathresult] (n\x) {\x};
}
\end{tikzpicture}
\end{document}
您可以通过定义新的计数器来确定节点的位置:
\documentclass[tikz]{standalone}
\usetikzlibrary[positioning]
\begin{document}
\begin{tikzpicture}[node distance=1ex]
\node (n1) {First};
\foreach \x [count=\y] in {2,...,6}{%
\node [below = of n\y] (n\x) {\x};
}
\end{tikzpicture}
\end{document}
结果和以前一样。