我怎样才能从同一个变量增加变量?
\pgfmathsetmacro\S{5};
\pgfmathsetmacro\S{\S + 1};% not working
我该如何解决这个问题?我需要计数器,用于在特定条件下增加线坐标。
更新
\pgfmathsetmacro\cA{0};
\newcounter{cB}
\foreach \x in {1,...,10}
{
\pgfmathtruncatemacro\cA{\cA+1)};
\pgfmathaddtocounter{cB}{1};
\node at (\x,1) { \cA };
\node at (\x,0) { \the\numexpr\value{cB} };
}
打印了这个
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
我需要
1 2 3 4 ...
是的,在这个简单的例子中,我可以通过使用\x
变量来实现这一点,但在我的实际图表中,我需要不定期地增加它们。所以我需要可以在循环内增加而无需重置的变量。或者,我遗漏了什么,它应该可以工作吗?
答案1
要在循环中使用\foreach
,有更好的选择:
\documentclass[tikz,border=2pt]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \i [count=\S from 5] in {1,...,5}
\node [draw, xshift=\i cm] {\S};
\end{tikzpicture}
\end{document}
count=\S from 5
这里使用语法将 设置\S
为5
并1
在每次迭代中将其推进。另一种语法可能是evaluate=\i as \S using \i+4
,这将实现相同的结果。
更新
可以根据如下条件在循环内改变增量:
\newcounter{cA}
\setcounter{cA}{0}
\newcounter{cB}
\setcounter{cB}{0}
\begin{tikzpicture}
\foreach \x in {1,...,10}{
\addtocounter{cA}{1}
\ifnum\x<6\addtocounter{cB}{1}\else\addtocounter{cB}{2}\fi
\node at (\x,1) { \thecA };
\node at (\x,0) { \thecB };
}
\end{tikzpicture}
答案2
计数器无需使用pgf
数学运算。您只需使用\setcounter
、\stepcounter
或即可\addtocounter
。使用这些,计数器值在循环后保留\foreach
:
不确定我是否完全理解给出的意图代码片段,但也可以轻松适应使用 TeX 计数器(如下面的第二个 MWE 所示):
代码:
\documentclass{article}
\usepackage{tikz}
\newcounter{foo}
\begin{document}
\setcounter{foo}{0}
After \verb|\setcounter|: foo=\arabic{foo}
\stepcounter{foo}
After \verb|\stepcounter|: foo=\arabic{foo}
\addtocounter{foo}{4}
After \verb|\addtocounter|: foo=\arabic{foo}
\foreach \x in {1,...,20} {%
\stepcounter{foo}%
}%
After \verb|\foreach|: foo=\arabic{foo}
\end{document}
代码:
\documentclass{article}
\usepackage{tikz}
\newcounter{cA}
\newcounter{cB}
\begin{document}
\begin{tikzpicture}
\foreach \x in {1,...,10} {%
\stepcounter{cA};
\stepcounter{cB};
\node at (\x,1) { \the\value{cA} };
\node at (\x,0) { \the\value{cB} };
}
\end{tikzpicture}
\end{document}
答案3
它与 pgf 3.0.1a 兼容:
\documentclass{article}
\usepackage{pgf}
\pgfmathsetmacro\S{5}
\pgfmathsetmacro\S{\S + 1}
\begin{document}
\S
\end{document}
评论: