音韻樹上の取り消し線

音韻樹上の取り消し線

音韻ツリーに取り消し線を追加するにはどうしたらよいかと思っています。コードは次のとおりです。

\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}

結果は次のようになります:

ここに画像の説明を入力してください

ある記事で、いくつかの取り消し線が入った類似の音韻樹を見ました。これは、特定の特徴が単語の音声的実現には最終的に現れなかったことを象徴しています。次のようになります。

ここに画像の説明を入力してください

それらは、その画像では「b」と「i」の上にあります。

音韻ツリーに組み込めるコードはありますか? シグマと「t」の間、および同じシグマとそのすぐ下の mu の間の線にコードを追加したいと思います。

どのような助けでも大歓迎です。

ありがとう!

答え1

編集: Alan Munn の提案に従い、\tiny等号の方が見栄えがよく、ノードをシフトする必要性が少なくなります。


=取り消し線をシミュレートするには、ツリーの端にシンボル付きのノードを配置します。

手動の線 (例: ノードxとの間a) の場合は、線描画ステートメントの中間位置にノードを追加できます。自動の線 (例: σ と μ の間) の場合は、中間点に別のノードを追加できます。中間位置を計算できるように、ツリー ノードに名前を付ける必要があることに注意してください。また、tikzライブラリが必要であることにも注意してくださいcalc

取り消し線を回転させたい場合 (例のように)、rotate=ノードに追加できます。\pgfmathanglebetweenpoints手動で値を推定したくない場合は、 を使用して角度を自動的に計算することもできます。ただし、手動で微調整する必要がある場合もあります。私の意見では、回転していない取り消し線も見栄えが良いと思います。

取り消し線の垂直位置は、比率を に変更することでシフトできます (例: )。また0.6、水平位置は、座標に小さな量を追加することでシフトできます+(0.05,0)(または、y コンポーネントをゼロ以外の値にして両方をシフトします)。

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}

結果:

ここに画像の説明を入力してください

答え2

ここでは、手動による介入が少なく、直感的な構文を持つ、問題に対する別のアプローチを紹介します。また、\edgeノードをまったく指定せずに、ツリーの既存のブランチのスタイルとして使用することもできます。

\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}

コードの出力

解決forest

パッケージforestは、名前付きノードをツリーに追加するより簡単な方法を提供するので、個人的には、forestこの種のツリーを作成するために を使用します。同じdelinkスタイルも使用できます。 を使用した同じコードを次に示しますforest。 を使用して、セグメント層を自動的にフォーマットするコードを追加しましたtipa( で囲む必要はありません\textipa)。これにより、各セグメントが同じフォントになります。これが機能するには、モーラ ノードに直接のセグメント従属がない場合 (つまり、モーラ ノードによって既に支配されているセグメントにリンクされている場合)、ノードが層にあることを明示的に示す必要があります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}

森林コードの出力

関連情報