Isto é o que eu quero alcançar
e isto:
Mas tudo que consegui fazer com tikz-qtree foi o seguinte:
\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}
E isto:
\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}
O que renderiza:
e
A parte importante aqui é a ligação das folhas a mais de um dos pais (seria bom se eu tivesse a opção de deixar a linha tracejada também). Agora, o pst-asr não consegue o que eu quero. É importante que eu tenha as moras ('mu's). (Também é um pacote pstricks, o que significa que devo digitá-lo em DVIPSPDF.) Tentei um pouco do pacote florestal (especialmente floresta-GP1), mas também não consigo fazer com que funcione como desejo. Por último, alguns recomendaram o xyling, mas acho esse pacote muito difícil de usar.
Alguma recomendação?
Obrigado.
Responder1
Na verdade, você estava definitivamente no caminho certo: algumas pequenas adições ao seu código funcionam bem. Isso se baseia no fato de que tikz-qtree.sty
podemos usar \node
s, que podem ser nomeados e os nomes usados como coordenadas para \draw
ing. O segundo exemplo é um pouco mais complexo, pois uma linha é traçada entre duas árvores, exigindo \begin{scope}...\end{scope}
que as duas árvores possam aparecer uma ao lado da outra. Você pode ajustar a posição da segunda árvore alterando a xshift
quantidade.
\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}
O que resulta nisso:
Responder2
Isso é muito mais fácil de fazer forest
. Você pode usar a phantom
opção de colocar árvores lado a lado e, como cada sílaba é filha do nó fantasma, você pode nomear nós para as ramificações de vários domínios. Como essas linhas são desenhadas com comandos regulares do TikZ, você também precisa transformar a filha relevante em fantasma. Você pode adicionar qualquer decoração à linha (por exemplo [dashed]
) com opções regulares de TiKZ. Aqui estão seus dois exemplos resolvidos.
Primeiro, defini um estilo chamado syll
que torna as conexões dos nós estreitas, como estamos acostumados a ver na linguística. Além disso, como queremos que os segmentos se alinhem uns com os outros e que as ramificações se estendam até a camada segmentar, atribuímos todos os nós sem filhas à seg
camada. Também criei algumas macros para sílabas e 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}
Responder3
Você pode conseguir o que deseja no pst-asr e, se usar o XeTeX, tudo bem (o que é recomendado para linguística). Não estou na frente do meu computador agora, então codifique e produza mais tarde!
EDITAR
Aqui está o 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}
E a saída.