Durchgestrichene Linien auf einem phonologischen Baum

Durchgestrichene Linien auf einem phonologischen Baum

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:

Bildbeschreibung hier eingeben

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:

Bildbeschreibung hier eingeben

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, \tinysieht 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 xund 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 calcTikz-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, \pgfmathanglebetweenpointswenn 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.6und 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:

Bildbeschreibung hier eingeben

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, \edgeohne ü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}

Ausgabe des Codes

Eine forestLösung

Das forestPaket bietet eine einfachere Möglichkeit, benannte Knoten zu Bäumen hinzuzufügen, daher würde ich persönlich forestfür diese Art von Bäumen verwenden. Derselbe delinkStil 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 \textipabefindet, 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}

Ausgabe des Waldcodes

verwandte Informationen