我正在使用fairly nice empty nodes
这个问题的风格:使用 Forest 减少树中节点之间的距离创建一个空节点的树,该树比使用nice empty nodes
生成的树要小。但是,一个节点只是相当不错。有解决方案吗,或者这就是使用fairly
作为样式名称的一部分的原因。
\documentclass{minimal}
\usepackage{forest}
\forestset{
fairly nice empty nodes/.style={
delay={where content={}{shape=coordinate,for parent={
for children={anchor=north}}}{}}
, angled/.style={content/.expanded={$<$\forestov{content}$>$}}
}}
\useforestlibrary{linguistics}
\forestapplylibrarydefaults{linguistics}
\begin{document}
\begin{forest} fairly nice empty nodes, for tree={l sep-=.2em,l=0}
[CP
[C, fit=band]
[TP
[T, fit=band]
[\textit{v}P
[DP\\(EA), fit=band]
[{}
[VP
[DP\\(IA), fit=band]
[V]]
[\textit{v}]]]]]
\end{forest}
\end{document}
输出如下。问题是,分支到 VP 的节点和五树枝太高,导致树变得有点不对称。我喜欢实现的是节点之间的直线五P 通过空节点到达节点五。
答案1
问题是,当你无法拥有一切时,你准备放弃什么。使用直线(或几乎直线)会使树更宽。使用直线fit=band
会使树很多更宽的。
fairly nice empty nodes
通过不保持边缘之间的角度恒定,牺牲了直边。(它放弃了calign=fixed edge angles
。)
另一种可能性是pretty nice empty nodes
牺牲完美的笔直边缘。(它放弃了shape=coordinate
。)然而,有了fit=band
,这会使树非常宽,因为这是保持边缘(几乎)笔直的唯一方法。
这些样式是必需的,因为树不能使用,nice empty nodes
因为在这种情况下,该样式需要除以零,而 TikZ 无法做到这一点。但是,nice empty nodes
与 结合也会使树变宽fit=band
。因此fairly
/pretty
权衡不是导致树中节点看起来平庸的原因。没错,nice empty nodes
会使用直边,但使用fit=band
,树最终会变得非常宽。
这不是软件的限制,而是由于现实本身的性质。你遇到的限制是几何限制,而不是样式或包装限制。
这里有一种使用 的可能性pretty nice empty nodes
,这可能不是您想要的,但它演示了如何创建具有(几乎)直边的紧凑树。这里牺牲的是fit=band
。
\documentclass[border=10pt,multi,tikz]{standalone}
\usepackage{forest}
\forestset{%
pretty nice empty nodes/.style={
for tree={
calign=fixed edge angles,
parent anchor=children,
delay={if content={}{
inner sep=0pt,
edge path={\noexpand\path [\forestoption{edge}] (!u.parent anchor) -- (.children)\forestoption{edge label};}
}{}}
},
}
}
\begin{document}
\begin{forest}
pretty nice empty nodes,
for tree={%
l sep-=.2em,
l=0,
align=center,
}
[CP
[C]
[TP
[T]
[\textit{v}P
[DP\\(EA)]
[
[VP
[DP\\(IA)]
[V]
]
[\textit{v}]
]
]
]
]
\end{forest}
\end{document}