Agregar una especificación relativa a dos hijas, una con estatus especial, en el bosque

Agregar una especificación relativa a dos hijas, una con estatus especial, en el bosque

Quiero producir la siguiente figura con forest:

Tallo tesniereiano

Entonces, lo que estoy buscando es una especificación de estilo que diga que la hija 1 (frapp) y la hija 2 (hormiga) juntas se relacionan con A. La hija 2 (hormiga) es más importante, que está marcada en la figura por la línea descendente que se dobla hacia la derecha debajo ant.

¿Hay alguna manera de integrarlo en el siguiente ejemplo?

\documentclass{article}

\usepackage{forest}


\begin{document}

\begin{forest}
[un exemple
  [A
    [frapp]
     [ant] ] ]
\end{forest}


\end{document}

Son dos relaciones que involucran tres elementos: A es la madre de frapp y ant. Y la hormiga es la cabeza (elemento más importante) dentro de A. ¿Existe una buena manera de hacer esto con forestestilos?

Editar:

Seguí la sugerencia y experimenté un poco con edge path. Esto es lo que tengo:

\documentclass{article}

\usepackage{forest}

\forestset{
dg translation/.style={edge path={\noexpand\path[\forestoption{edge}]
(!u.parent anchor)-- +(0,-l)
(!p.north west)--(.north east)\forestoption{edge label};}}
}

\begin{document}

\begin{forest}
[un example
  [A
    [frapp, no edge]
     [ant, dg translation] ] ]
\end{forest}


\end{document}

Esto produce:

ingrese la descripción de la imagen aquí

Una línea recta de longitud lhacia el sur y una línea que cubre a las dos hijas. Luego tendría que elevar la línea para que vuelva a estar en el nivel de A (y agregar algo de curvatura). Pero no sé cómo saco la distancia. No es lsino un poquito menos. Alternativamente, podría dibujar desde abajo de A, pero no sé qué tan lejos hacia la izquierda y hacia la derecha ir, ya que esto depende del tamaño de las hijas.

También tuve que especificar no edgesobre la otra hija. Si esto pudiera evitarse de alguna manera, sería genial.

Edición 2:

Bien, siguiendo un comentario de cfr, me deshice de la no edgeespecificación en el árbol:

\documentclass{article}

\usepackage{forest}

\forestset{
dg translation/.style={edge path={\noexpand\path[\forestoption{edge}]
(!u.parent anchor)-- +(0,-l)
(!p.north west)--(.north east)\forestoption{edge label};},!p.edge'={}}
}

\begin{document}

\begin{forest}
[un example
  [A
    [frapp]
     [ant, dg translation] ] ]
\end{forest}


\end{document}

Pero todavía no sé cómo debo dibujar la línea curva debajo de A. El comentario no me ayuda aquí.

Edición 3:

DE ACUERDO. Llegué hasta aquí:

\documentclass{article}

\usepackage{forest}
\usetikzlibrary{calc}


\forestset{
dg translation/.style={edge path={\noexpand\path[\forestoption{edge}, rounded corners=3pt]
% the line downwards
(!u.parent anchor)-- +($(0,-l)-(0,12pt)$)-- +($(12pt,-l)-(0,12pt)$)
% the horizontal line
($(!p.north west)+(0,l)-(0,14pt)$)--($(.north east)+(0,l)-(0,14pt)$)\forestoption{edge label};},!p.edge'={}}
}

\begin{document}

\begin{forest}
[un exemple
  [A
    [frapp]
     [ant, dg translation] ] ]
\end{forest}


\end{document}

Esto produce la siguiente imagen:

ingrese la descripción de la imagen aquí

Hay varias cosas con las que no estoy satisfecho: El código contiene un desplazamiento manual hacia arriba de 14 puntos. Esto no funciona con otros tamaños de fuente.

Otra pregunta es cómo consigo que la línea horizontal tenga curvas. Encontré algunas formas de influir en la línea tikz, pero estas son opciones para la ruta y no parece posible tener dos rutas de borde diferentes forest. Entonces, si especifico opciones, rounded cornersafecta a todas las partes de la ruta, pero quiero tener dos rutas separadas. ¿Hay alguna forma de hacer esto?

Respuesta1

EDITARMi respuesta original solo funciona conbosqueversión 1. El código siguiente no solo es más simple, sino que funciona igualmente bien con la versión 1 y la versión 2.


Esta fue mi solución. Tenga en cuenta que la solución de Stefan Müller para configurar no edgeel hermano fue mucho más clara que mi uso explícito node walken la versión original de este código, aunque la versión actualizada a continuación es aún más simple.

Utilizo la tikztecla para dibujar la línea horizontal curva, en lugar de intentar ponerla en el edgecamino. Esto hace que sea fácil estar seguro de que los nodos a los que hago referencia existen, aunque esto podría incorporarse al dibujo edgecon un poco de cuidado.

'VIN' es, por supuesto, el equivalente de los nodos al 'VIP' de las personas.

\documentclass[tikz,border=10pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
  for tree={
    parent anchor=south,
    child anchor=north,
  },
  vin/.style={
    child anchor=south west,
    edge path={
      \noexpand\path [draw, \forestoption{edge}]
      (!u.parent anchor) -- (!u.parent anchor |- .west) [out=-90, in=180] to (.child anchor)\forestoption{edge label};
    },
    for parent={
      before packing={
        tikz={
          \draw (!1.north west |- .parent anchor) [out=30, in=170] to (.parent anchor) [out=-10, in=-150] to (!l.north east |- .parent anchor);
        },
      },
    },
    before typesetting nodes={
     !p.no edge,
    },
  }
  [un exemple
    [A
      [frapp
      ]
      [ant, vin
      ]
    ]
  ]
\end{forest}
\end{document}

caminos curvos

información relacionada