Saltar al contenido

Líneas tachadas en un árbol fonológico

Después de mucho luchar ya hallamos la contestación de esta contratiempo que muchos lectores de nuestro sitio web han presentado. Si tienes algo más que aportar no dudes en aportar tu información.

Solución:

Aquí hay un enfoque diferente al problema que requiere menos intervención manual y tiene una sintaxis intuitiva. También te permite usarlo como edge estilo en una rama existente del árbol sin especificar ningún nodo en absoluto.

documentclassarticle
usepackagetikz
usepackagetikz-qtree
usepackagetipa
usetikzlibrarydecorations,decorations.text
tikzsetdelink/.style=
    decorate,
    postaction=decorate,
    decoration=text along path,
        text align=center,
        text=tiny,
        transform=rotate=90


begindocument

begintikzpicture[baseline]
tikzsetfrontier/.style=distance from root=85pt
Tree
[.$omega$ edge[delink];
[.$sigma$ textipaP  [.$mu$ e ] [.$mu$ node(a)t; ] ]
[.node(x)$sigma$; [.node(y)$mu$; e ] ]
[.node(b)$sigma$; edge[delink];  n [.$mu$ node(c)e; ] [.node(d)$mu$;  ] ]
[.$sigma$ h [.$mu$ node(f)u;  ] [.node(e)$mu$; ] ]
]

draw[delink] (d.south) -- (c.north);
draw[delink] (e.south) -- (f.north);
draw[delink] (x.south) -- (a.north);

endtikzpicture
enddocument

salida de código

A forest solución

los forest El paquete proporciona una forma más sencilla de agregar nodos con nombre a los árboles, por lo que personalmente usaría forest para hacer este tipo de árboles. Lo mismo delink el estilo también se puede usar con él. Aquí está el mismo código usando forest. Agregué código para formatear automáticamente el nivel segmentario usando tipa (por lo que no es necesario envolverlos textipa) y luego cada segmento estará en la misma fuente. Para que esto funcione, si un nodo mora no tiene dependientes segmentarios directos (es decir, está vinculado a un segmento que ya está dominado por un nodo mora), debe indicar explícitamente que el nodo está en el mora nivel.

documentclassarticle
usepackagetikz
usepackage[linguistics]forest
usepackagetipa
usetikzlibrarydecorations,decorations.text
tikzsetdelink/.style=
    decorate,
    postaction=decorate,
    decoration=text along path,
        text align=center,
        text=,
        transform=rotate=90

newcommandsyl$sigma$
newcommandmor$mu$
newcommandword$omega$
forestsetprosodic tree/.style=
   for tree=if n children=0tier=seg,font=tipaencoding,inner sep=0pt,s sep=1em
begindocument
beginforestprosodic tree
[word 
[syl,edge=delink [P]  [mor [e] ] [mor [t,name=a ] ] ]
[syl,name=x  [mor,name=y  [e] ] ]
[syl,name=b [n] [mor [e,name=c ] ]  [mor,name=d,tier=mora ] ]
[syl [h] [mor  [u,name=f ] ]  [mor,name=e,tier=mora ] ]
]
draw[delink] (d.south) -- (c.north);
draw[delink] (e.south) -- (f.north);
draw[delink] (x.south) -- (a.north);
endforest
enddocument

salida del código forestal

EDITAR: Siguiendo la sugerencia de Alan Munn, un tiny el signo igual se ve mejor y reduce la necesidad de cambiar de nodo.


Puedes poner un nodo con el símbolo = en los bordes del árbol para simular un tachado.

Para las líneas manuales (p. Ej., Entre nodos x y a) puede agregar un nodo en la posición intermedia en la declaración del dibujo lineal. Para las líneas automáticas (por ejemplo, entre σ y μ), puede agregar un nodo separado en el punto medio. Tenga en cuenta que debe dar un nombre a los nodos del árbol para poder calcular la posición intermedia. Tenga en cuenta también que necesita el calc tikzlibrary.

Si desea rotar el tachado (como en el ejemplo), puede agregar rotate= al nodo. También puede calcular automáticamente el ángulo usando pgfmathanglebetweenpoints si no desea estimar manualmente el valor. Sin embargo, es posible que aún sea necesario realizar algunos ajustes manuales. En mi humilde opinión, un tachado no rotado también se ve bien.

Puede cambiar la posición vertical del tachado cambiando la relación a, por ejemplo, 0.6, y la posición horizontal agregando una pequeña cantidad a la coordenada, por ejemplo, +(0.05,0) (o cambiar ambos con un componente y distinto de cero).

MWE:

documentclassarticle
usepackagetikz
usepackagetikz-qtree
usepackagetipa
usetikzlibrarycalc
begindocument

begintikzpicture[baseline]
tikzsetfrontier/.style=distance from root=85pt
Tree
[.$omega$
[.$sigma$ textipaP [.$mu$ e ] [.$mu$ node(a)t; ] ] [.node(x)$sigma$; [.node(y)$mu$; e ] ]
[.node(b)$sigma$;  n [.$mu$ node(c)e; ] [.node(d)$mu$;  ] ] [.$sigma$ h [.$mu$ node(f)u;  ] [.node(e)$mu$; ] ] ]

% compute angle between nodes
pgfmathanglebetweenpointspgfpointanchorxcenterpgfpointanchoracenter
edefangleXApgfmathresult

draw (d.south) -- (c.north);
draw (e.south) -- (f.north);
draw (x.south) -- (a.north) node[rotate=60-angleXA,pos=.5,font=tiny] (st1) =;
% alternative, not rotated
%draw (x.south) -- (a.north) node[pos=.5,font=tiny] (st1) =;

% shifted node, normal size
% node at ($(x)!0.6!(y)+(0.04,0)$) (st2) =;
% alternative, not shifted, font=tiny:
node[font=tiny] at ($(x)!0.5!(y)$) (st2) =;

endtikzpicture
enddocument

Resultado:

ingrese la descripción de la imagen aquí

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *