Wie kann ich eine Variable erhöhen, indem ich dieselbe Variable verwende?

Wie kann ich eine Variable erhöhen, indem ich dieselbe Variable verwende?

Wie kann ich eine Variable von derselben Variable aus erhöhen?

\pgfmathsetmacro\S{5};
\pgfmathsetmacro\S{\S + 1};%   not working

Wie kann ich das umgehen? Ich benötige Zähler, die ich unter bestimmten Bedingungen als Zeilenkoordinateninkrement verwenden kann.

Aktualisieren

\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} };         
}

druckte dies

1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1

Ich brauche

1 2 3 4 ...

Ja, ich könnte dies in diesem einfachen Beispiel tun, indem ich einfach \xVariablen verwende, aber in meinem echten Diagramm muss ich sie unregelmäßig erhöhen. Ich brauche also Variablen, die innerhalb der Schleife ohne Zurücksetzungen erhöht werden können. Oder übersehe ich etwas und es sollte funktionieren?

Antwort1

Für die Verwendung in einer \foreachSchleife gibt es bessere Optionen:

\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}

Bildbeschreibung hier eingeben

wobei hier die Syntax count=\S from 5verwendet wird, um \Sauf zu setzen 5und es 1in jeder Iteration um zu erhöhen. Eine andere Syntax könnte sein evaluate=\i as \S using \i+4, die das gleiche Ergebnis erzielt.

Aktualisieren

Das Inkrement kann innerhalb der Schleife basierend auf einer Bedingung wie dieser geändert werden:

\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}

Bildbeschreibung hier eingeben

Antwort2

Für Zähler müssen Sie keine pgfMathematik verwenden. Sie können einfach \setcounter, \stepcounteroder verwenden \addtocounter. Mit diesen bleibt der Zählerwert nach der \foreachSchleife erhalten:

Bildbeschreibung hier eingeben

Ich bin nicht sicher, ob ich den angegebenen Codeausschnitt zur Absicht vollständig verstehe, aber er lässt sich leicht anpassen, um auch TeX-Zähler zu verwenden (wie im zweiten MWE unten gezeigt):

Bildbeschreibung hier eingeben

Code:

\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}

Code:

\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}

Antwort3

Es funktioniert mit pgf 3.0.1a:

\documentclass{article}
\usepackage{pgf}
\pgfmathsetmacro\S{5}
\pgfmathsetmacro\S{\S + 1}

\begin{document}
\S
\end{document}

Ergebnis

Bemerkungen:

  • \pgfmathsetmacroist kein Pfadkommando und kennt daher in der Syntax kein schließendes Semikolon. In der Präambel verursacht das zusätzliche Semikolon einen Fehler (Missing \begin{document}).

  • Wenn du als Ergebnis eine Ganzzahl haben willst, dann \pgfmathtruncatemacrohilft:

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

    Ergebnis mit \pgfmathtruncatemacro

verwandte Informationen