ツリー内の兄弟ノード間の間隔を広げる

ツリー内の兄弟ノード間の間隔を広げる

次のコマンドでツリーを描画します:

\documentclass{article}
\usepackage{forest}

\begin{document}
\begin{forest}
[S [a]  [S [S [a] [S  [$\varepsilon$ ]] [b] ] [S [a] [S  [$\varepsilon$ ]] [b] ] ]   [b] ]
\end{forest}

\end{document}

私が実現したいのは、2 番目のレベルの「a」が、他のすべてのノードに関して最も左のノードになることです。また、2 番目のレベルの「b」は、他のすべてのノードに関して最も右のノードである必要があります。

答え1

ご覧くださいhttp://ctan.space-pro.be/tex-archive/graphics/pgf/contrib/forest/forest-doc.pdf10ページにあります。 を使用できますs sep=20mm

オプション s は、ノードとその親の (ノード) アンカー間の距離を制御します。

ここに画像の説明を入力してください

\documentclass{article}
\usepackage{forest}

\begin{document}
\begin{forest}
[S,s sep=20mm, [a]  [S [S [a] [S  [$\varepsilon$ ]] [b] ] [S [a] [S  [$\varepsilon$ ]] [b] ] ]   [b] ]
\end{forest}

\end{document}

ここに画像の説明を入力してください

答え2

ルート ノードはレベル 0 にあることに注意してください。あなたが受け入れた回答から判断すると、「第 2 レベル」とはレベル 2 ではなくレベル 1 を意味していると想定します。

これを実現する最善の方法は、おそらく、fit=bandルート ノードの子、つまりレベル 1 の子に を使用することです。これにより、第 1 レベルのノード間の広がりをハード コーディングする必要がなくなります。ツリーにコンテンツが追加されると、Forest は自動的に間隔を広げて、レベル 1 の最初と最後の子の下に子がないため垂直方向のスペースを空けておきます。

デフォルトでは、 Forest は を使用しますfit=tightfit=rectangleおよびfit=bandは代替手段です。 は、fit=bandノード自身の子孫以外のものが、その下の垂直空間 (南北に成長するツリー内) に侵入するのを防ぎます。

\documentclass[border=10pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
  [S, for children={fit=band} [a]  [S [S [a] [S  [$\varepsilon$ ]] [b] ] [S [a] [S  [$\varepsilon$ ]] [b] ] ]   [b] ]
\end{forest}
\end{document}

異なるフィット

関連情報