如何使用以下代码增加 TikZ 中的计数器:
\newcounter{ga} %counter
\setcounter{ga}{1}
\begin{tikzpicture}
\foreach \t in {1,...,10}{
\pgfmathparse{Mod(\t,2) == 1 ? 1 : 0}
\ifnum\pgfmathresult > 0
\ga = \ga + 1
\fi
\end{tikzpicture}
在第 4 行我需要类似的东西\ga = \ga + 1
。
答案1
\documentclass{minimal}
\usepackage{tikz}
\newcounter{ga}\setcounter{ga}{1}
\begin{document}
\foreach \t in {1,...,10}{\ifodd\t \stepcounter{ga}\fi}
\thega
\end{document}
将值放置在节点中的示例:
\documentclass{minimal}
\usepackage{tikz}
\newcounter{ga}\setcounter{ga}{0}
\begin{document}
\begin{tikzpicture}
\foreach \t in {1,...,10}{\ifodd\t \stepcounter{ga}\fi}
\node [circle,draw] (a) at (0:1) {\thega};
\end{tikzpicture}
\end{document}
答案2
这实际上不是关于 TikZ 的问题,而是关于包pgffor
和的pgfmath
问题。对于 Tikz,我更喜欢在这里使用 TeX 的宏\newcount
,如果使用会更自然\ifdim
。
更新
我忘了我是 pgfmath 中整数算术函数的作者,可以使用isodd
。但从\ifodd
Herbert 的回答来看,使用 是正确的方法\newcount
。
或许,阐明答案之间的差异很重要。我对混合使用 TeX 的宏和 LaTeX 的宏感到犹豫不决。
1) 值得注意的是 LaTeX 的计数器是全局设置的。
2) 使用低级 TeX 系统的需求并不明显,但 TikZ 的精神和此处的宏,是如果本地可能,它就会工作。不同之处在于 TeX 在本地设置计数寄存器。因此,要进行全局分配,您必须像我的代码中\foreach
一样刻意进行 。\global\advance\ga by1
一份好的文件(tex 计数和乳胶计数器)是这里从约瑟夫·赖特
\documentclass[11pt]{article}
\usepackage{tikz} % or \usepackage{pgffor,pgfmath} pgf 2.1cvs
\begin{document}
\newcount\ga
\ga=1 %
\foreach \t in {1,...,10}{%
%\pgfmathparse{Mod(\t,2)==1?1:0}
\pgfmathparse{isodd(\t)}
\ifnum\pgfmathresult>0 \global\advance\ga by1 \fi
}
\the\ga
\end{document}
结果:6