\setcounter \ifthenelse und Wertübergabe als float Thema ist als GELÖST markiert

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


byxx
Forum-Anfänger
Forum-Anfänger
Beiträge: 10
Registriert: So 17. Jan 2021, 12:50

\setcounter \ifthenelse und Wertübergabe als float

Beitrag von byxx »

Guten Abend,

wenn ich in der Anwendung der \drawBalls im Dokument Komma-Zahlen(z.B. 2.3) für den Parameter \x übergebe , crashed die Grafik. Mit Ganzzahlen funktioniert es einwandfrei. Würde mich über die Lösung freuen.

Diese ursprüngliche Idee hatte -obwohl gut nachvollziehbar- nicht funktioniert:
 \ifthenelse{{\x + \offset} >\xAmount}{\def\currentX{\x+\offset-10}}{\def\currentX{\x + \offset}};
Der Dissenz scheint demnach gewissermassen darin zu liegen, dass der \setcounter zwar "hilft", jedes \x aus der \foreach zu checken, jedoch mit Komma-Zahlen naturgemäß nicht arbeiten kann...

Danke
BX

\documentclass{article}
\usepackage{tikz, ifthen, calc}
\newcounter{mySum}
\def\offset{0}
\def\xAmount{1}

\newcommand{\drawBalls}[1]{
  \begin{tikzpicture}
  \foreach \x/\mytext/\mycolor in {#1}{
\setcounter{mySum}{\x + \offset};
  \ifthenelse{\value{mySum} >\xAmount}{\def\currentX{\x+\offset-10}}{\def\currentX{\x + \offset}};
  \node[
    circle,  
    shading=ball, 
    ball color=\mycolor,
    minimum width=1cm, 
    text=white, 
    font=\itshape
  ] (ball) at (\currentX,0) {\mytext};}
  \end{tikzpicture}
}

\begin{document}
\drawBalls{1/Rot/red,3/Gelb/yellow,5/Gruen/green}

%%%%%%%%%%%%%%%%%%%%% Problem %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\drawBalls{1.5/Text/red,3.4/in/yellow,5.7/Kugel/blue} float Values (i.e: .3) are not working...



\end{document}

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Re: \setcounter \ifthenelse und Wertübergabe als float

Beitrag von Bartman »

Teste mal folgendes:
\documentclass{article}
\usepackage{tikz}

\pgfmathsetmacro{\mySum}{0}
\newcommand\offset{0}
\newcommand\xAmount{1}

\newcommand{\drawBalls}[1]{
  \begin{tikzpicture}
  \foreach \x/\mytext/\mycolor in {#1}{
    \pgfmathsetmacro{\mySum}{\x + \offset}
    \pgfmathsetmacro{\currentX}{\mySum > \xAmount ? \mySum-10 : \mySum}
    \node[
      circle,  
      shading=ball, 
      ball color=\mycolor,
      minimum width=1cm, 
      text=white, 
      font=\itshape
    ] (ball) at (\currentX,0) {\mytext};
  }
  \end{tikzpicture}
}

\begin{document}
\drawBalls{1/Rot/red,3/Gelb/yellow,5/Grün/green}\par
\drawBalls{1.5/Text/red,3.4/in/yellow,5.7/Kugel/blue}
\end{document}

byxx
Forum-Anfänger
Forum-Anfänger
Beiträge: 10
Registriert: So 17. Jan 2021, 12:50

Re: \setcounter \ifthenelse und Wertübergabe als float

Beitrag von byxx »

Hallo Bartman,
ist schick, ganz klar.
Kurzschreibweise einer ifthenelse? Wunderbar!

Warum funktionierte nach der \foreach nicht:
\ifthenelse{\x + \offset >\xAmount} {True}{False}
THX
BX

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Re: \setcounter \ifthenelse und Wertübergabe als float

Beitrag von Bartman »

Laut der Dokumentation des Pakets werden Zahlen verglichen, aber keine mathematischen Ausdrücke. Mit der Hilfe des Befehls \numexpr lässt sich in diesem Fall auch diese Hürde nehmen.
\ifthenelse{\numexpr\x + \offset\relax >\xAmount} {True}{False}
Die Änderung hätte Dir nichts gebracht, weil nicht nur der Zähler, sondern auch die Befehle \ifthenelse und \numexpr auf ganze Zahlen beschränkt sind.

byxx
Forum-Anfänger
Forum-Anfänger
Beiträge: 10
Registriert: So 17. Jan 2021, 12:50

Re: \setcounter \ifthenelse und Wertübergabe als float

Beitrag von byxx »

Großer Dank!!

Antworten