
Puedo hacer fácilmente árboles con bordes horizontales (cuadrados) tikz-qtree
(ver MWE). Sin embargo, el forest
paquete es una alternativa muy superior para mis propósitos. Sin embargo, cada intento de crear árboles horizontales o verticales con bordes cuadrados en el bosque se ignora o conduce a un error de compilación (por ejemplo, insertar la \tikzset
línea en el árbol del bosque). es posible?
Una mano amiga sería muy apreciada aquí.
\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}
Respuesta1
Tienes que prescindir \begin{forest} for tree={edge path=<your path>}}
(¡sin []
!).
Ajusté un poco la distancia, mejor sería usar, por ejemplo, la mitad de la distancia nivelada y no una distancia fija.
También se puede usar mipaths.ortho
biblioteca (necesita ambos tikzlibarypaths.ortho.code.tex
y tikzlibarypaths.ortho.tex
) y estará disponible para su uso |-|
en lugar de --
.
Código
\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}
Producción
Respuesta2
Con Forest actual, es una simple cuestión de cargar la edges
biblioteca y agregarla forked edges
al preámbulo del árbol.
\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}
Si sólo tienes la versión 1 de Forest, esto no funcionará. En ese caso, deberías actualizar. Si eso no es posible, tenga en cuenta que las macros como estas \forestove
están pensadas como parte de la implementación interna y deben evitarse en el código del usuario final, ya que es probable que se rompan durante la actualización. En su lugar, utilice los envoltorios que Forest proporciona para este propósito, que tienen muchas más probabilidades de sobrevivir a cualquier cambio en las entrañas de Forest.
\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}