
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 \x
Variablen 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 \foreach
Schleife 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}
wobei hier die Syntax count=\S from 5
verwendet wird, um \S
auf zu setzen 5
und es 1
in 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}
Antwort2
Für Zähler müssen Sie keine pgf
Mathematik verwenden. Sie können einfach \setcounter
, \stepcounter
oder verwenden \addtocounter
. Mit diesen bleibt der Zählerwert nach der \foreach
Schleife erhalten:
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):
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}
Bemerkungen:
\pgfmathsetmacro
ist 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
\pgfmathtruncatemacro
hilft:\documentclass{article} \usepackage{pgf} \pgfmathsetmacro\S{5} \pgfmathtruncatemacro\S{\S + 1} \begin{document} \S \end{document}