フォレストパッケージの四角いエッジ

フォレストパッケージの四角いエッジ

水平 (四角い) エッジを持つツリーは簡単に作成できます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}

MWE出力

答え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}

古い森

関連情報