我的树需要跨 vP 的相边界。但是,用曲线来标记相边界已经成为一项繁琐的工作。如果我能得到一个可以帮助我做到这一点的代码,那将非常有用。
答案1
这是基于文档第 9 页示例的选项forest
。首先,它将节点拟合到边界之外的树部分,然后使用其坐标绘制一条漂亮的曲线,将其与树的其余部分分开。
\documentclass[border=3pt, tikz]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
[CP
[DP$_1$]
[\dots
[,phantom]
[VP, tikz={\node [inner sep=5pt, % adjust the space between the branch and the line
draw=gray!30, % remove this line to hide the rectangle
fit to=tree] (pb) {};
\draw[shorten <=20pt, shorten >=10pt, % adjust how long the line is
dashed] (pb.south west) .. controls (pb.north west) .. (pb.north east);}
[DP$_2$]
[V’
[V]
[DP$_3$]
]]]]
\end{forest}
\end{document}
我曾希望,如果在树的两侧添加更多内容,它就能很好地保持两半之间的边界,但它似乎只关心应该在里面的内容是否在里面。例如,的幻影兄弟VP
实际上也在矩形内,尽管这不是必需的。我想,如果您需要包含该节点,您可以随时手动增加两个兄弟之间的间距(例如,通过在它们之间添加幻影节点)。
当然,根据你的树,你可能希望曲线沿着矩形的不同边缘延伸,例如,
\draw[shorten <=20pt, shorten >=20pt, dashed]
(pb.south west) .. controls (pb.north west) .. (pb.north) .. controls (pb.north east) .. (pb.south east);
[感谢 Alan Munn 的回答,我希望这有助于向语言学界以外的人澄清 OP 所寻找的内容。]
答案2
调整此处给出的解决方案:
我们可以使用这个 arc 命令相当简单地绘制一个圆弧。一旦你决定了圆弧本身的最佳参数,你可以把它包装在一个命令中以节省一些输入。该\phase
命令接受一个命名节点并创建一个从该节点中心偏移的圆弧。这是一个完整的例子:
\documentclass{article}
\usepackage[linguistics]{forest}
\def\centerarc[#1](#2)(#3:#4:#5)% Syntax: [draw options] (center) (initial angle:final angle:radius)
{ \draw[#1] ($(#2)+({#5*cos(#3)},{#5*sin(#3)})$) arc (#3:#4:#5); }
\newcommand\phase[2][]{\centerarc[#1]($(#2.center)-(90:.75)$)(35:160:1.0)}
\newcommand*\1{$'$}
\newcommand*\0{\textsuperscript{0}}
\begin{document}
\begin{forest}
[TP
[T\0]
[vP, name=vP
[DP,name=DP
[D\0 ]
[NP
[NP [N\0 ]]
[CP,name=CP
[C ]
[TP [DP ]
[T\1
[T\0 ]
[vP [v\0 ]
[VP [V\0 ][DP ]]]]]]]]
[v\1
[v\0]
[VP
[V\0]
[DP ]
]
]
]
]
\phase[dashed,very thick]{vP}
\phase[dashed,very thick]{CP}
\phase[dashed,very thick,red]{DP}
\end{forest}
\end{document}