Effizientere Möglichkeit, in Tikz-Qtree einen Bewegungspfeil zum Dach zu zeichnen

Effizientere Möglichkeit, in Tikz-Qtree einen Bewegungspfeil zum Dach zu zeichnen

Beim Zeichnen syntaktischer Darstellungen in der Linguistik verwendet man oft ein Dreieck, um eine Einheit darzustellen, deren interne Struktur irrelevant ist. Dies kann mit dem tikz-qtreeBefehl erreicht werden \edge[roof]; {John}.

Manchmal muss ich nun die Bewegung einer solchen Einheit zeigen, deren interne Struktur für den vorliegenden Punkt irrelevant ist. Dazu nutze ich normalerweise die positioningBibliothek und definiere einen Knoten relativ zum Knoten über dem Dreieck, wie folgt:

\documentclass{article}

\usepackage{tikz}
\usepackage{tikz-qtree}
\tikzset{every tree node/.style={align=center, anchor=north}}
\usetikzlibrary{positioning}

\begin{document}

\begin{tikzpicture}
\Tree
[.TP
    [.\node(DP1-rel){DP}; \edge[roof]; {John} ]
    [.T$'$
        [.T ]
        [.\emph{v}P
            [.\node(DP2-rel){DP}; \edge[roof]; {$<$John$>$} ]
            [.\emph{v}$'$
                [.\emph{v}
                    [.V \node(V1){likes}; ]
                    [.\emph{v} ]
                ]
                [.VP
                    [.V \node(V2){$<$likes$>$}; ]
                    [.DP \edge[roof]; {Mary} ]
                ]
            ]
        ]
    ]
]
\node (DP1) [below=1cm of DP1-rel] {};
\node (DP2) [below=1cm of DP2-rel] {};
\draw[->] (DP2)..controls +(south west:1) and +(south:1)..(DP1);
\draw[->] (V2)..controls +(south:1) and +(south:1)..(V1);
\end{tikzpicture}

\end{document}

Syntaxbaum

Gibt es eine einfachere/bessere Möglichkeit, dies zu tun, bei der ich nicht jedes Mal einen relativen Knoten definieren muss, wenn ich eine Einheit verschieben muss, deren interne Struktur irrelevant ist (dhtikz-qtree, dessen Struktur ich mit dem Befehl ) durch ein Dreieck darstelle \edge[roof]; {John}?

Antwort1

Sie können den Text des Dachs einfach zu einem Knoten machen. (Ich habe auch die Pfeilsyntax etwas vereinfacht.)

\documentclass{article}

\usepackage{tikz-qtree,tikz-qtree-compat}
\tikzset{every tree node/.style={align=center, anchor=north}}

\begin{document}


\begin{tikzpicture}
\Tree
[.TP
    [.DP \edge[roof]; \node (J) {John}; ]
    [.T$'$
        [.T ]
        [.\emph{v}P
            [.DP \edge[roof]; \node (Jtrace) {$<$John$>$}; ]
            [.\emph{v}$'$
                [.\emph{v}
                    [.V \node(V1){likes}; ]
                    [.\emph{v} ]
                ]
                [.VP
                    [.V \node(V2){$<$likes$>$}; ]
                    [.DP \edge[roof]; {Mary} ]
                ]
            ]
        ]
    ]
]

\draw[->] (Jtrace) [in=-90,out=-90,looseness=1.5]  to (J);
\draw[->] (V2) [in=-90,out=-90]  to (V1);
\end{tikzpicture}

\end{document}

Ausgabe des Codes

Antwort2

Ich weiß nicht, tikz-qtreeaber mitforestkönnen Sie mit der speziellen Syntax auf den Knoten des Baums zugreifen !. Der Knoten (!2211)(in Ihren Beispielen ist dies ) ist das zweite Kind <John>( ) der Wurzel ( ) des zweiten Kindes ( ) des ersten Kindes ( ) des ersten Kindes ( ).TPT'vPDP<John>

Dann besteht immer die Möglichkeit, einem Knoten mit dem üblichen TikZ-Schlüssel einen Namen zu geben: name(oder aliaswenn Sie mehr als einen Namen benötigen).

Es besteht auch die Möglichkeit, einen Knoten relativ zu einem anderen anzugeben (was eigentlich der allgemeine Fall für die !Syntax ist). In diesem Beispiel gehen wir zu up, dann zum last-Kind und zum st-Kind seines 2nd-Kinds 1, was zu führt (!ul21).

Jeder hat seine Vorteile, je nachdem, wie statisch der Baum tatsächlich ist. Wenn Sie sich viel bewegen, wäre es ratsam, den Knoten einen festen Namen zu geben. Wenn ein Knoten immer relativ zu einem anderen Knoten bleibt, können Sie den relativen Knotennamen verwenden. Wenn ein Knoten immer relativ zur Wurzel bleibt, können Sie die spezielle relative Syntax nach dem Baum verwenden (also nach dem Wurzelknoten).

Im folgenden Code habe ich mir die Freiheit genommen, einen Stil zu definieren, der automatisch und zu seinem Inhalt angledhinzufügt . Ich habe auch einen anderen Pfad für die Verbindungen verwendet (was meiner Meinung nach etwas besser aussieht, aber ich bin kein Linguist).<>

Code

\documentclass[tikz]{standalone}
\usepackage{forest}
\usetikzlibrary{paths.ortho}% http://tex.stackexchange.com/a/110172/16595
\forestset{angled/.style={content/.expanded={$<$\forestov{content}$>$}}}
\begin{document}
\begin{forest} s sep*=3
[TP
  [DP, tikz={\draw[blue, ->] () -- node[sloped, above] {\ttfamily !ul21} (!ul21);}
    [John, triangle] ]
  [T'
    [T]
    [\emph{v}P
      [DP
        [John, triangle, angled] ]
      [\emph{v}'
        [\emph{v}
          [V
            [likes, name=V1] ]
          [\emph{v} ] ]
        [VP
          [V
            [likes, angled, name=V2] ]
          [DP
            [Mary, triangle] ] ] ] ] ] ]
%
\path[rounded corners, du, -latex] (!2211) edge (!11)
                                   (V2)    edge (V1);
\end{forest}
\end{document}

Ausgabe

Bildbeschreibung hier eingeben

verwandte Informationen