Изменение размера пустых узлов в лесу

Изменение размера пустых узлов в лесу

Я хочу установить следующую картинку:

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

Следующий forestкод почти делает это:

\documentclass{article}

\usepackage{forest}


\begin{document}

\begin{forest}
for tree={fit=band,parent anchor=south,child anchor=north}
[ForceP
        []
        [Force$'$
                [Force$^0$]
                [TopP
                        []
                        [Top$'$
                                [Top$^0$]
                                [FocP
                                        []
                                        [Foc$'$
                                                [Foc$^0$]
                                                [TopP
                                                        []
                                                        [Top$'$
                                                                [Top$^0$]
                                                                [FinP
                                                                        []
                                                                        [Fin$'$
                                                                                [Fin$^0$]
                                                                                [IP/AgrSP]]]]]]]]]]]
\end{forest}


\end{document}

Однако дуги, идущие влево, не имеют прямого угла:

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

Теперь вопрос: нужно ли мне добавлять \struts ко всем empty nodes или есть более приятный способ сказать, что empty nodes имеют ту же высоту, что и их сестры справа?

решение1

Вот альтернативный метод, который мне кажется лучше, когда я также добавляю стиль sn edgesк дереву. Вместо того, чтобы использовать nice empty nodesтрюк с установкой shapeв coordinate​​, это создает фантомное содержимое для пустых узлов (просто X) и использует стандартную высоту текста для всех узлов в дереве, чтобы все было выровнено.

\documentclass[tikz,border=5pt]{standalone}
\usepackage{forest,calc}

\begin{document}
\newlength\mytextheight
\settototalheight{\mytextheight}{XpX$^0$X$'$}
\begin{forest}
  delay={
    where content={}{
      content={\phantom{X}}
    }{},
  },
  for tree={
    text height=\mytextheight,
    fit=band,
    parent anchor=south,
    child anchor=north,
  }
  [ForceP
    []
    [Force$'$
      [Force$^0$]
      [TopP
        []
        [Top$'$
          [Top$^0$]
          [FocP
            []
            [Foc$'$
              [Foc$^0$]
              [TopP
                []
                [Top$'$
                  [Top$^0$]
                  [FinP
                    []
                    [Fin$'$
                      [Fin$^0$]
                      [IP/AgrSP]
                    ]
                  ]
                ]
              ]
            ]
          ]
        ]
      ]
    ]
  ]
\end{forest}
\end{document}

более приятные пустые узлы?

решение2

Вы можете определить nice empty nodesстиль, как на странице 52 руководства forest.

\documentclass{article}

\usepackage{forest}
\forestset{
nice empty nodes/.style={
for tree={calign=fixed edge angles},
delay={where content={}{for parent={for children={anchor=north}}}{}}
}}

\begin{document}

\begin{forest}
for tree={fit=band}
[ForceP, nice empty nodes
        []
        [Force$'$
                [Force$^0$]
                [TopP
                        []
                        [Top$'$
                                [Top$^0$]
                                [FocP
                                        []
                                        [Foc$'$
                                                [Foc$^0$]
                                                [TopP
                                                        []
                                                        [Top$'$
                                                                [Top$^0$]
                                                                [FinP
                                                                        []
                                                                        [Fin$'$
                                                                                [Fin$^0$]
                                                                                [IP/AgrSP]]]]]]]]]]]
\end{forest}


\end{document}

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

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