我使用的是 MacTeX/TeXLive 2021 和最新版本的 TeXStudio。对于编译,我使用 Latexmk。
在下面的树中,我希望放置在 VP 上的绿色框能够影响节点的定位,以便相邻节点(显示 T \ blah \ \textsc{$+$blah} 的节点)不是完全位于框内。如果您有任何关于改进我绘制箭头方式的建议,我很乐意接受,但主要问题是 T 节点部分位于绿色框内。
我还希望能够从绿色框中绘制箭头,就像它是一个节点一样,我认为这可以用此代码实现,但使用相同的语法绘制蓝色箭头不起作用(可能出于与框未对齐为节点相同的原因)。我尝试在 Tikz 代码和森林代码(和\node (blah)
)中命名节点VP,name=blah
,但似乎都不起作用。
我假设我需要以某种方式让forest
VP 周围的框被视为 VP 本身并因此自动对齐,但我似乎找不到这样做的方法。
非常感谢你的帮助!!
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}