Wie kann man in TikZ Fallunterscheidungen vornehmen?

Beispielmuster:

Wenn n gleich 1 dann "eins"

Wenn n gleich 2 dann "zwei"

Wenn n ... dann ... (Ausgab oder weitere Routine)

Sonst ... (Ausgab oder weitere Routine)

gefragt 11 Nov '15, 22:43

rix's gravatar image

rix
3452419
Akzeptiert: 93%

bearbeitet 11 Nov '15, 22:47

1

Könntest Du bitte ein Beispiel angeben, wie das verwendet werden soll?

(12 Nov '15, 05:10) saputello

Eine Möglichkeit ist ifthenelse als mathematische Funktion.

Open in Online-Editor
\documentclass{article}
\usepackage{tikz}
\newcommand{\test}{%
  \pgfmathparse{
    ifthenelse(\n==1,"eins",
    ifthenelse(\n==2,"zwei",
    ifthenelse(\n==3,"drei",
                     "was anderes"))}
  \pgfmathresult}
\begin{document}
\begin{tikzpicture}
  \foreach \n in {1,...,4}
    \node at (0,-\n) {\test};
\end{tikzpicture}
\end{document}

Die Fallunterscheidung lässt sich in \pgfmathparse noch kürzer schreiben:

Open in Online-Editor
\pgfmathparse{
   \n==1 ? "eins" :
  (\n==2 ? "zwei" :
  (\n==3 ? "drei" :
           "was anderes"))}

Ausgabe des Beispiels:

Ausgabe

Eine alternative if ... then ... else ... Syntax bietet tikzmath:

Open in Online-Editor
\usetikzlibrary{math}
\newcommand{\test}{%
  \tikzmath{
     if \n==1
       then { let \ausgabe = eins;}
     else {
       if \n==2
         then { let \ausgabe = zwei;}
       else {
         let \ausgabe = was anderes;
       };
     };
  }%
  \ausgabe}
Permanenter link

beantwortet 12 Nov '15, 01:50

stefan's gravatar image

stefan ♦♦
5.8k12134

bearbeitet 12 Nov '15, 02:02

Es kommt sehr darauf an, welche Werte tatsächlich auftreten können und wozu das Ergebnis verwendet werden soll. Wenn die Fallunterscheidung nur natürliche Zahlen (einschl. 0) umfassen muss, dass kann man unabhängig von tikz das TeX-Primitv \ifcase für die Fallunterscheidung verwenden:

Open in Online-Editor
\documentclass{article}
\usepackage{tikz}
\newcommand{\test}{%
  \ifcase \n
    null%
  \or
    eins%
  \or
    zwei%
  \or
    drei%
  \else
    was anderes%
  \fi
}
\begin{document}
\begin{tikzpicture}
  \foreach \n in {1,...,4}
    \node at (0,-\n) {\test};
\end{tikzpicture}
\end{document}
Permanenter link

beantwortet 12 Nov '15, 05:10

saputello's gravatar image

saputello
18.4k22352

expl3 bietet die Funktion \int_case:nnTF an, mit welcher man (vollständig expandierbar) beliebige Fälle unterscheiden kann.

Open in Online-Editor
\documentclass{article}
\usepackage{tikz,xparse}
\ExplSyntaxOn

\DeclareExpandableDocumentCommand \test { m }
 {
  \int_case:nnF { #1 }
   {
    { 1 } { eins }
    { 2 } { zwei }
    { 3 } { drei }
   }
   { was ~ anderes }
 }

\ExplSyntaxOff
\begin{document}
\begin{tikzpicture}
  \foreach \n in {1,...,4}
    \node at (0,-\n) {\test{\n}};
\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 24 Jan, 17:10

Henri's gravatar image

Henri
10.0k31730

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×492
×2
×1
×1
×1

Frage gestellt: 11 Nov '15, 22:43

Frage wurde angeschaut: 1,515 Mal

Zuletzt aktualisiert: 24 Jan, 17:10