PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bäume zeichnen



Helveticus
12-11-2012, 16:03
Hallo

Ich konnte in latex erfolgreich einen Baum mit Knoten zeichnen, allerdings habe ich 3 Probleme, die ich nicht lösen kann (Siehe Screenshot im Anhang).

1. Ich bekomme die Nummerierung der Knoten 1,2,... nicht hin.

2. Ich bekomme die geschrichtelte Linien zwischen den zwei Bäumen nicht hin.

3. Ich bekomme den Pfeil nicht hin, bzw. der linke und der rechte Baum sollten durch den Pfeil verbunden werden, also alles sollte eine Grafik sein (oder vielleicht als zwei figures machen?).

Kann da jemand helfen?

Einen schönen Abend wünsche ich.

hakaze
12-11-2012, 16:14
Gib jedem Knoten (node), den du im Baum zeichnest, auch einen Bezeichner in runden Klammern mit. Damit werden die Koordinaten des Knoten unter diesem Bezeichner gespeichert.

Dann kannst du auch nachträglich mit draw noch Linien von Bezeichner zu Bezeichner ziehen oder auch neue Knoten mit anderer Beschriftung (und event. anchor=south o.ä.) an die ursprünglichen Koordinaten setzen. Siehe hier (http://tex.stackexchange.com/a/1819/17198) und hier mit Bildern (http://tex.stackexchange.com/a/70076/17198).

esdd
13-11-2012, 13:31
Hallo,
warum gibst du kein Minimabeispiel an, d.h. zeigst wie du den Baum selbst gezeichnet hast? Du gibst ja nicht mal an, ob du tikz dazu verwendest.
Hier ist trotzdem ein Vorschlag mit tikz:

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[%
every node/.style={draw,circle,inner sep=1pt},
every label/.style={font=\scriptsize,draw=none}]
\node[label=above:1](1A){A}
child{node[label=above:2]{C}
child{node[label=above left:4]{D}}}
child{node[label=above:3](1B){B}};
\node[xshift=4cm,label=above:1](2A){A}
child[missing]
child{node[label=above:2](2B){B}}
child{node[label=above:3]{C}}
child{node[label=above:4]{D}};
\draw[bend left,dashed](1A)to(2A);
\draw[bend right,dashed](1B)to(2B);
\draw[->]([yshift=0.9cm,xshift=0.3cm]1B.east)--([yshift=0.9cm,xshift=-0.3cm]2B.west);
\end{tikzpicture}
\end{document}
Gruß
Elke

Helveticus
15-11-2012, 12:30
Sorry, ich hatte ihn in tikz gezeichnet.

Vielen Dank. Das ist perfekt. Wie ich schon sagte, du bist meine Heldin. ;)

Edit: Es ist doch noch ein Problem aufgetaucht. Ich habe folgenden Code.


\begin{tikzpicture}[%
every node/.style={draw,circle,inner sep=1pt}]
\node{A}
child{node{B}
child{node{C}}
child{node{D}}
child{node{E}}}
child{node{F}
child{node{G}}
child{node{H}}};
\end{tikzpicture}

Das Resultat ist im Anhang. Wie kann man da verhindern, dass sich die Kanten so unschön überschneiden?

Helveticus
15-11-2012, 15:03
Ich bin schon wieder ratlos. Ich hab folgendes.


\begin{tikzpicture}[%
every node/.style={draw,circle,inner sep=1pt}]
\node{A}
child{node{B}
child{node{C}}
child{node{D}}}
child{node{E}
child{node{F}}
child{node{G}}};
\end{tikzpicture}

Die gewünschte Darstellung wäre right.jpg, allerdings kriege ich wrong.jpg.

Was mach ich da falsch? Ich seh den Fehler nicht. Node A enthält ja die Kinder B und E, wobei B ja die Kinder C und D enthält und E die Kinder F und G.

esdd
15-11-2012, 15:40
Hallo,

du kannst für jedes Level einen Abstand vorgeben:


\documentclass{standalone}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[%
every node/.style={draw,circle,inner sep=1pt},
level 1/.style={sibling distance=30mm},
level 2/.style={sibling distance=15mm}]
\node{A}
child{node{B}
child{node{C}}
child{node{D}}}
child{node{E}
child{node{F}}
child{node{G}}};
\end{tikzpicture}
\end{document}
Das ist aber im Manual auch ausführlich beschrieben.

Gruß
Elke