我想绘制一个网格状的图形(见下图)。
下面的代码给出了图中所示的结果。我不明白为什么边缘不垂直。
另外,注释中的代码是用于绘制水平边缘的。然而,它会导致错误。
有人可以解释一下吗?
在此先感谢您的帮助。
\tikzstyle{vertex}=[circle,draw,minimum size=1cm]
\tikzstyle{every node}=[vertex]
\begin{tikzpicture}
\foreach \x in {1,3,5,7}
{
\foreach \y in {1,3,5,7}
{
\node (\x \y) at (\x,\y) {\x, \y};
\ifnum\y>1
\pgfmathparse{\y-2}
\draw (\x \y) -- (\x \pgfmathresult);
\fi
% \ifnum\x>1
% \pgfmathparse{\x-2}
% \draw (\x \y) -- (\pgfmathresult \y);
% \fi
}
}
\end{tikzpicture}
答案1
问题
考虑\pgfmathparse{\y-2}
其中\x = 1
和\y = 3
。那么您的输出将是1.0
。因此,边将从到绘制,(1 3)
其中(1 1.0)
表示.0
边进入节点的角度。您需要使用以下方法去掉所有小数位\pgfmathparse{int(\y-2)}
解决方案
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[
vertex/.style={draw,circle,minimum size=1cm},
every node/.style={vertex}
]
\foreach \x in {1,3,5,7}
{
\foreach \y in {1,3,5,7}
{
\node (\x \y) at (\x,\y) {\x, \y};
\ifnum\y>1
\pgfmathparse{int(\y-2)}
\draw (\x \y) -- (\x \pgfmathresult);
\fi
\ifnum\x>1
\pgfmathparse{int(\x-2)}
\draw (\x \y) -- (\pgfmathresult \y);
\fi
}
}
\end{tikzpicture}
\end{document}
答案2
完整内容如下 - 我看到我在 @percusse 之后发表了评论,但想法类似。您可以保留节点名称不变,我认为它们就像变量名称,不喜欢其中有空格,所以测试后没有将空格放回去。您真正需要的唯一更改是\pgfmathparse{int(\y-2)}
:
\tikzstyle{vertex}=[circle,draw,minimum size=1cm]
\tikzstyle{every node}=[vertex]
\begin{tikzpicture}
\foreach \x in {1,3,5,7}
{
\foreach \y in {1,3,5,7}
{
\node (\x\y) at (\x,\y) {\x, \y};
\ifnum\y>1
\pgfmathparse{int(\y-2)}
\draw (\x\y) -- (\x\pgfmathresult);
\fi
% \ifnum\x>1
% \pgfmathparse{\x-2}
% \draw (\x \y) -- (\pgfmathresult \y);
% \fi
}
}
\end{tikzpicture}