Ich finde diese Frage von Darnol interessant und möchte auch hier mal nach Lösungen fragen - vorzugweise mit TikZ, gern mit Alternativen.

Wie kann man diese Abbildung zeichnen?

Take it or leave it

Meine Ideen: TikZ chain (vllt. übertrieben hier), oder nodes in einer Matrix und dann verbinden. Oder tree.

gefragt 18 Mai '14, 12:08

Felix's gravatar image

Felix
1.3k525666
Akzeptiert-Rate: 47%

bearbeitet 18 Mai '14, 12:12

Die Frage interessehalber und nicht drängend. Evtl. schaffe ich auch eine Lösung, dann werde ich sie posten.

(18 Mai '14, 12:09) Felix
1

Was ist denn das für ein Diagramm? Vll. wäre eine passendere Überschrift besser...

(19 Mai '14, 20:26) cis

Mit TikZ und der matrix library. Mit dem Paket caption habe ich die Bildüberschrift angepasst. Um die Schriftart einigermaßen anzugleichen habe ich STIX gewählt (ich bin mir ziemlich sicher, dass das im Bild nicht STIX ist).

Mehr zum Branching innerhalb von \foreach kann man in meiner Antwort auf Wie kann ich bei TikZ ein Schleifenelement ausschließen? nachlesen.

Open in writeLaTeX
\documentclass{article}
\pagestyle{empty}% zum freistellen
\usepackage{tikz,amsmath,caption}
\usepackage{stix}
\captionsetup{labelfont=it,textfont=bf,labelsep=newline,singlelinecheck=false}
\usetikzlibrary{matrix}
\begin{document}
\begin{figure}[ht]
  \newcommand*\myvec[2]{$\begin{pmatrix}#1\cr #2\end{pmatrix}$}
  \centering
  \caption{Take It or Leave It}
  \begin{tikzpicture}[
    auto,% automatic node placement on paths
    dot/.style={draw,fill,circle,inner sep=1pt,label={above:#1}}
    ]
    \matrix (M) [matrix of nodes,row sep=1.5cm,column sep={2cm,between origins}] {
      |[dot=I]|    & |[dot=II]|   & |[dot=I]|    & \dots &[-1.7cm] |[dot=II]|     & |[dot=I]|    \\
      \myvec{1}{0} & \myvec{0}{2} & \myvec{3}{0} &       &         \myvec{0}{N-1} & \myvec{N}{0} \\
    };
    \foreach \i in {1,2,...,6} {
      \if\i4\else
        \if\i6\else
          \pgfmathparse{int(\i+1)}
          \draw (M-1-\i) -- node {Leave} (M-1-\pgfmathresult);
        \fi
        \draw (M-2-\i) -- node {Take} (M-1-\i);
      \fi
    }
    \draw (M-1-6) -- node {Leave} +(2,0) node[below right] {\myvec{0}{N}};
  \end{tikzpicture}
\end{figure}
\end{document}

alt text

Permanenter link

beantwortet 18 Mai '14, 14:23

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

bearbeitet 20 Mai '14, 17:28

@Henri Vielleicht column sep={2cm,between origins} und
\draw (M-1-6) -- node {Leave} +(2,0) node[below right] {\myvec0N};,
damit die waagerechten Striche wie in der Vorlage alle gleich lang sind?

(19 Mai '14, 14:23) esdd
1

Die (hier unnötige) Verwendung von \def und die Eingabe \myvec30 ist nicht gerade gute LaTeX-Praxis... wieso nicht \newcommand* und \myvec{3}{0}?

(19 Mai '14, 20:57) cgnieder

Es wäre verm. auch besser, Definitionen möglichst nicht im Dokument, sondern in der Präambel vorzunehmen. Mag sein, dass eine Ausnahme von der Regel unter gewissen Umständen gerechtfertigt wäre, aber in einem Beispiel ist es IMHO wichtiger auf saubere Trennung von Form und Inhalt zu achten.

(20 Mai '14, 10:02) Bes

@esdd Danke für den Tipp :) @Clemens Ich hab vor kurzem das TeXbook gelesen und bin seitdem auf der Plain TeX Schiene. @Bes Das ist Absicht \myvec soll lokal in dieser figure bleiben.

(20 Mai '14, 17:29) Henri

Ich habe mich auch daran versucht. Elkes Lösung ist kurz und clever. Durch die Schleifen kann man einfach Änderungen an einer Stelle vornehmen (z.B. circle inner sep etwas größer machen) und es wirkt sich auf alles aus, wegen der Schleife. Statt x-mal zu schreiben. Dafür muss man sich in die Schleifen erstmal aufmerksam einlesen.

Ich habe mich auf den "Fußweg" gemacht. Viel mehr Schreibarbeit, aber einfach hintereinander weg. Da Elkes schöne Lösung schon da ist, hier nur mein Anfangsteil der Zeichnung. Immerhin schonmal Stile definiert, sozusagen Makros für die Nodes. In der Weise kann man weiterschreiben mit der Zeichnung. Bei Interesse erweitere ich.

Open in writeLaTeX
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzset{bullet/.style={circle,fill,inner sep=0pt,minimum size=5pt},
         math/.style={execute at begin node=$\displaystyle,
                      execute at end node=$}}
\begin{document}
\begin{tikzpicture}
  \path node (1) [bullet, label=I]                    {}
        node (2) [bullet, label=II, right = 5em of 1] {}
        node (3) [bullet, label=I,  right = 5em of 2] {}
        node (4) [right = 5em of 3]                   {}
        (1) edge node[above] {Leave} (2)
        (2) edge node[above] {Leave} (3)
        (3) edge node[above] {Leave} (4)
        node [math] (5) [below = 5em of 1] {\binom{1}{0}}
        (1) edge node[left] {Take} (5);
\end{tikzpicture}
\end{document}

Anfang der Zeichnung

Permanenter link

beantwortet 18 Mai '14, 13:21

Felix's gravatar image

Felix
1.3k525666
Akzeptiert-Rate: 47%

Hier ist ein Vorschlag, bei dem das Grundmuster in einer \foreach Schleife gezeichnet wird. Die Beschriftung rechts und die Füllpunkte werden am Ende eingefügt:

Open in writeLaTeX
\documentclass[margin=5mm]{standalone}
\usepackage{amsmath}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[thick]
\def\abstand{1.5}
\foreach \x/\r/\o/\u in {
    0/I/1/0,
    1/II/0/2,
    2/I/3/0,
    4/II/0/N-1,
    5/I/N/0}
  {
    \node[circle,fill,inner sep=1pt,label={[label distance=2pt]above:\r}]
        (p\x)at({\x*\abstand},0){};
    \draw (p\x.center)--node[left]{Take}
        +(0,-\abstand)node[below]{$\displaystyle\binom{\o}{\u}$};
    \draw (p\x.center)--node[above]{Leave}+(\abstand,0);
  }
\path(p5)+(\abstand,0) node[below right]{$\displaystyle\binom{0}{N}$};
\foreach \i in {1,2,3}
  \path(p4)+({-\i*0.25*\abstand},0)node[circle,fill,inner sep=.6pt]{};
\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 18 Mai '14, 12:53

esdd's gravatar image

esdd
17.7k254256
Akzeptiert-Rate: 62%

bearbeitet 18 Mai '14, 15:20

Felix's gravatar image

Felix
1.3k525666

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×728
×117
×76
×14

gestellte Frage: 18 Mai '14, 12:08

Frage wurde gesehen: 11,687 Mal

zuletzt geändert: 20 Mai '14, 17:29