关于在句法树上绘制相边界

关于在句法树上绘制相边界

我的树需要跨 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}

代码输出

相关内容