Я рисую дерево с помощью этой команды:
\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}
Я хочу, чтобы "a" на втором уровне был самым левым узлом по отношению ко всем остальным узлам. Также "b" на втором уровне должен быть самым правым узлом по отношению ко всем остальным узлам.
решение1
Посмотрите наhttp://ctan.space-pro.be/tex-archive/graphics/pgf/contrib/forest/forest-doc.pdfна странице 10. Вы можете использовать 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. Судя по принятому вами ответу, я предполагаю, что под «вторым уровнем» вы имели в виду уровень 1, а не уровень 2.
Лучший способ добиться этого — использовать fit=band
для дочерних узлов корневого узла, т. е. тех, которые находятся на уровне 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}