为了对齐,我想创建一个幻像节点,它不占用树顶部的空间,以便树的第一个标记节点与示例编号对齐。设置l sep=0pt
显然是不够的。我还需要设置什么才能实现这一点?
梅威瑟:
\documentclass{article}
\usepackage[linguistics]{forest}
\usepackage{expex}
\begin{document}
\ex\begin{forest}
[, phantom
[{Jane is ...}, tier=words]
[AjP
[Specifier
[very, tier=words]
]
[Aj'
[Aj
[fond, tier=words]
]
[PP
[{of Cheetah}, roof, tier=words]
]
]
]
]
\end{forest}\xe
\end{document}
答案1
我无法使用 的当前版本重现您的问题forest
。但使用当前版本,您可以baseline
向任何节点添加 ,以使该节点成为树的基线。
(无关的语言学评论:“说明符”是句法位置的名称,而不是树中的句法类别或节点,通常不应出现在树中。)
\documentclass{article}
\usepackage[linguistics]{forest}
\usepackage{expex}
\begin{document}
\ex
\begin{forest}
[,phantom,
[{Jane is ...}, tier=words]
[AjP,baseline
[Specifier
[very, tier=words]
]
[Aj'
[Aj
[fond, tier=words]
]
[PP
[{of Cheetah}, roof, tier=words]
]
]
]
]
\end{forest}
\xe
\end{document}
答案2
这里其实根本不需要phantom
根。你只需要移除第一个子节点的边并指定根节点的对齐方式。
\documentclass{article}
\usepackage[linguistics]{forest}
\usepackage{expex}
\begin{document}
\ex
\begin{forest}
where n children=0{tier=words}{}
[AjP, calign child=2
[Jane is \dots, no edge]
[Specifier
[very]
]
[Aj'
[Aj
[fond]
]
[PP
[of Cheetah, roof]
]
]
]
\end{forest}
\xe
\end{document}
答案3
在 v2.0.3 之前,Forest 会在使用键时设置基线节点(锚点将与基线对齐的节点)baseline
,即使该键用在phantom
未由 TikZ 绘制的节点上。人们可能认为这会导致 TikZ 错误,但事实并非如此。
一旦在 TikZ 中创建了一个节点,它的名称即使在组之外也会保留(我猜这可以算作一个错误),其中“节点”位于(0,0)
,如下所示:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node(foo){};
\end{tikzpicture}
\begin{tikzpicture}
\draw[->] (-1,1) -- (foo.center) -- (1,1);
\end{tikzpicture}
\end{document}
将上述内容与 Forest 重用节点名称的事实(根节点通常默认命名node@2
)结合起来,您就会发现问题。如果您将基线节点设置为根节点(就像语言学库所做的那样)并使根节点幻像(就像排版并排树时通常所做的那样),TikZ 会有效地将基线设置为y=0
。结果由 OP 示例显示。
现在,Forest 2.0.3(修复了 引入的问题draw tree method
)变得聪明起来,不再指示 TikZ 将基线节点设置为幻影节点(更准确地说,任何未绘制的节点)。因此,从此版本开始,不再为并排语言树设置基线。正如 TikZ 手册所承诺的那样,结果是“图片的下端放在周围文本的基线上”,如下例所示。(节点为draw
n,以便更好地查看对齐。)
\documentclass{article}
\usepackage[linguistics]{forest}
\usepackage{gb4e}
\begin{document}
\begin{exe}
\ex\begin{forest}
for tree=draw
[,phantom
[VP[V][DP]]
[VP[V][DP]]
]
\end{forest}
\end{exe}
\end{document}
这是我们使用 Forest v2.0.3 - v2.1.4 编译上述代码时得到的结果。
需要明确指出的是:我认为这是预期的行为。然而,这并不意味着这是期望行为……这就是为什么 v2.1.5 的语言库试图变得更聪明:粗略地说,它将基线设置为“第一个非幻像节点”。在我们的例子中,这是左 VP,所以我们得到:
(暂定:Forest 2.1.5 已提交给 CTAN 并可在GitHub。
现在,诚然,在 OP 的例子中,所有这些都没有帮助,因为“第一个非幻像节点”解析为Jane is ...
。语言学中的新基线默认值适用于常见的并排树情况;对于任何不寻常的情况,只需设置baseline
手动设置,如建议的那样艾伦的回答。