如何使用相同变量来增加变量?

如何使用相同变量来增加变量?

我怎样才能从同一个变量增加变量?

\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这里使用语法将 设置\S51在每次迭代中将其推进。另一种语法可能是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}

结果

评论:

  • \pgfmathsetmacro不是路径命令,因此其语法不知道结束分号。在序言中,额外的分号会导致错误(缺少\begin{document})。

  • 如果您希望得到一个整数作为结果,则\pgfmathtruncatemacro有帮助:

    \documentclass{article}
    \usepackage{pgf}
    \pgfmathsetmacro\S{5}
    \pgfmathtruncatemacro\S{\S + 1}
    
    \begin{document}
    \S
    \end{document}
    

    使用 \pgfmathtruncatemacro 的结果

相关内容