使用 Tikz 矩形绘制进行森林节点对齐

使用 Tikz 矩形绘制进行森林节点对齐

我使用的是 MacTeX/TeXLive 2021 和最新版本的 TeXStudio。对于编译,我使用 Latexmk。

在下面的树中,我希望放置在 VP 上的绿色框能够影响节点的定位,以便相邻节点(显示 T \ blah \ \textsc{$+$blah} 的节点)不是完全位于框内。如果您有任何关于改进我绘制箭头方式的建议,我很乐意接受,但主要问题是 T 节点部分位于绿色框内。

我还希望能够从绿色框中绘制箭头,就像它是一个节点一样,我认为这可以用此代码实现,但使用相同的语法绘制蓝色箭头不起作用(可能出于与框未对齐为节点相同的原因)。我尝试在 Tikz 代码和森林代码(和\node (blah))中命名节点VP,name=blah,但似乎都不起作用。

我假设我需要以某种方式让forestVP 周围的框被视为 VP 本身并因此自动对齐,但我似乎找不到这样做的方法。

MWE 的图片

非常感谢你的帮助!!

MWE 代码:

\documentclass[12pt, letterpaper]{article}
\usepackage[margin=1in]{geometry}
\usepackage{setspace}
\setlength{\parindent}{0em}
%\setlength{\parindent}{.5in}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{pifont}
\usepackage{libertine}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{MnSymbol}
\usepackage[hidelinks]{hyperref}
\usepackage{ulem}

\newcommand{\xbar}[1]{\ensuremath{\overline{\textrm{#1}}}}

\usepackage[table,dvipsnames]{xcolor}

\usepackage{graphicx}

%%% Trees
\usepackage[linguistics]{forest}
\usepackage{tikz}
\usetikzlibrary{fit,arrows.meta,arrows,shapes.geometric,decorations.markings,decorations.pathreplacing,positioning}

\begin{document}

\scalebox{.7}{\begin{forest}
        for tree={s sep=7mm, inner sep=0, l*=1.75}
        [... \\ CP [VP [VP [V \\ blah] [DP [D \\ $\varnothing$] [N \\ blah]]] [VP [PP [blah,roof]] [VP [PP [\sout{blah blah blah},roof]] [VP [V \\ \sout{blah}] [DP [D \\ $\varnothing$] [N \\ \sout{blah}]]]]]] [CP [\xbar{C} [C \\ $\varnothing$] [TP [DP [D \\ blah] [N \\ $\varnothing$]] [\xbar{T} [T \\ blah \\ $+$\textsc{blah}] [$\langle$VP$\rangle$,tikz={\node (baseVP) [draw,thick,PineGreen,inner sep = 0, fit to=tree]{};} [VP,name=firstmovedvp [V \\ \sout{blah}] [DP [D \\ $\varnothing$] [N \\ \sout{blah}]]] [VP [PP [\sout{blah},roof]] [VP [$\langle$PP$\rangle$ [\sout{blah blah blah},roof,name=extraposedbase]] [VP,name=lowvp [V \\ \sout{blah}] [DP [D \\ $\varnothing$] [N \\ \sout{blah}]]]]]]]]] [PP [blah blah blah,roof,name=extraposedsurface]]]]
        \draw[very thick,-{latex[length=2.5mm,width=2.5mm]},blue] (lowvp)..controls +(south east:15cm) and +(south west:11cm)..(firstmovedvp);
        \draw[very thick,-{latex[length=2.5mm,width=2.5mm]},blue] (extraposedbase)..controls +(-55:13cm) and +(south east:14cm)..(extraposedsurface);
\end{forest}}

\end{document}

答案1

好吧,我无法回答您的所有问题,但至少我可以告诉您如何解决重叠问题。为了使机制forest遵循绿色矩形的边界框,您需要fit=band向绿色矩形所连接的节点添加选项。

至于蓝色箭头:我可能会尝试以不相互重叠的方式绘制它们。然而,这只有当它们被允许在某个点与树重叠时才有可能。

我目前不知道如何从绿色框中绘制箭头,但这与对齐无关。相反,我假设节点在渲染过程中绘制得太晚,以至于在绘制箭头时它还不存在。该forest包允许重新安排绘制过程,但我对细节了解不够。

\documentclass[12pt, letterpaper]{article}
\usepackage[margin=1in]{geometry}
\usepackage{libertine}
\usepackage{amssymb}
\usepackage{ulem}

\newcommand{\xbar}[1]{\ensuremath{\overline{\textrm{#1}}}}

\usepackage[table,dvipsnames]{xcolor}
\usepackage{graphicx}

%%% Trees
\usepackage[linguistics]{forest}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}

\begin{document}

\scalebox{.7}{\begin{forest}
    for tree={s sep=7mm, inner sep=0, l*=1.75},
    [... \\ CP 
      [VP 
        [VP 
          [V \\ blah] 
          [DP 
            [D \\ $\varnothing$] 
            [N \\ blah]
          ] 
        ] 
        [VP 
          [PP 
            [blah, roof]
          ] 
          [VP 
            [PP 
              [\sout{blah blah blah}, roof]
            ] 
            [VP 
              [V \\ \sout{blah}] 
              [DP 
                [D \\ $\varnothing$] 
                [N \\ \sout{blah}]
              ]
            ]
          ]
        ]
      ] 
      [CP 
        [\xbar{C} 
          [C \\ $\varnothing$] 
          [TP 
            [DP 
              [D \\ blah] 
              [N \\ $\varnothing$]
            ] 
            [\xbar{T} 
              [T \\ blah \\ $+$\textsc{blah}] 
              [$\langle$VP$\rangle$, fit=band, tikz={\node (baseVP) [draw, thick, PineGreen, inner sep=0, fit to=tree] {};}
                [VP, name=firstmovedvp 
                  [V \\ \sout{blah}] 
                  [DP 
                    [D \\ $\varnothing$] 
                    [N \\ \sout{blah}]
                  ]
                ] 
                [VP 
                  [PP 
                    [\sout{blah}, roof]
                  ] 
                  [VP 
                    [$\langle$PP$\rangle$ 
                      [\sout{blah blah blah}, roof, name=extraposedbase]
                    ] 
                    [VP, name=lowvp 
                      [V \\ \sout{blah}] 
                      [DP 
                        [D \\ $\varnothing$] 
                        [N \\ \sout{blah}]
                      ]
                    ]
                  ]
                ]
              ]
            ]
          ]
        ]
        [PP 
          [blah blah blah, roof, name=extraposedsurface]
        ]
      ]
    ]
    \draw[very thick,-{latex[length=2.5mm,width=2.5mm]},blue] (lowvp)..controls +(south east:15cm) and +(south west:11cm)..(firstmovedvp);
    \draw[very thick,-{latex[length=2.5mm,width=2.5mm]},blue] (extraposedbase.north east) to[out=45, in=-45] (extraposedsurface.south east);
\end{forest}}

\end{document}

在此处输入图片描述

相关内容