Das ist, was ich erreichen möchte
und das:
Aber alles, was ich mit tikz-qtree machen konnte, ist Folgendes:
\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}
Und das:
\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}
Das Ergebnis:
Und
Der wichtige Teil hier ist die Verknüpfung von den Blättern zu mehr als einem übergeordneten Element (es wäre schön, wenn ich die Option hätte, die Linie auch gestrichelt zu machen). Nun, pst-asr erreicht nicht ganz das, was ich will. Es ist wichtig, dass ich die Moras ('mu's) habe. (Außerdem ist es ein pstricks-Paket, was bedeutet, dass ich es in DVIPSPDF setzen muss.) Ich habe ein bisschen das forest-Paket ausprobiert (insbesondere forest-GP1), aber ich kann das auch nicht so zum Laufen bringen, wie ich will. Schließlich haben einige xyling empfohlen, aber ich finde dieses Paket sehr schwierig zu verwenden.
Irgendwelche Empfehlungen?
Danke.
Antwort1
Eigentlich waren Sie definitiv auf dem richtigen Weg: Einige kleinere Ergänzungen zu Ihrem Code funktionieren gut. Dies baut auf der Tatsache auf, dass s tikz-qtree.sty
verwendet werden können \node
, die benannt werden können und deren Namen als Koordinaten für \draw
ing verwendet werden können. Das zweite Beispiel ist etwas komplexer, da hier eine Linie zwischen zwei Bäumen gezogen wird, die \begin{scope}...\end{scope}
für die beiden Bäume erforderlich ist, damit sie nebeneinander erscheinen können. Sie können die Position des zweiten Baums anpassen, indem Sie den xshift
Betrag ändern.
\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}
Das ergibt Folgendes:
Antwort2
Dies ist mit viel einfacher zu bewerkstelligen forest
. Sie können die phantom
Option verwenden, Bäume nebeneinander zu platzieren, und da jede Silbe eine Tochter des Phantomknotens ist, können Sie Knoten für die Zweige mit mehreren Domänen benennen. Da diese Linien mit regulären TikZ-Befehlen gezeichnet werden, müssen Sie auch die entsprechende Tochter zu einem Phantom machen. Sie können der Linie beliebige Verzierungen hinzufügen (z. B. [dashed]
) mit regulären TiKZ-Optionen. Hier sind Ihre beiden ausgearbeiteten Beispiele.
Zuerst habe ich einen Stil namens festgelegt syll
, der die Knotenverbindungen so eng macht, wie wir es aus der Linguistik kennen. Da wir außerdem möchten, dass die Segmente aneinander ausgerichtet sind und die Zweige bis zur Segmentebene reichen, habe ich alle tochterlosen Knoten der seg
Ebene zugewiesen. Außerdem habe ich einige Makros für Silben und Moras erstellt.
\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}
Antwort3
Sie können in pst-asr erreichen, was Sie wollen, und wenn Sie XeTeX verwenden, ist alles in Ordnung (was für die Linguistik ohnehin empfohlen wird). Ich sitze jetzt nicht vor meinem Computer, also Code und Ausgabe später!
BEARBEITEN
Hier ist der Code.
\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}
Und die Ausgabe.