
Ao desenhar representações sintáticas em linguística, muitas vezes utiliza-se um triângulo para representar uma unidade cuja estrutura interna é irrelevante. Isso pode ser feito com o tikz-qtree
comando \edge[roof]; {John}
.
Agora, às vezes preciso mostrar o movimento de uma unidade cuja estrutura interna é irrelevante para o assunto em questão. Para fazer isso, normalmente utilizo a positioning
biblioteca e defino um nó relativo ao nó acima do triângulo, assim:
\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}
Existe uma maneira mais fácil/melhor de fazer isso, onde não preciso definir um nó relativo cada vez que preciso mover uma unidade cuja estrutura interna é irrelevante (ou seja, cuja estrutura estou representando com um triângulo, usando o tikz-qtree
comando \edge[roof]; {John}
)?
Responder1
Você pode simplesmente transformar o texto do telhado em um nó. (Também simplifiquei um pouco a sintaxe da seta.)
\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}
Responder2
não sei tikz-qtree
mas comforest
, você pode acessar o nó da árvore com a !
sintaxe especial. O nó (!2211)
(em seus exemplos, é <John>
), é o da raiz ( TP
) do segundo filho ( T'
) do segundo filho ( vP
) do primeiro filho ( DP
) do primeiro filho ( <John>
).
Então, há sempre a possibilidade de dar um nome a um nó com a chave TikZ usual: name
(ou alias
se você precisar de mais de um nome).
Também existe a possibilidade de fornecer um nó relativo a outro (que na verdade é o caso geral da !
sintaxe). Neste exemplo, vamos u
p, depois para o l
último filho e para o 2
primeiro filho do segundo filho, 1
o que leva a (!ul21)
.
Cada um tem suas vantagens, dependendo de quão estática a árvore realmente é. Se você se movimenta muito, seria aconselhável dar aos nós um nome fixo. Se alguém sempre mantém relativo fixo para outro nó, você pode usar o nome do nó relativo. Se um nó sempre se mantém relativo à raiz, você pode usar a sintaxe relativa especial após a árvore (ou seja, após o nó raiz).
No código abaixo, tomei a liberdade de definir um estilo angled
que agrega <
e >
automaticamente ao seu conteúdo. Também usei outro caminho para as conexões (que acho um pouco melhor, mas não sou linguista).
Código
\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}