
Gostaria que todos os níveis do meu diagrama de árvore estivessem alinhados verticalmente. O problema é que alguns ramos ‘pulam’ um nível. Especificamente, todos os x e todos os C devem estar próximos um do outro (o resto está bem como está). Consegui fazer isso para x especificando a distância da raiz. Mas os C's estão por toda parte.
\documentclass[12pt]{beamer}
\usepackage{tikz}
\usepackage{tikz-qtree}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\tikzset{frontier/.style={distance from root=150pt}}
\Tree [.{\textbf{W}}
[.{\textbf{S}}
[.\textit{Onset} [.C {\textit{xx}} ]
[.C {\textit{x}} ] ]
[.\textit{Reim}
[.\textit{Nukleus} [.C {\textit{x}} ]
[.C {\textit{x}} ] ]
[.\textit{Koda} {C} ] ] ]
[.{\textbf{S}}
[.\textit{Onset} [.C {\textit{x}} ] ]
[.\textit{Reim }
[.\textit{Nukleus} [.C {\textit{x}} ] ]
[.\textit{Koda} {C} {C} ] ] ]
]
\end{tikzpicture}
\end{frame}
\end{document}
com seu código obtenho a seguinte imagem:
Responder1
Eu concordo com o cfr que forest
é o caminho a seguir para esse tipo de árvore, mas se você tiver muitas delas e não se importar com alguns galhos parecendo um pouco estranhos, você pode simplesmente adicionar colchetes extras ao redor dos nós que estão errados nível.
\documentclass[12pt]{beamer}
\usepackage{tikz}
\usepackage{tikz-qtree}
\tikzset{every tree node/.style={font=\itshape}}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\tikzset{frontier/.style={distance from root=150pt}}
\Tree [.{\textbf{\upshape W}}
[.{\textbf{\upshape S}}
[.Onset [[.C {xx} ]]
[[.C {x} ]] ]
[.Reim
[.Nukleus [.C {x} ]
[.C {x} ] ]
[.Koda [.C {x} ] ] ] ]
[.{\textbf{\upshape S}}
[.Onset [[.C {x} ]] ]
[.Reim
[.Nukleus [.C {x} ] ]
[.Koda [.C {x} ] [.C {x} ] ] ] ]
]
\end{tikzpicture}
\end{frame}
\end{document}
Os nós extras x
que adicionei à árvore não afetam o posicionamento dos Cs. Você ainda pode alinhar os nós C e os x
nós mesmo com x
nós ausentes:
\documentclass[12pt]{beamer}
\usepackage{tikz}
\usepackage{tikz-qtree}
\tikzset{every tree node/.style={font=\itshape}}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\tikzset{frontier/.style={distance from root=150pt}}
\Tree [.{\textbf{\upshape W}}
[.{\textbf{\upshape S}}
[.Onset [[.C {xx} ]]
[[.C {x} ]] ]
[.Reim
[.Nukleus [.C {x} ]
[.C {x} ] ]
[.Koda [.C ] ] ] ]
[.{\textbf{\upshape S}}
[.Onset [[.C {x} ]] ]
[.Reim
[.Nukleus [.C {x} ] ]
[.Koda [.C ] [.C ] ] ] ]
]
\end{tikzpicture}
\end{frame}
\end{document}
Responder2
Como ninguém respondeu ainda, aqui está uma versão do Forest:
\documentclass[border=10pt]{standalone}
\usepackage[linguistics]{forest}
\begin{document}
\begin{forest}
before typesetting nodes={
where level<=1{font=\bfseries}{if content={C}{tier=c}{font=\itshape, if content={x}{tier=x}{}},}
},
[W
[S
[Onset
[C[xx]][C[x]]
]
[Reim
[Nukleus
[C[x]] [C[x]]
]
[Koda
[C]
]
]
]
[S
[Onset
[C[x]]
]
[Reim
[Nukleus
[C[x]]
]
[Koda
[C][C]
]
]
]
]
\end{forest}
\end{document}
O bom disso, claro, é que o Forest faz todo o trabalho: não há necessidade de codificar as distâncias ou alterá-las se o conteúdo ou a estrutura da árvore for modificado posteriormente.
Responder3
Depois de algumas tentativas e erros, decidi especificar os nós e, em seguida, mover cada nó individualmente. Isso é um pouco tedioso e terei que fazer isso para cada árvore individual, então se alguém tiver uma solução melhor, por favor me diga.
Aqui está o código:
\documentclass[12pt]{beamer}
\usepackage{tikz}
\usepackage{tikz-qtree}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\tikzset{frontier/.style={distance from root=150pt}}
\Tree [.{\textbf{W}}
[.{\textbf{S}}
[.\textit{Onset} [.\node at (0,-1.1) {C}; {\textit{xx}} ]
[.\node at (0,-1.1) {C}; {\textit{x}} ] ]
[.\textit{Reim}
[.\textit{Nukleus} [.C {\textit{x}} ]
[.C {\textit{x}} ] ]
[.\textit{Koda} \node at (0,1) {C}; ] ] ]
[.{\textbf{S}}
[.\textit{Onset} [.\node at (0,-1.1) {C}; {\textit{x}} ] ]
[.\textit{Reim }
[.\textit{Nukleus} [.C {\textit{x}} ] ]
[.\textit{Koda} \node at (0,1.1) {C}; \node at (0,1.1) {C}; ] ] ]
]
\end{tikzpicture}
\end{frame}
\end{document}
O que me dá o resultado desejado: