Estou me perguntando como posso adicionar algumas linhas tachadas em uma árvore fonológica. Aqui está o meu código:
\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}
Isto é o que produz:
Vi em um artigo uma árvore fonológica semelhante com algumas linhas tachadas que simbolizavam que certas características acabaram não aparecendo na realização fonética da palavra. Parecia assim:
Eles estão acima do “b” e do “i” nessa imagem.
Existe algum código assim que eu possa colocar na minha árvore fonológica? Gostaria de adicioná-lo à linha entre o sigma e o "t" e entre esse mesmo sigma e o mu logo abaixo dele.
Qualquer ajuda é muito apreciada.
Obrigado!
Responder1
EDIT: Seguindo a sugestão de Alan Munn, um \tiny
sinal de igual parece melhor e reduz a necessidade de mudança de nó.
Você pode colocar um nó com o símbolo =
nas bordas da árvore para simular um tachado.
Para as linhas manuais (por exemplo, entre o nó x
e a
) você pode adicionar um nó na posição intermediária na instrução de desenho de linha. Para as linhas automáticas (por exemplo, entre σ e μ), você pode adicionar um nó separado no ponto intermediário. Observe que você deve dar um nome aos nós da árvore para poder calcular a posição intermediária. Observe também que você precisa da calc
tikzlibrary.
Se você quiser que o tachado seja girado (como no exemplo), você pode adicionar rotate=
ao nó. Você também pode calcular automaticamente o ângulo usando \pgfmathanglebetweenpoints
se não quiser estimar manualmente o valor. No entanto, alguns ajustes manuais ainda podem ser necessários. IMHO, um tachado não girado também parece bom.
Você pode mudar a posição vertical do tachado alterando a proporção para, por exemplo, 0.6
, e a posição horizontal adicionando uma pequena quantidade à coordenada, por exemplo, +(0.05,0)
(ou mudar ambos com um componente y diferente de zero).
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}
Resultado:
Responder2
Aqui está uma abordagem diferente para o problema que requer menos intervenção manual e possui uma sintaxe intuitiva. Também permite usá-lo como um \edge
estilo em um ramo existente da árvore sem especificar nenhum nó.
\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}
Uma forest
solução
O forest
pacote fornece uma maneira mais simples de adicionar nós nomeados às árvores, então, pessoalmente, eu usaria forest
para fazer esse tipo de árvore. O mesmo delink
estilo também pode ser usado com ele. Aqui está o mesmo código usando forest
. Adicionei código para formatar automaticamente a camada segmental usando tipa
(para que você não precise envolvê-los \textipa
) e então cada segmento estará na mesma fonte. Para que isso funcione, se um nó mora não tiver dependência segmental direta (ou seja, estiver vinculado a um segmento que já é dominado por um nó mora), será necessário declarar explicitamente que o nó está na mora
camada.
\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}