在 tikz-qtree 中的节点之间绘制弯曲箭头

在 tikz-qtree 中的节点之间绘制弯曲箭头

有没有一种“聪明”的方法可以在节点之间画出曲线,而无需它们贯穿整个图片?

这是我的 MWE:

\documentclass[11pt]{beamer}
\usepackage{ulem}
\usepackage{tikz-qtree}
\usepackage{tikz-qtree-compat}
\usetikzlibrary{positioning}
\usepackage{philex}

\begin{document}

\begin{frame}{Contraintes sur le mouvement}

\lb{}{La fille que j'aidais aime ce que tu détestes.}
\begin{center}
\begin{tikzpicture}[scale=.8]
\tikzset{every tree node/.style={align=center,anchor=north}}% to allow linebreaks

\Tree 
[.TP
[.DP 
    [.DP \edge[roof]; {La fille} ]
    [.\node(aidais){CP};  \edge[roof]; {que j'\fbox{aidais}} ] ]
[.T$'$  
[.\node(temps) {V\\\Huge\color{blue}?};  ]
[.VP 
[.DP \edge[roof]; {\sout{La fille...}} ] 
[.V$'$ 
%[.V \fbox{aime} ]
[.V \node(aime){\fbox{aime}}; ]
[.\node(détestes) {CP};  \edge[roof]; {ce que tu \fbox{détestes}} ] ] ] ] ]

\node (aidais2) [below=.7cm of aidais] {};
\node (aidais3) [right=.2cm of aidais2] {};
\node (temps2) [below=.3cm of temps] {};
\node (détestes2) [below=.7cm of détestes] {};
\node (détestes3) [right=.3cm of détestes2] {};

%\draw[semithick,->] (aidais3)..controls +( west:1) and +(east:1)..(temps2);
%\draw[semithick,->] (aime)..controls +( west:1) and +(east:1)..(temps2);
%\draw[semithick,->] (détestes3)..controls +( west:4) and +(east:4)..(temps2);
\draw[-latex] (aidais3.south) -- (temps.south west);
\draw[-latex] (aime.south) -- (temps.south east);
\draw[-latex] (détestes3.south) -- (temps.south);

\end{tikzpicture}
\end{center}
\end{frame}

\end{document}

结果如下: 在此处输入图片描述

我的问题是:什么代码可以绘制箭头绕过树木(而不是穿过树木)以便到达询问点而不让它们互相交叉?

我尝试过许多不同的代码,但我真的不明白我在做什么,我随机更改选项来发现它们的作用,但我找不到方法去做。

这是众多示例中的一个例子,我总是对这些箭头感到尴尬。所以我正在寻找一种可以推广到类似示例(树上的箭头)的解决方案。我甚至不知道在 tikz 文档中该在哪里查找。

感谢您的帮助!

答案1

解决这个问题可能有很多不同的方法,但我发现以下方法非常有效:

\draw[-latex] (aidais3.south) to[out=270,in=225,looseness=2] (temps.265);
\draw[-latex] (aime.south) to[out=270,in=270,looseness=2] (temps.280);
\draw[-latex] (détestes3.south) to[out=270,in=260,looseness=2] (temps.south);

截屏

请注意,我已指定in角度和out箭头的角度。请注意,我还通过使用temps节点的角度调整了最终目的地,如向标准 TikZ 节点添加更多锚点。您可以looseness根据需要调整参数:)

完整代码如下:

% arara: pdflatex
\documentclass[11pt]{beamer}
\usepackage{ulem}
\usepackage{tikz-qtree}
\usepackage{tikz-qtree-compat}
\usetikzlibrary{positioning}
\usepackage{philex}

\begin{document}

\begin{frame}{Contraintes sur le mouvement}

\lb{}{La fille que j'aidais aime ce que tu détestes.}
\begin{center}
\begin{tikzpicture}[scale=.8]
\tikzset{every tree node/.style={align=center,anchor=north}}% to allow linebreaks

\Tree 
[.TP
[.DP 
    [.DP \edge[roof]; {La fille} ]
    [.\node(aidais){CP};  \edge[roof]; {que j'\fbox{aidais}} ] ]
[.T$'$  
[.\node(temps) {V\\\Huge\color{blue}?};  ]
[.VP 
[.DP \edge[roof]; {\sout{La fille...}} ] 
[.V$'$ 
%[.V \fbox{aime} ]
[.V \node(aime){\fbox{aime}}; ]
[.\node(détestes) {CP};  \edge[roof]; {ce que tu \fbox{détestes}} ] ] ] ] ]

\node (aidais2) [below=.7cm of aidais] {};
\node (aidais3) [right=.2cm of aidais2] {};
\node (temps2) [below=.3cm of temps] {};
\node (détestes2) [below=.7cm of détestes] {};
\node (détestes3) [right=.3cm of détestes2] {};

%\draw[semithick,->] (aidais3)..controls +( west:1) and +(east:1)..(temps2);
%\draw[semithick,->] (aime)..controls +( west:1) and +(east:1)..(temps2);
%\draw[semithick,->] (détestes3)..controls +( west:4) and +(east:4)..(temps2);
\draw[-latex] (aidais3.south) to[out=270,in=225,looseness=2] (temps.265);
\draw[-latex] (aime.south) to[out=270,in=270,looseness=2] (temps.280);
\draw[-latex] (détestes3.south) to[out=270,in=260,looseness=2] (temps.south);

\end{tikzpicture}
\end{center}
\end{frame}

\end{document}

相关内容