Ich frage mich, wie ich einem phonologischen Baum einige durchgestrichene Linien hinzufügen kann. Hier ist mein Code:
\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}
Das ist das Ergebnis:
Ich habe in einem Artikel einen ähnlichen phonologischen Baum mit einigen durchgestrichenen Linien gesehen, die symbolisierten, dass bestimmte Merkmale bei der phonetischen Umsetzung des Wortes nicht zum Vorschein kamen. Er sah folgendermaßen aus:
In diesem Bild stehen sie über dem „b“ und dem „i“.
Gibt es einen solchen Code, den ich in meinen phonologischen Baum einfügen könnte? Ich würde ihn gerne in die Zeile zwischen dem Sigma und dem „t“ und zwischen demselben Sigma und dem direkt darunter liegenden „mu“ einfügen.
Jede Hilfe wird sehr geschätzt.
Danke schön!
Antwort1
BEARBEITEN: Wenn man dem Vorschlag von Alan Munn folgt, \tiny
sieht ein Gleichheitszeichen besser aus und reduziert die Notwendigkeit einer Knotenverschiebung.
Sie können einen Knoten mit dem Symbol =
an die Baumkanten setzen um ein Durchstreichen zu simulieren.
Für die manuellen Linien (z. B. zwischen Knoten x
und a
) können Sie in der Linienzeichnungsanweisung einen Knoten an der Mitte hinzufügen. Für die automatischen Linien (z. B. zwischen σ und μ) können Sie an der Mitte einen separaten Knoten hinzufügen. Beachten Sie, dass Sie den Baumknoten einen Namen geben sollten, um die Mitte berechnen zu können. Beachten Sie auch, dass Sie die calc
Tikz-Bibliothek benötigen.
Wenn Sie den Durchstreichungswinkel drehen möchten (wie im Beispiel), können Sie rotate=
dem Knoten etwas hinzufügen. Sie können den Winkel auch automatisch berechnen, \pgfmathanglebetweenpoints
wenn Sie den Wert nicht manuell schätzen möchten. Allerdings kann es dennoch erforderlich sein, einige manuelle Anpassungen vorzunehmen. Meiner Meinung nach sieht ein nicht gedrehter Durchstreichungswinkel auch gut aus.
Sie können die vertikale Position des Durchgestrichenen verschieben, indem Sie das Verhältnis beispielsweise auf ändern, 0.6
und die horizontale Position, indem Sie der Koordinate einen kleinen Betrag hinzufügen, beispielsweise +(0.05,0)
(oder beide mit einer von Null verschiedenen y-Komponente verschieben).
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}
Ergebnis:
Antwort2
Hier ist ein anderer Ansatz für das Problem, der weniger manuelle Eingriffe erfordert und eine intuitive Syntax hat. Außerdem können Sie ihn als Stil auf einem vorhandenen Zweig des Baums verwenden, \edge
ohne überhaupt Knoten anzugeben.
\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}
Eine forest
Lösung
Das forest
Paket bietet eine einfachere Möglichkeit, benannte Knoten zu Bäumen hinzuzufügen, daher würde ich persönlich forest
für diese Art von Bäumen verwenden. Derselbe delink
Stil kann auch damit verwendet werden. Hier ist derselbe Code mit forest
. Ich habe Code hinzugefügt, um die Segmentebene automatisch mit zu formatieren tipa
(damit Sie sie nicht in einschließen müssen ), und dann wird jedes Segment in derselben Schriftart angezeigt. Damit dies funktioniert, müssen Sie explizit angeben, dass sich der Knoten auf der Ebene \textipa
befindet, wenn ein Mora-Knoten direkt kein segmentales Abhängigkeitselement hat (d. h. er ist mit einem Segment verknüpft, das bereits von einem Mora-Knoten dominiert wird).mora
\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}