我想知道如何在音韵树上添加一些删除线。这是我的代码:
\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”上方。
有没有类似的代码可以放入我的音位树中?我想将其添加到 sigma 和“t”之间的线以及同一 sigma 和其下方的 mu 之间的线。
非常感谢您的帮助。
谢谢你!
答案1
编辑:根据 Alan Munn 的建议,\tiny
等号看起来更好,并且减少了节点移动的需要。
您可以将带有符号的节点放置=
在树的边缘来模拟删除线。
对于手动线(例如,节点x
和之间a
),您可以在线条绘制语句中的中间位置添加一个节点。对于自动线(例如,σ和μ之间),您可以在中间点添加一个单独的节点。请注意,您应该为树节点命名,以便能够计算中间位置。还请注意,您需要 tikzlibrary calc
。
如果您希望删除线旋转(如示例中所示),您可以将其添加rotate=
到节点。\pgfmathanglebetweenpoints
如果您不想手动估算值,也可以使用自动计算角度。但是,可能仍需要进行一些手动调整。恕我直言,不旋转的删除线看起来也不错。
您可以通过将比例更改为(例如)来移动删除线的垂直位置0.6
,并通过在坐标上添加少量来移动水平位置,例如+(0.05,0)
(或使用非零 y 分量移动两者)。
梅威瑟:
\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 节点没有直接的分段依赖(即,它链接到已经由 mora 节点主导的段),则需要明确说明该节点位于层上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}