以中心方式对齐多棵森林树木

以中心方式对齐多棵森林树木

我想要按照下图的方式对齐三棵树:

在此处输入图片描述

我现在有以下代码:

\documentclass{minimal}   

\usepackage{forest}

\forestset{
tag/.style={for tree={parent anchor=south, child anchor=north,align=center,base=top},where
  n children=0{}{}}
}


\begin{document}


\hfill
\begin{forest}
tag
[NP
        [John]]
\end{forest}
\hfill
\begin{forest}
tag
[S
        [NP$\downarrow$]
        [VP
                [V
                        [laughs]]]]
\end{forest}
\hfill
\begin{forest}
tag
[VP
        [ADV
                [always]]
        [VP*]]
\end{forest}
\hfill\mbox{}

\end{document}

我知道这个baseline属性,但这并不能真正实现居中。在使用之前,forest我只使用表格,而这个可以自动实现正确的对齐。

答案1

我想到两种无需外部帮助即可实现此目的的方法。两种方法都利用了tikz/pgf在名为 的特殊节点中跟踪图片边界这一事实current bounding box

  1. 使用tikzbaseline选项,该选项必须作为环境的参数给出。这可以通过更改的选项tikzpicture来实现(在任何节点,但可能在序言中)forestbegin draw

  2. 使用 的pgf,它可以通过使用的选项从'\pgfsetbaselinepointlater注入(同样,在任何节点,但可能在序言中)。forestforesttikz

在您的示例中,使用这种样式定义tag(第一种方式是活动的,第二种方式被注释掉):

\forestset{tag/.style={
    for tree={parent anchor=south, child anchor=north,align=center,base=top},where n children=0{}{},
    begin draw/.code={\begin{tikzpicture}[baseline=(current bounding box.center)]},
    %tikz+={\pgfsetbaselinepointlater{\pgfpointanchor{current bounding box}{center}}},
  }}

答案2

寻求adjustbox包裹的帮助valign=m or c(t 代表顶部,b 代表底部)来实现目标。

在此处输入图片描述

代码

\documentclass{minimal}   
\usepackage[export]{adjustbox}
\usepackage{forest}

\forestset{
tag/.style={for tree={parent anchor=south, child anchor=north, align=center, base=top}, where  n children=0{}{}}
}


\begin{document}


\hfill
\adjustbox{valign=c}{
\begin{forest}
tag
[NP
        [John]]
\end{forest}}
\hfill
\adjustbox{valign=c}{
\begin{forest}
tag
[S
        [NP$\downarrow$]
        [VP
                [V
                        [laughs]]]]
\end{forest}}
\hfill
\adjustbox{valign=c}{
\begin{forest}
tag
[VP
        [ADV
                [always]]
        [VP*]]
\end{forest}}
\hfill\mbox{}

\end{document}

相关内容