Me pregunto cómo puedo agregar algunas líneas tachadas en un árbol fonológico. Aquí está mi código:
\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{tipa}
\begin{document}
\begin{tikzpicture}[baseline]
\tikzset{frontier/.style={distance from root=85pt}}
\Tree
[.$\omega$
[.$\sigma$ \textipa{P} [.$\mu$ e ] [.$\mu$ \node(a){t}; ] ] [.\node(x){$\sigma$}; [.$\mu$ e ] ]
[.\node(b){$\sigma$}; n [.$\mu$ \node(c){e}; ] [.\node(d){$\mu$}; ] ] [.$\sigma$ h [.$\mu$ \node(f){u}; ] [.\node(e){$\mu$}; ] ] ]
\draw (d.south) -- (c.north);
\draw (e.south) -- (f.north);
\draw (x.south) -- (a.north);
\end{tikzpicture}
\end{document}
\end{document}
Esto es lo que produce:
Vi en un artículo un árbol fonológico similar con algunas líneas tachadas que simbolizaban que ciertas características no terminaban aflorando en la realización fonética de la palabra. Se veía así:
Están encima de la "b" y la "i" en esa imagen.
¿Existe algún código como ese que pueda poner en mi árbol fonológico? Me gustaría agregarlo a la línea entre sigma y "t" y entre esa misma sigma y mu justo debajo.
Se agradece mucho cualquier ayuda.
¡Gracias!
Respuesta1
EDITAR: Siguiendo la sugerencia de Alan Munn, un \tiny
signo igual se ve mejor y reduce la necesidad de cambiar de nodo.
Puede colocar un nodo con el símbolo =
en los bordes del árbol para simular un tachado.
Para las líneas manuales (por ejemplo, entre el nodo 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 darle un nombre a los nodos del árbol para poder calcular la posición intermedia. Tenga en cuenta también que necesita calc
tikzlibrary.
Si desea rotar el tachado (como en el ejemplo), puede agregarlo rotate=
al nodo. También puede calcular automáticamente el ángulo \pgfmathanglebetweenpoints
si no desea estimar el valor manualmente. Sin embargo, es posible que aún sean necesarios algunos ajustes manuales. En mi humilde opinión, un tachado sin rotación 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 ambas con un componente y distinto de cero).
MWE:
\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{tipa}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[baseline]
\tikzset{frontier/.style={distance from root=85pt}}
\Tree
[.$\omega$
[.$\sigma$ \textipa{P} [.$\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
\pgfmathanglebetweenpoints{\pgfpointanchor{x}{center}}{\pgfpointanchor{a}{center}}
\edef\angleXA{\pgfmathresult}
\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) {=};
\end{tikzpicture}
\end{document}
Resultado:
Respuesta2
Aquí hay un enfoque diferente al problema que requiere menos intervención manual y tiene una sintaxis intuitiva. También le permite usarlo como \edge
estilo en una rama existente del árbol sin especificar ningún nodo.
\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{tipa}
\usetikzlibrary{decorations,decorations.text}
\tikzset{delink/.style={
decorate,
postaction={decorate,
decoration={text along path,
text align=center,
text={|\tiny|=},
transform={rotate=90}}}}}
\begin{document}
\begin{tikzpicture}[baseline]
\tikzset{frontier/.style={distance from root=85pt}}
\Tree
[.$\omega$ \edge[delink];
[.$\sigma$ \textipa{P} [.$\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);
\end{tikzpicture}
\end{document}
Una forest
solución
El forest
paquete proporciona una forma más sencilla de agregar nodos con nombre a los árboles, por lo que personalmente usaría forest
este tipo de árboles. delink
También se puede utilizar el mismo estilo. Aquí está el mismo código usando forest
. Agregué código para formatear automáticamente el nivel segmentario usando tipa
(para que no sea necesario envolverlos \textipa
) y luego cada segmento tendrá la misma fuente. Para que esto funcione, si un nodo mora tiene un dependiente segmentario directo (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.
\documentclass{article}
\usepackage{tikz}
\usepackage[linguistics]{forest}
\usepackage{tipa}
\usetikzlibrary{decorations,decorations.text}
\tikzset{delink/.style={
decorate,
postaction={decorate,
decoration={text along path,
text align=center,
text={|\tiny|=},
transform={rotate=90}}}}}
\newcommand{\syl}{$\sigma$}
\newcommand{\mor}{$\mu$}
\newcommand{\word}{$\omega$}
\forestset{prosodic tree/.style=
{for tree={if n children=0{tier=seg,font=\tipaencoding}{},inner sep=0pt,s sep=1em}}}
\begin{document}
\begin{forest}prosodic 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);}
\end{forest}
\end{document}