Mapas entre árboles enraizados usando bosque (y TiKz)

Mapas entre árboles enraizados usando bosque (y TiKz)

Tuve que dibujar árboles (con hojas) enraizados (orientados hacia arriba). encontré el paquetebosqueútil, aunque lo más probable es que las soluciones que utilicé no sean realmente óptimas en ningún sentido adecuado. Un ejemplo de tal árbol puede ser el siguiente.

\documentclass[a4paper,10pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{forest}
%opening
\title{}
\author{}
\date{}

\begin{document}
\begin{center}
 \begin{forest}
for tree={grow'=north, circle, draw, minimum width=0.7cm,anchor=center,fit=rectangle,
    edge={>=stealth,-,shorten >=1pt,shorten <=1pt,line width=0.5pt},
    scale=0.75,font=\sffamily\small\bfseries}
    %
 [, node options'
  [$l$, edge label={node[midway,right,font=\scriptsize]{a}}
    [$l'$, edge label={node[midway,left,font=\scriptsize]{b}}
      [, node options', edge label={node[midway,left,font=\scriptsize]{e}}]
      [, node options', no edge
    ]
      [, node options', edge label={node[midway,right,font=\scriptsize]{f}}]
    ]
    [, node options', no edge
    ]
    [, node options', edge label={node[midway,left,font=\scriptsize]{c}}
    ]
    [, node options', no edge
    ]
    [$l''$, edge label={node[midway,right,font=\scriptsize]{d}}
    ]
  ]
 ]
\end{forest}\end{center}
\end{document}

Pregunta.¿Cómo puedo dibujar una flecha de un árbol enraizado a otro, como se hace (usando xypic) en la página 7 de este documento [1]?

[1]http://arxiv.org/pdf/math/0701293v2.pdf

Respuesta1

Otra opción, que permite quizás un control más preciso sobre las flechas en caso de quecfrla soluciónno se puede usar directamente, sería colocar los árboles en \nodelos s de TikZ y luego usar los nombres de los nodos para dibujar las flechas.

La forma más segura de hacer esto sería colocar primero los árboles en cajas y luego usar las cajas dentro de un tikzpicture; en el siguiente ejemplo utilicé el mismo árbol tres veces, pero esta misma idea se puede aplicar para diferentes árboles usando un cuadro diferente para cada uno de los árboles.

ingrese la descripción de la imagen aquí

El código:

\documentclass[a4paper,10pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{forest}
\usetikzlibrary{positioning}

\newsavebox\boxa% we define a new box

% we fill the box
\savebox\boxa{%
\begin{forest}
for tree={grow'=north, circle, draw, minimum width=0.7cm,anchor=center,fit=rectangle,
    edge={>=stealth,-,shorten >=1pt,shorten <=1pt,line width=0.5pt},
    scale=0.75,font=\sffamily\small\bfseries}
    %
 [, node options'
  [$l$, edge label={node[midway,right,font=\scriptsize]{a}}
    [$l'$, edge label={node[midway,left,font=\scriptsize]{b}}
      [, node options', edge label={node[midway,left,font=\scriptsize]{e}}]
      [, node options', no edge
    ]
      [, node options', edge label={node[midway,right,font=\scriptsize]{f}}]
    ]
    [, node options', no edge
    ]
    [, node options', edge label={node[midway,left,font=\scriptsize]{c}}
    ]
    [, node options', no edge
    ]
    [$l''$, edge label={node[midway,right,font=\scriptsize]{d}}
    ]
  ]
 ]
\end{forest}%
}

\begin{document}

\begin{center}
\begin{tikzpicture}[node distance=0.5cm and 0.5cm]
\node[inner sep=0pt] (uc)
  {\usebox\boxa};
\node[inner sep=0pt,below left=of uc] (ll)
  {\usebox\boxa};
\node[inner sep=0pt,below right=of uc] (lr)
  {\usebox\boxa};
\begin{scope}[shorten >=10pt,shorten <=10pt]
\draw[->]
  (ll.north) -- node[auto] {$\partial_{v}$} (uc);  
\draw[->]
  (lr.north) -- node[swap,auto] {$\partial_{w}$} (uc);  
\end{scope}
\end{tikzpicture}
\end{center}

\end{document}

Respuesta2

Una forma es dibujar los árboles como un solo árbol con un nodo raíz fantasma:

\documentclass[tikz,border=5pt]{standalone}
\usepackage[utf8]{inputenc}% just for this example as my editor uses this encoding
\usepackage[T1]{fontenc}
\usepackage{forest}

\begin{document}
\begin{forest}
for tree={grow'=north, circle, draw, minimum width=0.7cm,anchor=center,fit=rectangle,
    edge={>=stealth,-,shorten >=1pt,shorten <=1pt,line width=0.5pt},
    scale=0.75,font=\sffamily\small\bfseries}
    %
[,phantom, l sep=0pt, s sep+=20pt
  [, node options'
    [$l$, edge label={node[midway,right,font=\scriptsize]{a}}
      [$l'$, edge label={node[midway,left,font=\scriptsize]{b}}
        [, node options', edge label={node[midway,left,font=\scriptsize]{e}}]
        [, node options', no edge
      ]
        [, node options', edge label={node[midway,right,font=\scriptsize]{f}}]
      ]
      [, node options', no edge
      ]
      [, node options', edge label={node[midway,left,font=\scriptsize]{c}}
      ]
      [, node options', no edge
      ]
      [$l''$, edge label={node[midway,right,font=\scriptsize]{d}}, name=node1
      ]
    ]
  ]
  [, node options'
    [$l$, edge label={node[midway,right,font=\scriptsize]{a}}
      [$l'$, edge label={node[midway,left,font=\scriptsize]{b}}, name=node2
        [, node options', edge label={node[midway,left,font=\scriptsize]{e}}]
        [, node options', no edge
      ]
        [, node options', edge label={node[midway,right,font=\scriptsize]{f}}]
      ]
      [, node options', no edge
      ]
      [, node options', edge label={node[midway,left,font=\scriptsize]{c}}
      ]
      [, node options', no edge
      ]
      [$l''$, edge label={node[midway,right,font=\scriptsize]{d}}
      ]
    ]
  ]
]
  \draw [->, >=stealth, shorten >=10pt, shorten <=10pt, thick] (node1.east) -- (node2.west);
\end{forest}
\end{document}

raíz fantasma

información relacionada