Inkrementieren einer Variable

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Jaffet
Forum-Anfänger
Forum-Anfänger
Beiträge: 11
Registriert: Mi 22. Jul 2020, 13:29

Inkrementieren einer Variable

Beitrag von Jaffet »

Hallo,

ich möchte die Variable \ergebnis in einer For-Schleife fünf Mal um 0.3 erhöhen. Bei mir will es einfach nicht klappen. Weiß jemand, warum die Variable bei jedem Durchlauf den Wert 0.4 enthält?

Code: Alles auswählen

	
	\def\ergebnis{0}
   	\foreach \c in {1,2,...,5}{
   		pgfmathparse{\ergebnis+0.3}
   		\edef\ergebnis{\pgfmathresult}
	
	\draw (0,\c) -- (0,\c) node[left=4pt] {$\scriptstyle \ergebnis$};
}

Gast

Beitrag von Gast »

Code: Alles auswählen

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
    \def\ergebnis{0}
    \foreach \c in {1,2,...,5}{
        \pgfmathparse{\ergebnis+0.3}
        \xdef\ergebnis{\pgfmathresult}% Abkürzung für \global\edef
	
        \draw (0,\c) -- (0,\c) node[left=4pt] 
            {$\scriptstyle \pgfmathprintnumber{\ergebnis}$}
        ;
    }
\end{tikzpicture}
\end{document}

gast

Re: Inkrementieren einer Variable

Beitrag von gast »

Schleifendurchläufe finden mit einer lokalen Gruppe statt, so dass Definitionen und andere Statusänderungen im jeweiligen Schleifendurchlauf verborgen bleiben. Statt die Änderung mit \xdef global zu machen, empfehle ich in Fällen wie deinem jedoch, einfach den Wert direkt auszurechnen und zu verwenden:

Code: Alles auswählen

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
  \foreach \c in {1,2,...,5} {
    \draw (0,\c) -- (0,\c) node[left=4pt] 
      {$\pgfmathparse{0.3*\c}\scriptstyle \pgfmathprintnumber{\pgfmathresult}$};
  }
\end{tikzpicture}
\end{document}

Und bitte immer ein vollständiges Minimalbeispiel an Stelle von Code-Schnipseln angeben. Man kann daran fast immer einiges ablesen und es beschleunigt die Bearbeitung. Außerdem kannst du so selbst besser testen, dass es außer dem erwähnten Problem keine Fehler enthält.

Übrigens sollte man statt \pgfmathparse{\ergebnis+0.3}\edef\ergebnis{\pgfmathresult} besser direkt \pgfmathsetmacro{\ergebnis}{\ergebnis+0.3} verwenden. Ein korrektes Vorgehen mit Rettung des Werts über einen Schleifendurchlauf hinaus wäre IMHO damit:

Code: Alles auswählen

\documentclass{article}
\usepackage{tikz}
\newcommand*{\ergebnis}{}% Für die spätere Verwendung "reservieren".
\begin{document}
\begin{tikzpicture}
  \renewcommand*{\ergebnis}{0}%
  \foreach \c in {1,2,...,5} {
    \draw (0,\c) -- (0,\c) node[left=4pt] 
    {\pgfmathsetmacro{\ergebnis}{\ergebnis+0.3}
      \global\let\ergebnis\ergebnis
      \pgfmathparse{0.3*\c}\footnotesize \pgfmathprintnumber{\ergebnis}};
  }
\end{tikzpicture}
\end{document}

Jaffet
Forum-Anfänger
Forum-Anfänger
Beiträge: 11
Registriert: Mi 22. Jul 2020, 13:29

Re: Inkrementieren einer Variable

Beitrag von Jaffet »

Hallo,

danke. Deine Hilfe hat super geklappt. Ich fände es gut, wenn man dieses Thema verschieben würde. Es passt besser in die Kategorie Tabellen und Grafiken. Ich habe leider beim Erstellen versehentlich die falsche Kategorie gewählt.

VG
Jaffet


Antworten