我的 latex 文档中有许多树太大,很难使周围文本的排版看起来好看。因此,我想通过减少节点之间的距离来减少树的垂直长度。我尝试了以下解决方案这线程,通过包含以下代码:
for tree={
l sep-=1em,
},
唯一的影响是标记为 DP 的节点与三角形的节点 Manne 之间的距离减小了。其余部分保持不变。
我已经加载了该gb4e
包,因为我在实际文档中需要它,并且与这篇文章的实际问题无关。
\documentclass{article}
\usepackage[utf8x]{inputenc}
\usepackage{forest, gb4e}
\forestset{
sn edges/.style={for tree={parent anchor=south, child anchor=north,align=center,base=bottom{}}},
background tree/.style={for tree={text opacity=0.2,draw opacity=0.2,}},
qtree/.style={
baseline,
for tree={
parent anchor=south,
child anchor=north,
align=center,
inner sep=1pt,
}},
nice empty nodes/.style={for tree={calign=fixed edge angles},delay={where content={}{shape=coordinate,for parent={for children={anchor=north}}}{}}}
}
\tikzset{every tree node/.style={align=center,anchor=north}}
\begin{document}
\begin{exe}
\ex
\begin{forest}
for tree={
l sep-=1em,
},
qtree, nice empty nodes,
[TP
[T]
[\textit{v}P,
[AdvP
[sneehpeslaakan, triangle]]
[\textit{v}P
[DP
[Manne, triangle]]
[{}, s sep=15pt
[VP
[DP
[gærjah, triangle]]
[t{\scriptsize V}]]
[\textit{v} \\ lohk]]]]]
\end{forest}
%\end{xlist}
\end{exe}
\end{document}
我得到以下输出:
答案1
问题出在nice empty nodes
样式定义方式上。这里有一个解决方案,它给出了一个略有不同的定义,nice empty nodes
我称之为fairly nice empty nodes
。对于长串的空节点,此定义可能不太成功,但对于树中偶尔出现的空节点,它效果很好。
我对您的代码进行了一些简化,其中大部分现已纳入库中linguistics
。forest
我还删除了utf8x
输入编码,通常不应使用它。triangle
默认情况下未定义样式,但有一种roof
样式是定义的,所以我改用了它。这是使用forest
来自 TeXLive 2016 的 v. 2.0.3来自 TeXLive 2017 的 v. 2.15。代码已更新以反映最近的变化。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{forest, gb4e}
\forestset{
fairly nice empty nodes/.style={
delay={where content={}{shape=coordinate,
for siblings={anchor=north}}{}
}}}
\useforestlibrary{linguistics}
\forestapplylibrarydefaults{linguistics}
\begin{document}
\begin{exe}
\ex
\begin{forest}
fairly nice empty nodes,
[TP
[T]
[\textit{v}P,
[AdvP
[sneehpeslaakan, roof]]
[\textit{v}P
[DP
[Manne, roof]]
[{}, s sep=15pt
[VP
[DP
[gærjah, roof]]
[t{\scriptsize V}]]
[\textit{v} \\ lohk]]]]]
\end{forest}
\end{exe}
\end{document}
如果你真的想进一步挤压树,你可以设置l=0
然后更改 的值,l sep-
使其更小一些。例如,设置
for tree={l sep-=.7em,l=0}
输出结果如下:
Forest v.1 版本
看来您使用的是forest
v.1,这就是为什么您的代码无法编译的原因。所以这里有一个使用该版本的版本forest
。我在答案中保留了其他代码,因为forest
v.1 已经有两年多了,而且自 2014 年以来就不再是 TeX Live 的一部分,所以其他发现这个问题的人(或者您,如果您更新的话)可能会发现较新的代码很有用。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{forest, gb4e}
\forestset{
sn edges/.style={for tree={parent anchor=south, child anchor=north,align=center,base=bottom{}}},
background tree/.style={for tree={text opacity=0.2,draw opacity=0.2,}},
qtree/.style={
baseline,
for tree={
parent anchor=south,
child anchor=north,
align=center,
inner sep=1pt,
}},
nice empty nodes/.style={for tree={calign=fixed edge angles},delay={where content={}{shape=coordinate,for parent={for children={anchor=north}}}{}}},
fairly nice empty nodes/.style={
delay={where content={}{shape=coordinate,for parent={
for children={anchor=north}}}{}}
}}
\tikzset{every tree node/.style={align=center,anchor=north}}
\begin{document}
\begin{exe}
\ex
\begin{forest}
for tree={
l sep-=1em,
},
qtree, fairly nice empty nodes,
[TP
[T]
[\textit{v}P,
[AdvP
[sneehpeslaakan, triangle]]
[\textit{v}P
[DP
[Manne, triangle]]
[{}, s sep=15pt
[VP
[DP
[gærjah, triangle]]
[t{\scriptsize V}]]
[\textit{v} \\ lohk]]]]]
\end{forest}
\end{exe}
\end{document}