以下面的代码为例:
\documentclass{article}
\usepackage{forest, amsmath}
\begin{document}
\begin{forest} for tree = {parent anchor = south, child anchor = north, s sep = 0em}
[, phantom
[a]
[r]
[c]
[h]
[i]
[p]
[$\stackrel{*}{\text{e}}$
[$\stackrel{*}{\text{H}}$]
]
[l]
[a
[L]
]
[g]
[o]
]
\end{forest}
\end{document}
它在两个带星号的元素之间以及a
和之间创建了一条关联线L
。为了得到字符上方的星号,我不得不进入数学模式(这让我很烦,但这是推荐的方法)。
但是星号增加了H
高度,所以字符L
与组合顶部对齐H + *
。显然它看起来不能那样。
一个简单的解决方法是,在上方添加一个幻影星L
,用$\stackrel{\phantom{*}}{\text{L}}$
。我得到了这个:
a
这样看起来好多了,但现在从到 的线L
太短了。它应该与 的北边缘距离L
和另一条线与 的北边缘距离一样近*
。
我认为正确的做法是手动指定箭头的长度。我该怎么做?或者有更好的解决方案吗?
答案1
最简单的修复方法(假设您的真实树中没有隐藏的复杂性)可能是将某一级别的所有节点放在一个级别中,tier
并使用 锚定所有节点mid
。
\documentclass[border=10pt]{standalone}
\usepackage[linguistics]{forest}
\usepackage{amsmath}
\begin{document}
\begin{forest}
for tree={%
s sep'=0em,
tier/.option=level,
anchor=mid,
},
[, phantom
[a]
[r]
[c]
[h]
[i]
[p]
[$\stackrel{*}{\text{e}}$
[$\stackrel{*}{\text{H}}$]
]
[l]
[a
[L]
]
[g]
[o]
]
\end{forest}
\end{document}
答案2
有两个参数l
和l sep
。 参数l
尝试使子节点的参考点保持相同的垂直距离,而l sep
确保父节点和子节点之间的距离最小。H
带星号的高度较大,因此由于 而向下移动l sep
。
在这种情况下,设置为零可能就足够了l sep
(假设没有具有异常大高度的节点)。
下面的示例也使用了不同的方法,将星星放在字母上方,以避免使用 的方法增加的额外高度\stackrel
。
\documentclass{article}
\usepackage{forest}
\newcommand*{\starontop}[1]{%
\begingroup
\renewcommand*{\arraystretch}{0}%
\begin{tabular}[b]{@{}c@{}}\scriptsize*\\#1\end{tabular}%
\endgroup
}
\begin{document}
\begin{forest} for tree = {l sep=0pt}
[, phantom
[a]
[r]
[c]
[h]
[i]
[p]
[\starontop{e}
[\starontop{H}]
]
[l]
[a
[L]
]
[g]
[o]
]
\end{forest}
\end{document}
答案3
尝试使用 l sep:
\documentclass{article}
\usepackage{forest, amsmath}
\begin{document}
\begin{forest} for tree = {parent anchor = south, child anchor = north, s sep = 0em, }
[, phantom
[a]
[r]
[c]
[h]
[i]
[p]
[$\stackrel{*}{\text{e}}$
[$\stackrel{*}{\text{H}}$]
]
[l]
[a,for tree={l sep= 0.62cm}
[L]
]
[g]
[o]
]
\end{forest}
\end{document}
结果:
编辑
问题是,在 g 的子节点(如果有一个或多个)中,您必须重新定义 l sep。之后... o 也需要不同的 l sep。但是这样它就适用于多个子节点:
\documentclass{article}
\usepackage{forest, amsmath}
\begin{document}
\begin{forest} for tree = { parent anchor = south, child anchor = north,s sep = 0em,}
[,phantom
[a]
[r]
[c]
[h]
[i]
[p]
[$\stackrel{*}{\text{e}}$
[$\stackrel{*}{\text{H}}$]
]
[l]
[a,for tree={l sep= 0.66cm}
[L] [M]
]
[g,for tree={l sep= 0.60cm}
[G] [F]
]
[o]
[m,for tree={l sep= 0.66cm}
[S][J]]
]
\end{forest}
\end{document}