Definición de nodo dentro de llaves

Definición de nodo dentro de llaves

Estoy intentando definir un nodo dentro de llaves {}:

\documentclass{article}

\usepackage{tikz}
\usepackage{tikz-qtree}

\begin{document}

\begin{tikzpicture}
\Tree [.CP \node(y){here}; [.C$'$ C [.TP \edge[roof]; {Some text \node(x){here};} ]]]
\end{tikzpicture}

\end{document}

Necesito definir el nodo x dentro del entorno {} ya que quiero que tikz-qtree trate la cadena 'Algo de texto aquí' como una sola unidad. Sin embargo, si coloco el punto y coma después del primer o segundo corchete de cierre, no funciona.

Respuesta1

Dado que el texto dentro del nodo techado es un nodo en sí mismo internamente y no se pueden incrustar nodos dentro de nodos, es necesario abordar este problema de una manera ligeramente diferente. La idea básica es convertir el nodo padre del nodo techado en el nodo nombrado. Luego, si desea mostrar, por ejemplo, una flecha de cada uno de los nodos, debe desplazar el punto inicial de la flecha en relación con el nodo principal. He aquí un ejemplo:

\documentclass{article}

\usepackage{tikz}
\usepackage{tikz-qtree}

\begin{document}

\begin{tikzpicture}
\Tree [.CP \node(y){here}; [.C$'$ C [.\node(x){TP}; \edge[roof];  {Some text here} ]]]
\draw [->] (x.south)++(.9,-1) to[out=-90,in=-90,looseness=2] (y.south); 
\end{tikzpicture}

\end{document}

Un método alternativo (que quizás sea un poco más simple) es definir el texto del techo como un nodo y luego simplemente usar el [xshift]parámetro para desplazar el punto inicial de la flecha al lugar deseado:

\documentclass{article}

\usepackage{tikz}
\usepackage{tikz-qtree}

\begin{document}

\begin{tikzpicture}
\Tree [.CP \node(y){here}; [.C$'$ C [.TP \edge[roof];  \node(x){Some text here}; ]]]
\draw [->] ([xshift=2.5em]x.south) to[out=-90,in=-90,looseness=2] (y.south); 
\end{tikzpicture}

\end{document}

salida de código

Respuesta2

En caso de que se le haya escapado a alguien, tiendo a preferirlo forestcuando dibujo árboles.

Esta solución no requiere repetir manualmente la palabra "aquí" ni ajustar manualmente la posición del inicio de la flecha. Está basado en un ejemplo de la página 20 del manual, aunque es posible que lo haya estropeado un poco.

  • trianglese utiliza para el techo
  • Se define un estilo move={}{}que toma 2 argumentos: el primero especifica el nodo al que se debe copiar el contenido; el segundo especifica texto adicional para agregar al nodo actual.

Supongo que es posible que no quieras hacer exactamente esto, por lo que esto es más a modo de ilustración que una solución lista para usar. En el ejemplo que diste, pondrías move={<specification of target node>}{Some text}y especificarías el contenido del nodo de origen como here.

El nodo de origen terminaría conteniendo Some text here, el nodo de destino terminaría conteniendo herey se dibujaría una flecha entre un punto justo debajo hereen el nodo de origen y uno justo debajo hereen el nodo de destino.

He utilizado un 'recorrido relativo por nodos' para especificar el nodo objetivo. Sin embargo, también podría agregarlo , name=targeta su nodo de destino y luego simplemente colocarlo move={target}{Some text}, lo cual probablemente sea más simple en la mayoría de los casos. Agregué esta alternativa como código comentado en el árbol para demostrar la idea.

\documentclass[tikz,border=5pt]{standalone}
\usepackage{forest}
\begin{document}
  \newlength{\sourcetextaddwidth}
  \begin{forest}
    for tree={
      parent anchor=south,
      child anchor=north,
      fit=rectangle
    },
    move/.style n args=2{% page 20 of forest manual
      before typesetting nodes={
        TeX={
          \settowidth{\sourcetextaddwidth}{#2}
        },
        #1.content={##1},
        content={#2 ##1},
        tikz={
          \draw[->] (.south) +(.5\sourcetextaddwidth,0) to [out=south west, in=south] (#1);
        },
      },
    },
    [CP
      [this is the target node to which text will be moved%, name=target
      ]
      [C$'$
        [C
        ]
        [TP
          [here, triangle, move={!r1}{Some text}% move={target}{Some text}
          ]
        ]
      ]
    ]
  \end{forest}
\end{document}

árbol automatizado

información relacionada