Representación autosegmental en tikz-qtree

Representación autosegmental en tikz-qtree

Esto es lo que quiero lograr

Vinculación de 'mu's a 'a'

y esto:

Vinculación de 'O' a 'l'

Pero todo lo que he podido hacer con tikz-qtree es lo siguiente:

\documentclass[12pt,a4]{article}
\usepackage[utf8]{inputenc}
\usepackage{tipa,tikz,tikz-qtree}
\begin{document}

\begin{tikzpicture} [baseline]
\tikzset{frontier/.style={distance from root=90pt}}
\Tree
[.$\sigma$ [.O [ p ] ]
[.R [.$\mu$ a ] [.$\mu$ : ] ] ]
\end{tikzpicture}
\begin{tikzpicture} [baseline]
\tikzset{frontier/.style={distance from root=90pt}}
\Tree
[.$\sigma$ [.O [ p ] ]
[.R [.$\mu$ a ]  ] ]
\end{tikzpicture}

Y esto:

\begin{tikzpicture}[baseline]
\tikzset{frontier/.style={distance from root=90pt}}
\Tree
[.$\sigma$ [.O [ l ] ]
[.R [.$\mu$ a ] [.$\mu$ l ] ] ]
\end{tikzpicture}
\begin{tikzpicture} [baseline]
\tikzset{frontier/.style={distance from root=90pt}}
\Tree
[.$\sigma$ [.O [ : ] ]
[.R [.$\mu$ a ] [ l ] ] ]
\end{tikzpicture}
\end{document}

Lo que representa:

ingrese la descripción de la imagen aquí

y

ingrese la descripción de la imagen aquí

La parte importante aquí es la vinculación de las hojas a más de un padre (sería bueno si tuviera la opción de hacer que la línea también fuera discontinua). Ahora, pst-asr no logra lo que quiero. Es importante que tenga las moras ('mu's). (También es un paquete pstricks, lo que significa que debo escribirlo en DVIPSPDF). He probado un poco del paquete forest (especialmente forest-GP1), pero tampoco puedo hacer que funcione como quiero. Por último, algunos han recomendado xyling, pero encuentro que ese paquete es muy difícil de usar.

¿Alguna recomendación?

Gracias.

Respuesta1

En realidad, definitivamente estabas en el camino correcto: algunas adiciones menores a tu código funcionan muy bien. Esto se basa en el hecho de que tikz-qtree.styse pueden usar \nodes, que se pueden nombrar y los nombres se pueden usar como coordenadas para \drawing. El segundo ejemplo es un poco más complejo en el sentido de que se traza una línea entre dos árboles, lo que requiere \begin{scope}...\end{scope}que los dos árboles puedan aparecer uno al lado del otro. Puede ajustar la posición del segundo árbol cambiando la xshiftcantidad.

\documentclass{article}

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

\begin{document}

\begin{tikzpicture} [baseline]
\begin{scope}
\Tree
[.$\sigma$ [.O [ p ] ]
[.R [.$\mu$ \node[red](a){a}; ] \node(m){$\mu$}; ] ]
\draw (m.south) -- (a.north);
\end{scope}
\begin{scope}[xshift=0.65in]
\tikzset{frontier/.style={distance from root=90pt}}
\Tree
[.$\sigma$ [.O [ p ] ]
[.R [.$\mu$ a ]  ] ]
\end{scope}
\end{tikzpicture}

\begin{tikzpicture}[baseline]
\begin{scope}
\Tree
[.$\sigma$ [.O [ l ] ]
[.R [.$\mu$ a ] [.$\mu$ \node(l){l}; ] ] ]
\end{scope}
\begin{scope}[xshift=0.75in]
\Tree
[.$\sigma$ [.\node(O){O};  ]
[.R [.$\mu$ a ] [ l ] ] ]
\draw[dashed] (O.south) -- (l.north);
\end{scope}
\end{tikzpicture}

\end{document}

Lo que produce esto:

Salida actualizada.

Respuesta2

