PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Baumdiagramm Linguistik



XRay
01-09-2013, 19:00
Hallo liebes Forum,

ich grüble momentan an einem 'einfachen' Baumdiagramm, das aber bis jetzt immer noch nicht so aussieht wie es soll. Ich habe verschiedene Dokumentationen durchforstet und die Suchfunktion benutzt. Das Problem besteht weiterhin.

Die Grafik zeigt das Diagramm, wie es einmal aussehen soll. Die PDF Datei, wie es aussieht.

1. Problem, der linke und rechte 'Arm' des Baumes soll von der Diagrammwurzel direkt ganz nach unten laufen ohne unterbrochen zu werden.

2. Die Knoten in der Mitte sollen jeweils auch Arme aufweisen, die wie in 1. beschrieben bis unten durchlaufen.

Ich würde mich sehr freuen, wenn mir jemand helfen könnte.

Liebe Grüße :)

esdd
02-09-2013, 16:08
Hier sind mal 3 Lösungsvorschläge:


\documentclass[parskip=half]{scrartcl}
\usepackage{tikz-qtree,tikz-qtree-compat}
\begin{document}

\begin{tikzpicture}[level 3/.style={sibling distance=2cm},level distance=12mm]
\node(Xn){X\textsuperscript{n}}
child {node{X\textsuperscript{n-1}}
child {node(dots){$\ldots$}
child {node(dots1){$\ldots$}edge from parent[draw=none]}
child {node{X\textsuperscript{0}}}
child {node(dots2){$\ldots$}edge from parent[draw=none]}
}
}
;
\path (Xn)edge(dots1)edge(dots2);
\end{tikzpicture}

\begin{tikzpicture}[level 3/.style={sibling distance=2cm},level distance=12mm]
\Tree [.\node(Xn){X^{n}};
[.X^{n-1}
[. $\ldots$
\edge[draw=none];\node(dots1){ $\ldots$ };
X^{0}
\edge[draw=none];\node(dots2){ $\ldots$ };
]
]
]
\path (Xn)edge(dots1)edge(dots2);
\end{tikzpicture}


\tikzset{level distance=12mm,frontier/.style={distance from root=36mm},sibling distance=2cm}
\Tree [.X^{n}
$\ldots$
[.X^{n-1}
[. $\ldots$ X^{0} ]
]
\edge[draw]; $\ldots$
]

\end{document}

Bei den ersten beiden werden die Knoten einfach im untersten Level eingefügt und die entsprechenden Verbindungen zum obersten erst hinterher gezeichnet. Beim dritten Vorschlag wird der Abstand des jeweils untersten Knoten zum obersten festgelegt.

Gruß
Elke

klops
02-09-2013, 16:15
Es ist übrigens vorteilhaft, kurzen Code wie in Deinem Beispiel, direkt in den Beitrag einzubinden, statt ihn anzuhängen, weil er dann direkt zu sehen ist. Natürlich sollte man den Code im Beitrag dann als solchen markieren (http://www.mrunix.de/forums/misc.php?do=bbcode). Das geht in der erweiterten Ansicht auch einfach mit Hilfe des #-Knopfes in der Toolbar.

http://www.texample.net/tikz/examples/ kennst Du? Dort gibt es auch Beispiele für Bäume (http://www.texample.net/tikz/examples/feature/trees/) unterschiedlichster Art.

XRay
02-09-2013, 18:49
http://www.texample.net/tikz/examples/ kennst Du? Dort gibt es auch Beispiele für Bäume (http://www.texample.net/tikz/examples/feature/trees/) unterschiedlichster Art.

Kenn ich. Konnte mir aber bei meinem Problem nicht weiterhelfen. Danke für die Erklärung mit dem Code, werde ich beim nächsten mal so machen.

@esdd: Vielen Dank. Das mit den seitlichen 'langen Armen' sieht schon mal so aus, wie es soll :) Jetzt müsste ich bloß noch rauskriegen, wie das funktioniert, dass alle mittleren Knoten auch solche 'langen Arme' aufweisen.

esdd
02-09-2013, 22:05
Das Prinzip lässt sich doch jeweils auf die anderen Knoten übertragen:


\documentclass[parskip=half]{scrartcl}
\usepackage{tikz-qtree,tikz-qtree-compat}
\begin{document}

\begin{tikzpicture}[level 3/.style={sibling distance=1cm},level distance=12mm,font=\strut]
\node(P0){X\textsuperscript{n}}
child {node(P1){X\textsuperscript{n-1}}
child {node(P2){$\ldots$}
child {node(Cl0){$\ldots$}edge from parent[draw=none]}
child {node(Cl1){$\ldots$}edge from parent[draw=none]}
child {node(Cl2){$\ldots$}edge from parent[draw=none]}
child {node{X\textsuperscript{0}}}
child {node(Cr2){$\ldots$}edge from parent[draw=none]}
child {node(Cr1){$\ldots$}edge from parent[draw=none]}
child {node(Cr0){$\ldots$}edge from parent[draw=none]}
}
}
;
\foreach \l in {0,...,2}\path (P\l)edge(Cl\l)edge(Cr\l);
\end{tikzpicture}

