
Ich kann problemlos Bäume mit horizontalen (quadratischen) Kanten erstellen tikz-qtree
(siehe MWE). Das forest
Paket ist jedoch für meine Zwecke eine weitaus bessere Alternative. Jeder Versuch, horizontale oder vertikale Bäume mit quadratischen Kanten in forest zu erstellen, wird jedoch entweder ignoriert oder führt zu einem Kompilierungsfehler (z. B. beim Einfügen der \tikzset
Zeile in den forest-Baum). Ist das möglich?
Über eine helfende Hand wäre ich hier sehr dankbar.
\documentclass[10pt,twoside,a4paper]{memoir}
\usepackage{graphicx}
\usepackage{forest}
\usepackage{tikz-qtree}
\begin{document}
\begin{tikzpicture}
\tikzset{edge from parent/.style={draw,edge from parent path={(\tikzparentnode.south)-- +(0,-8pt)-| (\tikzchildnode)}}}
\Tree [.ZZ
[.Bax
[.X
[.Y [.A ] [.B ] ]
[.Z [.C ] [.D ] ] ]
[.F
[.M [.E ] [.F ] ]
[.G [.G ] [.H ] ] ] ]
[.A
[.B
[.S [.I P R T V U ] [.J ] ]
[.I [.K ] [.L ] ] ]
[.M
[.L [.M ] [.N ] ]
[.A [.O ] [.P ] ] ] ] ] ]
\end{tikzpicture}
\begin{forest}
[ZZ
[Bax
[X
[Y [A ] [B ] ]
[Z [C ] [D ] ] ]
[F
[M [E ] [F ] ]
[G [G ] [H ] ] ] ]
[A
[B
[S [I [P][R][T][V][U]] [J ] ]
[I [K ] [L ] ] ]
[M
[L [M ] [.N ] ]
[A [O ] [P ] ] ] ] ] ]
\end{forest}
\end{document}
Antwort1
Sie müssen \begin{forest} for tree={edge path=<your path>}}
(verzichten []
!) auf etwas.
Den Abstand habe ich etwas angepasst, besser wäre beispielsweise der halbe Level-Abstand und kein fester Abstand.
Man kann auch meinepaths.ortho
Bibliothek (benötigt sowohl tikzlibarypaths.ortho.code.tex
als auch ) und muss zur Verwendung anstelle von tikzlibarypaths.ortho.tex
verfügbar sein .|-|
--
Code
\documentclass[10pt,twoside,a4paper]{memoir}
\usepackage{graphicx}
\usepackage{forest}
\usepackage{tikz-qtree}
\begin{document}
\begin{tikzpicture}
\tikzset{edge from parent/.style={draw,edge from parent path={(\tikzparentnode.south)-- +(0,-8pt)-| (\tikzchildnode)}}}
\Tree [.ZZ
[.Bax
[.X
[.Y [.A ] [.B ] ]
[.Z [.C ] [.D ] ] ]
[.F
[.M [.E ] [.F ] ]
[.G [.G ] [.H ] ] ] ]
[.A
[.B
[.S [.I P R T V U ] [.J ] ]
[.I [.K ] [.L ] ] ]
[.M
[.L [.M ] [.N ] ]
[.A [.O ] [.P ] ] ] ] ] ]
\end{tikzpicture}
\begin{forest} for tree={
edge path={\noexpand\path[\forestoption{edge}] (\forestOve{\forestove{@parent}}{name}.parent anchor) -- +(0,-12pt)-| (\forestove{name}.child anchor)\forestoption{edge label};}
}
[ZZ
[Bax
[X
[Y [A ] [B ] ]
[Z [C ] [D ] ] ]
[F
[M [E ] [F ] ]
[G [G ] [H ] ] ] ]
[A
[B
[S [I [P][R][T][V][U]] [J ] ]
[I [K ] [L ] ] ]
[M
[L [M ] [.N ] ]
[A [O ] [P ] ] ] ] ] ]
\end{forest}
\end{document}
Ausgabe
Antwort2
Beim aktuellen Forest müssen Sie lediglich die edges
Bibliothek laden und forked edges
die Präambel des Baums ergänzen.
\documentclass[border=10pt]{standalone}
\usepackage[edges]{forest}
\begin{document}
\begin{forest}
forked edges,
[ZZ
[Bax
[X
[Y [A ] [B ] ]
[Z [C ] [D ] ] ]
[F
[M [E ] [F ] ]
[G [G ] [H ] ] ] ]
[A
[B
[S [I [P][R][T][V][U]] [J ] ]
[I [K ] [L ] ] ]
[M
[L [M ] [.N ] ]
[A [O ] [P ] ] ] ] ] ]
\end{forest}
\end{document}
Wenn Sie nur Version 1 von Forest haben, funktioniert dies nicht. In diesem Fall sollten Sie aktualisieren. Wenn dies nicht möglich ist, beachten Sie, dass Makros wie diese \forestove
als Teil der internen Implementierung vorgesehen sind und im Endbenutzercode vermieden werden sollten, da sie bei der Aktualisierung beschädigt werden können. Verwenden Sie stattdessen die Wrapper, die Forest für diesen Zweck bereitstellt und die mit viel größerer Wahrscheinlichkeit alle Änderungen an den Innereien von Forest überstehen.
\documentclass[border=10pt]{standalone}
\usepackage{forest}% version 1
\begin{document}
\begin{forest}
for tree={
parent anchor=south,
edge path={
\noexpand\path [\forestoption{edge}] (!u.parent anchor) -- ++(0,-5pt) -| (.child anchor)\forestoption{edge label};
}
}
[ZZ
[Bax
[X
[Y [A ] [B ] ]
[Z [C ] [D ] ] ]
[F
[M [E ] [F ] ]
[G [G ] [H ] ] ] ]
[A
[B
[S [I [P][R][T][V][U]] [J ] ]
[I [K ] [L ] ] ]
[M
[L [M ] [N ] ]
[A [O ] [P ] ] ] ] ] ]
\end{forest}
\end{document}