问题

问题

我想绘制一个网格状的图形(见下图)。

下面的代码给出了图中所示的结果。我不明白为什么边缘不垂直。

另外,注释中的代码是用于绘制水平边缘的。然而,它会导致错误。

有人可以解释一下吗?

在此先感谢您的帮助。

\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}

相关内容