Seite 1 von 1

Inkrementieren einer Variable

Verfasst: Di 1. Sep 2020, 20:34
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?

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

Verfasst: Mi 2. Sep 2020, 00:52
von Gast
\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}

Re: Inkrementieren einer Variable

Verfasst: Mi 2. Sep 2020, 08:03
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:

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

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

Re: Inkrementieren einer Variable

Verfasst: Mi 16. Sep 2020, 14:57
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