我认为这很简单(或找到答案),但我遇到了一个问题,无法在网上找到答复(请随意链接有答案的帖子)。
我正在尝试在 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}