使用 \pgfmathparse 时节点锚点错误

使用 \pgfmathparse 时节点锚点错误

我有这个例子

\documentclass{article}
\usepackage{tikz}

\begin{document}


\begin{tikzpicture} 

\foreach \i in {0,2,...,10}
{\node[circle,draw] (\i) at (0,\i) {\i}; }  

\foreach \i in {1,3,...,11}
{\node[circle,draw] (\i) at (2,\i) {\i}; }  

\foreach \i in {0,2,...,8}
{\pgfmathparse{\i+1}\draw (\i)--(\pgfmathresult);}  

\draw (10)--(11);

\end{tikzpicture}   

\end{document}

使用此输出

在此处输入图片描述

为什么右侧节点的线路通向东侧?

答案1

结果为小数,例如1.0,这是边界上的一个点。您需要一个整数1

\documentclass{article}
\usepackage{tikz}

\begin{document}


\begin{tikzpicture}

\foreach \i in {0,2,...,10}
{\node[circle,draw] (\i) at (0,\i) {\i}; }

\foreach \i in {1,3,...,11}
{\node[circle,draw] (\i) at (2,\i) {\i}; }

\foreach \i in {0,2,...,8}
{\pgfmathparse{int(\i+1)}\draw (\i)--(\pgfmathresult);}

\draw (10)--(11);

\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

Ulrike 告诉了你为什么会出错。但你也可以稍微简化一下。以下是两个奇偶比较的例子,它们的结果相同。对于简单的表达式,通常使用 就足够了\numexpr\x-1\relax(如果需要额外的扩展,那么你可以在前面加上\number

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture} 
\foreach\x[evaluate={\xx=isodd(\x)*2},count=\xi from -1]in{0,...,11}{
\node[circle,draw] (n-\x) at (\xx,\x) {\x};
\ifodd\x\relax\draw (n-\x) -- (n-\xi);\fi
}
\end{tikzpicture}  
\end{document}

相关内容