![在 tikz-qtree 中的节点之间绘制弯曲箭头](https://linux22.com/image/283812/%E5%9C%A8%20tikz-qtree%20%E4%B8%AD%E7%9A%84%E8%8A%82%E7%82%B9%E4%B9%8B%E9%97%B4%E7%BB%98%E5%88%B6%E5%BC%AF%E6%9B%B2%E7%AE%AD%E5%A4%B4.png)
有没有一种“聪明”的方法可以在节点之间画出曲线,而无需它们贯穿整个图片?
这是我的 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}