\begin{tikzpicture}[level 3/.style={sibling distance=0.5cm},level distance=12mm,font=\strut]
\Tree [.\node(P0){X^{n}};
[.\node(P1){X^{n-1}};
[.\node(P2){$\ldots$};
\edge[draw=none];\node(Cl0){ $\ldots$ };
\edge[draw=none];\node(Cl1){ $\ldots$ };
\edge[draw=none];\node(Cl2){ $\ldots$ };
X^{0}
\edge[draw=none];\node(Cr2){ $\ldots$ };
\edge[draw=none];\node(Cr1){ $\ldots$ };
\edge[draw=none];\node(Cr0){ $\ldots$ };
]
]
]
\foreach \l in {0,...,2}\path (P\l)edge(Cl\l)edge(Cr\l);
\end{tikzpicture}


\tikzset{level distance=12mm,frontier/.style={distance from root=36mm}}
\Tree [.X^{n}
$\ldots$
[.X^{n-1}
$\ldots$
[. $\ldots$
$\ldots$
X^{0}
\edge[draw]; $\ldots$
]
\edge[draw]; $\ldots$
]
\edge[draw]; $\ldots$
]

\end{document}
Gruß
Elke

XRay
03-09-2013, 09:45
Das Prinzip lässt sich doch jeweils auf die anderen Knoten übertragen

Hallo Elke,

bei mir hat es letzendlich an der Klammersetzung gekrankt. Nun sieht es super aus.

Vielen Dank an alle, die mir helfen konnten.

edit.09.09.2013:
Nun hat sich ein neues Problem ergeben. Ich brauche noch eine Vorlage für einen Baum, bei dem die rechten Äste senkrecht nach unten verlaufen und die linken zur Seite abgehen.



\documentclass[a4paper,12pt]{scrreprt}
\usepackage{tikz-qtree}

\begin{document}

%Ausgangslage
\Tree [.XP [.X' [.X' [.X ] ] ] ]

%so soll es ergänzt werden, dabei soll obige Struktur beibehalten werden
\Tree [.XP [.a ][.X' [.b ] [. X' [.c ] [.X ] ] ] ]

\end{document}

esdd
09-09-2013, 14:59
Mir ist jetzt nicht klar, ob die linken Äste wieder bis ganz unten gehen sollen? Hier ist deshalb jeweils ein Vorschlag mit den Bäumen aus tikz, da mir nicht klar ist, ob und wie man das mit qtree realisieren kann:


\documentclass[a4paper,12pt]{scrreprt}
\usepackage{tikz}
\usetikzlibrary{trees}

\begin{document}

\begin{tikzpicture}[font=\strut,%
grow via three points={one child at (0,-1.5) and two children at (-1,-1.5) and (0,-1.5)}]
\node{X}
child {node{a}}
child {node{X'}
child {node{g}}
child {node {X'}
child {node {c}}
child {node {X}}
}
}
;
\end{tikzpicture}

\begin{tikzpicture}[font=\strut,%
grow via three points={one child at (0,-1.5) and two children at (-1,-1.5) and (0,-1.5)}]
\node(P0){X\textsuperscript{n}}
child {node(P1){X'}
child {node(P2){X'}
child {node(Cl0){a}edge from parent[draw=none]}
child {node(Cl1){b}edge from parent[draw=none]}
child {node(Cl2){c}edge from parent[draw=none]}
child {node{X}}
}
}
;
\foreach \l in {0,...,2}\path (P\l)edge(Cl\l);
\end{tikzpicture}

\end{document}
Gruß
Elke

XRay
09-09-2013, 20:38
Hallo,

diesmal sollten die 'Kinder' nicht bis nach unten. Aber wenn ich es doch mal brauchen sollte, habe ich jetzt auch den Code dafür. :)

Bei normalen, kleinen Bäumen geht das mit qtree schneller, da ich dort besser mit den Klammern zurechtkomme.


Edit:

Ist es bei dem ersten Beispiel auch möglich, die Abstände zwischen den Leveln/Siblings zu verändern? Habe es mit level/silbling distance=... versucht, aber an den Abständen hat sich nichts getan, weder für den ganzen Baum, noch wenn ich das für ein Level einzeln angelegt habe.

Edit 2:

Habe es nun mit xshift für die einzelnen Kinder realisiert. Funktioniert einwandfrei.

esdd
11-09-2013, 22:48
Die Abstände werden in beiden Beispielen mit der Option


grow via three points={one child at (0,-1.5) and two children at (-1,-1.5) and (0,-1.5)}

eingestellt. Gibt es nur ein Kind, dann wird es bei (0,-1.5) eingefügt und bei zwei Kindern wird das erste bei (-1,-1.5) und das zweite bei (0,-1.5) eingefügt. Sind noch mehr Kinder vorhanden, so wird deren Platzierung aus diesen drei Koordinaten ermittelt.

Genauer (und besser) ist das im Kapitel 53 Tree Library des pgfmanual (http://texdoc.net/texmf-dist/doc/generic/pgf/pgfmanual.pdf) erklärt.

Gruß
Elke