在 Tikz 中创建网格

在 Tikz 中创建网格

我认为这很简单(或找到答案),但我遇到了一个问题,无法在网上找到答复(请随意链接有答案的帖子)。

我正在尝试在 2 x 3 网格上显示节点。以下是代码:

\begin{document}
\begin{tikzpicture}
    \def\idx{0}
    \foreach \i in {0,...,2}{
        \foreach \j in {0,...,1}{
            \pgfmathtruncatemacro{\idx}{\idx+1};
            \node[circle, draw] (\idx) at (\i*2,\j*1.5) {$\idx$};
        }
     }
\end{tikzpicture}
\end{document}

计数器为何不更新?输出是右侧 2 x 3 网格,但每个节点内只有 1。

答案1

\foreach将其迭代的内容分组,并且定义是本地的,因此会被“遗忘”。您可以将宏设置为全局的,但这不是好的做法。因此,您可以引入计数。

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
    \foreach \i [count=\counti starting from 0] in {0,...,2}{
        \foreach \j [count=\countj starting from 0] in {0,...,1}{
            \pgfmathtruncatemacro{\idx}{1+2*\counti+\countj}
            \node[circle, draw] (\idx) at (\i*2,\j*1.5) {$\idx$};
        }
     }
\end{tikzpicture}
\end{document}

\i或者\j直接使用

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
    \foreach \i  in {0,...,2}{
        \foreach \j in {0,...,1}{
            \pgfmathtruncatemacro{\idx}{1+2*\i+\j}
            \node[circle, draw] (\idx) at (\i*2,\j*1.5) {$\idx$};
        }
     }
\end{tikzpicture}
\end{document}

在此处输入图片描述

或者使用 LaTeX 计数器,默认情况下它是全局的。

\documentclass[tikz,border=3mm]{standalone}
\newcounter{idx}
\setcounter{idx}{0}
\begin{document}
\begin{tikzpicture}
    \foreach \i  in {0,...,2}{
        \foreach \j in {0,...,1}{
            \stepcounter{idx}
            \node[circle, draw] (\number\value{idx}) at (\i*2,\j*1.5) {$\arabic{idx}$};
        }
     }
\end{tikzpicture}
\end{document}

相关内容