我想要按照下图的方式对齐三棵树:
我现在有以下代码:
\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
。
使用
tikz
的baseline
选项,该选项必须作为环境的参数给出。这可以通过更改的选项tikzpicture
来实现(在任何节点,但可能在序言中)forest
begin draw
使用 的
pgf
,它可以通过使用的选项从'\pgfsetbaselinepointlater
注入(同样,在任何节点,但可能在序言中)。forest
forest
tikz
在您的示例中,使用这种样式定义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}