次のコマンドでツリーを描画します:
\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=tight
。fit=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}