Esto es mucho más fácil de hacer forest. Puede usar la phantomopción para colocar árboles uno al lado del otro y, dado que cada sílaba es hija del nodo fantasma, puede nombrar nodos para las ramas multidominio. Dado que estas líneas se dibujan con comandos normales de TikZ, también debes crear el fantasma secundario correspondiente. Puede agregar cualquier decoración a la línea (p. ej. [dashed]) con las opciones habituales de TiKZ. Aquí están sus dos ejemplos resueltos.

Primero, establecí un estilo llamado syllque hace que las conexiones de los nodos sean estrechas, como estamos acostumbrados a ver en lingüística. Además, como queremos que los segmentos se alineen entre sí y que las ramas se extiendan hasta la capa segmentaria, asigné todos los nodos sin hijas al segnivel. También he creado un par de macros para sílabas y moras.

\documentclass{article}
\usepackage{forest}
\newcommand{\syl}{$\sigma$}
\newcommand{\mor}{$\mu$}
\forestset{syll/.style=
   {for tree={parent anchor=south,child anchor=north,
              align=center,inner sep=0pt,
              where n children=0{tier=seg}{}}}}
\begin{document}
\begin{forest}syll
[,phantom, s sep=1em
[\syl [O [p,tier=seg ]]
      [R [\mor [a,name=aa] ] [\mor,name=M [,phantom] ]]]
[\syl [O [p,tier=seg ]]
      [R [\mor [a] ]]]
]
\draw (M.south) -- (aa.north);
\end{forest}

\begin{forest}syll
[,phantom, s sep=1em
[\syl [O [l ]]
      [R [\mor [a]] [\mor [l,name=LL]]]]
[\syl [O,name=O [,phantom] ]
      [R [\mor [a] [l]]]]
]
\draw[dashed] (O.south) -- (LL.north);
\end{forest}


\end{document}

salida de código

Respuesta3

Puedes lograr lo que quieras en pst-asr, y si usas XeTeX irás bien (que de todos modos se recomienda para lingüística). No estoy frente a mi computadora ahora, ¡así que codifica y genera más tarde!

EDITAR

Aquí está el código.

\documentclass{article}

\usepackage{pst-asr}
    \psset{everyasr=\tiershortcuts}
    \newpsstyle{dashed}{linestyle=dashed,dash=3pt 2pt}

\begin{document}

\newtier{con}
\psset{con=7ex (O)}
\newtier{sig}
\psset{sig=13ex (O)}
\asr[reptype=nots, sy=2ex ($\mu$)] |
    \@(0,ph){p}
    \@(1,ph){a}
    \@(3,ph){p}
    \@(4,ph){a}
    \@(1,sy){$\mu$}\-(1,ph)
    \@(2,sy){$\mu$}\-(1,ph)
    \@(4,sy){$\mu$}\-(4,ph)
    \@(0,con){O}\-(0,ph)
    \@(1,con){R}\-(1,sy)\-(2,sy)
    \@(3,con){O}\-(3,ph)
    \@(4,con){R}\-(4,sy)
    \@(.5,sig){$\sigma$}\-(0,con)\-(1,con)
    \@(3.5,sig){$\sigma$}\-(3,con)\-(4,con)
\endasr

\bigskip

\asr[reptype=nots, sy=2ex ($\mu$)] |
    \@(0,ph){l}
    \@(1,ph){a}
    \@(2,ph){l}
    \@(4,ph){a}
    \@(5,ph){l}
    \@(1,sy){$\mu$}\-(1,ph)
    \@(2,sy){$\mu$}\-(2,ph)
    \@(4,sy){$\mu$}\-(4,ph)
    \@(0,con){O}\-(0,ph)
    \@(1,con){R}\-(1,sy)\-(2,sy)
    \@(3,con){O}\-[style=dashed](2,ph)
    \@(4,con){R}\-(4,sy)\-(5,ph)
    \@(.5,sig){$\sigma$}\-(0,con)\-(1,con)
    \@(3.5,sig){$\sigma$}\-(3,con)\-(4,con)
\endasr

\end{document}

Y la salida.

producción

información relacionada