Esto es lo que quiero lograr
y esto:
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:
y
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.sty
se pueden usar \node
s, que se pueden nombrar y los nombres se pueden usar como coordenadas para \draw
ing. 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 xshift
cantidad.
\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:
Respuesta2
Esto es mucho más fácil de hacer forest
. Puede usar la phantom
opció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 syll
que 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 seg
nivel. 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}
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.