
수평(사각형) 모서리가 있는 트리를 쉽게 만들 수 있습니다 tikz-qtree
(MWE 참조). 그러나 이 forest
패키지는 내 목적에 있어서 훨씬 뛰어난 대안입니다. 그러나 포리스트에서 사각형 모서리가 있는 수평 또는 수직 트리를 수행하려는 모든 시도는 무시되거나 컴파일 실패로 이어집니다(예: \tikzset
포리스트 트리에 선 삽입). 이것이 가능한가?
여기에서 도움의 손길을 주시면 매우 감사하겠습니다.
\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}
답변1
\begin{forest} for tree={edge path=<your path>}}
당신은 (! 없이 ) 해야 합니다 []
.
거리를 약간 조정했습니다. 예를 들어 고정 거리가 아닌 레벨 거리의 절반을 사용하는 것이 더 좋습니다.
내 것을 사용할 수도 있습니다.paths.ortho
라이브러리( tikzlibarypaths.ortho.code.tex
및 둘 다 필요) 대신 tikzlibarypaths.ortho.tex
사용할 수 있습니다 .|-|
--
암호
\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}
산출
답변2
edges
현재 Forest에서는 라이브러리를 로드하고 forked edges
트리의 프리앰블에 추가하는 간단한 문제입니다 .
\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}
Forest 버전 1만 있는 경우에는 작동하지 않습니다. 이 경우 업데이트해야 합니다. 이것이 가능하지 않은 경우 \forestove
내부 구현의 일부로 의도된 매크로와 같은 매크로는 업데이트 시 중단될 수 있으므로 최종 사용자 코드에서는 피해야 합니다. 대신, Forest가 이 목적을 위해 제공하는 래퍼를 사용하십시오. 이는 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}