I have to draw pictures like the following a lot:

I want to use tikz-qtree, since I have a lot of trees and this package simplifies things considerably. Right now I use the following code, since it is not possible to have nodes in nodes and tikz-qtree makes the tree elements nodes. So I use the grid code from How can I show coordinates by grid in TikZ automatically? and draw lines from absolute positions to other absolute positions. This is time consuming, it never looks right, and I have to redo it when the font size changes. Is there a better way to do this?
\documentclass{minimal}
\usepackage{tikz-qtree}
\tikzset{every roof node/.append style={inner sep=0.1pt,text height=2ex,text depth=0.3ex}}
\newcommand{\sliste}[1]{%
\mbox{%
$\left\langle\mbox{\scshape #1}\right\rangle$}%
}
\begin{document}
\begin{tikzpicture}
\tikzset{level 1+/.style={level distance=3\baselineskip}}
\tikzset{frontier/.style={distance from root=12\baselineskip}}
%\draw (-3,-5) to[grid with coordinates] (4,0);
\Tree[.S
[.{V \sliste{ S$\!/\!/$V }}
[.V liest$_k$ ] ]
[.{S$\!/\!/$V}
[.NP Jens ]
[.{V$'$$\!/\!/$V}
[.NP \edge[roof]; {das Buch} ]
[.{V$\!/\!/$V} \_$_k$ ] ] ] ]
\draw[semithick,<->,color=green] (3.1,-3.9) ..controls +(south east:.5) and +(south west:.5)..(2.7,-3.9);
\draw[semithick,<->,color=green] (3.5,-3.7) ..controls +(east:.5) and +(east:.5)..(2.8,-2.5);
\draw[semithick,<->,color=green] (2.8,-2.3) ..controls +(east:.5) and +(east:.5)..(1.7,-1.1);
\draw[semithick,<->,color=green] (1.5,-0.9) ..controls +(north:.5) and +(north:.5)..(-0.8,-0.9);
\draw[semithick,<->,color=green] (-0.7,-1.1) ..controls +(south east:.2) and +(north east:.5)..(-1.0,-2.4);
\end{tikzpicture}
\end{document}
Edit:
I followed the suggestion and used tikzmark and \subnode:
\documentclass{minimal}
\usepackage{tikz-grid}
\usepackage{tikz-qtree}
\tikzset{every roof node/.append style={inner sep=0.1pt,text height=2ex,text depth=0.3ex}}
\usetikzlibrary{tikzmark}
\newcommand{\sliste}[1]{%
\mbox{%
$\left\langle\mbox{\scshape #1}\right\rangle$}%
}
\begin{document}
\begin{tikzpicture}
\tikzset{level 1+/.style={level distance=3\baselineskip}}
\tikzset{frontier/.style={distance from root=12\baselineskip}}
\Tree[.S
[.{V \sliste{ S$/\!/$\subnode{vcomp}{V} }}
[.{\subnode{vliest}{V}} liest$_k$ ] ]
[.{S$/\!/$\subnode{vs}{V}}
[.NP Jens ]
[.{V$'$$\!/\!/$\subnode{vbar}{V}}
[.NP \edge[roof]; {das Buch} ]
[.{\subnode{vzero}{V}$\!/\!/$\subnode{vdsl}{V}} \_$_k$ ] ] ] ]
\draw[semithick,<->,color=green] (vcomp.east) ..controls +(south east:.2) and +(north east:.5)..(vliest.east);
\end{tikzpicture}
\end{document}
The result is funny: It works if I use pdflatex and have no AUX file. As soon as there is an AUX file, the code produces two pages or the arrows are distributed over the page. Hm.
Edit 2:
I followed Allen Mun's suggestion and worked further on similar examples:
\documentclass{minimal}
\usepackage{tikz-grid}
\usepackage{tikz-qtree}
\tikzset{every roof node/.append style={inner sep=0.1pt,text height=2ex,text depth=0.3ex}}
\usetikzlibrary{tikzmark}
\newcommand{\sliste}[1]{%
\mbox{%
$\left\langle\mbox{\scshape #1}\right\rangle$}%
}
\newcommand{\trace}{\raisebox{0.2ex}{\_}\rule{0cm}{0.7em}}
\begin{document}
\begin{tikzpicture}[
level 1+/.style={level distance=3\baselineskip},
frontier/.style={distance from root=15\baselineskip},
connect/.style={semithick,<->,color=green}]
\Tree[.S
[.\node (NP) {NP}; \edge[roof]; {das Buch} ]
[.\node (S/NP) {S/NP};
[.{V \sliste{ S/$\!$/V }}
[.V liest$_k$ ] ]
[.\node (S//V/NP) {S$/\!/$V/NP};
[.\node (NP/NP) {NP/NP}; \trace{} ]
[.{V$'$$\!/\!/$V}
[.NP Jens ]
[.{V$\!/\!/$V} \_$_k$ ] ] ] ] ] ]
\draw[connect] (NP/NP) [bend right] to (S//V/NP.south east);
\draw[connect] (S//V/NP.north east) [bend right] to (S/NP.east);
\draw[connect] (S/NP.north east) [bend right] to (NP);
\end{tikzpicture}
\end{document}

The intention of this figure is to show that the NP information is shared. So here it would be great to be able to connect to the NP nodes directly.


forestpackage qualify as a “better way to do this”? You can give nodes intikz-qtreenames if you use the usual\node (<name>) {<text>};syntax. For referencing only letters of one node, you may be able to use\subnodefrom thetikzmarklibrary/package. – Qrrbrbirlbel Dec 13 '13 at 15:37