Рисование простых абстрактных синтаксических деревьев с помощью леса, чтобы они не выглядели странно

Рисование простых абстрактных синтаксических деревьев с помощью леса, чтобы они не выглядели странно

У меня проблема с созданием некоторых абстрактных синтаксических деревьев с помощью пакета Forest. Как видно ниже, между братьями и сестрами есть большой разрыв, хотя в таком разрыве нет необходимости, но я не могу найти ничего в документации по этой проблеме.

Вот что я могу создать в TeX

Ниже вы можете увидеть, как я создал текущее дерево. Я думаю, мне нужно как-то выровнять узлы по левому краю, если я хочу получить дерево, похожее на мой рисунок внизу этого поста.

\begin{forest}
for tree={
    before typesetting nodes={content=\texttt{#1}}
}
[<regexp>, s sep=0pt
    [(seq]
    [<regexp>, edge={draw=none}
        [(atom 1)]
    ]
    [<regexp>), edge={draw=none}
        [(seq]
        [<regexp>, edge={draw=none}
            [(atom 2)]
        ]
        [<regexp>), edge={draw=none}
            [(seq]
            [<regexp>, edge={draw=none}
                [(atom 3)]
            ]
            [<regexp>), edge={draw=none}]
        ]
    ]
]
\end{forest}

Вот что я ищу, но не могу создать:

Рисунок

решение1

Я думаю, вам нужна for treeопция calign=first. Т.е.

\documentclass{book}
\usepackage[linguistics]{forest}
\begin{document}
\begin{forest}
for tree={
    before typesetting nodes={content=\texttt{#1},
    calign=first}
}
[<regexp>, s sep=0pt
    [(seq]
    [<regexp>, edge={draw=none}
        [(atom 1)]
    ]
    [<regexp>), edge={draw=none}
        [(seq]
        [<regexp>, edge={draw=none}
            [(atom 2)]
        ]
        [<regexp>), edge={draw=none}
            [(seq]
            [<regexp>, edge={draw=none}
                [(atom 3)]
            ]
            [<regexp>), edge={draw=none}]
        ]
    ]
]
\end{forest}
\end{document}

Выходы:

введите описание изображения здесь

Связанный контент