Ich versuche Abhängigkeitsbäume zu setzen:
Gibt es ein Paket, das dies tut? Es sollte mit kompatibel sein xelatex
, also nicht auf basieren pstricks
. Ich konnte weder bei Google noch auf CTAN etwas finden. Wenn es kein Paket gibt, würde ich versuchen, es mit zu tun forest
, aber das scheint nicht so einfach zu sein. Wie kann dies so einfach gemacht werden?
Bearbeiten:Ich habe (die Hälfte) einer Lösung gefunden in forest
:
\documentclass{article}
\usepackage{forest}
\forestset{
dg edges/.style={for tree={parent anchor=south, child anchor=north,align=center,base=bottom,where n children=0{tier=word,edge=dotted}{}}},
}
\begin{document}
\begin{forest}
dg edges
[V
[N
[D [the] ]
[child] ]
[reads]
[N
[D [a] ]
[book] ] ]
\end{forest}
\end{document}
Dadurch werden die gepunkteten Linien richtig ausgerichtet und die Wörter werden auch an der Grundlinie ausgerichtet. Die Ausrichtung der Knoten ist jedoch nicht richtig. Wenn ich N genau über dem Buch und V über den Lesevorgängen haben und dies in der Stildefinition tun könnte, wäre dies die bevorzugte Lösung. Gibt es eine Möglichkeit, dies in zu tun forest
?
Antwort1
Dies ist ein Versuch, bei dem tikz tree
verwendet wird. Um den Text unten auszurichten, dfont
wird ein Stil definiert.
Code
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,trees,calc}
\begin{document}
\tikzset{
treenode/.style = {inner sep=0pt, outer sep=2pt, font=\sffamily},
edge from parent/.style={draw, edge from parent path=
{(\tikzparentnode.south) -- (\tikzchildnode.north)}},
dfont/.style={dashed,font=\vphantom{Ag},anchor=north} % to align the text at the bottom
}
\begin{tikzpicture}
[
% Children and edges style
level distance=1cm,
level 1/.style={sibling distance=2cm},
level 2/.style={sibling distance=2cm},
level 3/.style={sibling distance=3.5cm},
level 4/.style={sibling distance=6cm},
level 5/.style={sibling distance=3cm}
]
%% Draw events and edges
\node (g) [treenode] {are}
child {node[treenode] (a) {We}} % left
child {node[treenode] (b) {trying} % right
child[missing]
child {node[treenode] (c) {to}
child[missing]
child {node[treenode](d) {understand}
child[missing]
child {node[treenode] (e) {difference}
child {node[treenode](f){the}}
child[missing]}
}
}
};
\node (a1) at ($(a)+(0,-6)$){};
\draw[dfont] (a) -- (a|-a1)node[]{We};
\draw[dfont] (g) -- (g|-a1)node[]{are};
\draw[dfont] (b) -- (b|-a1)node[]{trying};
\draw[dfont] (c) -- (c|-a1)node[]{to};
\draw[dfont] (d) -- (d|-a1)node[]{understand};
\draw[dfont] (f) -- (f|-a1)node[]{the};
\draw[dfont] (e) -- (e|-a1)node[]{difference.};
\end{tikzpicture}
\end{document}
Antwort2
Ein bisschen umständlich, zeigt aber, wie man eine benutzerdefinierte Wachstumsfunktion angibt und wie man die Wörter unten auf raffinierte Weise dupliziert. Ich habe ein paar Stile aus Jesses Antwort geklaut:
\documentclass[tikz, border=5]{standalone}
% An (incomplete) growth function
\makeatletter
\def\tikz@grow@tree{%
\tikzset{shift=(270:\tikzleveldistance)}%
\ifcase\tikznumberofchildren%
\or
\or
\tikzset{shift=(0:{(\tikznumberofcurrentchild-1)*\tikzsiblingdistance})}
\else%
\tikzset{shift=(0:{(\tikznumberofcurrentchild-1-\tikznumberofchildren+2)*\tikzsiblingdistance})}
\fi
}
\tikzset{%
dependency tree/.code={\let\tikz@grow=\tikz@grow@tree},
leaf level/.store in=\tikzleaflevel,
tree node/.style={inner sep=0pt, outer sep=2pt, font=\sffamily},
edge from parent/.style={draw, edge from parent path={(\tikzparentnode.south) -- (\tikzchildnode.north)}},
leaf/.style={level distance=(\tikzleaflevel-\the\tikztreelevel)*1cm,
edge from parent/.append style={dashed}, execute at begin node=\strut}
}
\def\wordnode#1{ node [tree node] {#1} child [leaf] { node {#1} } }
\begin{document}
\begin{tikzpicture}[level distance=1cm,dependency tree, leaf level=8]
\node [tree node]
{are}
child { \wordnode{We} }
child [leaf] { node {are} }
child { \wordnode {trying}
child { \wordnode {to}
child { \wordnode{understand}
child [sibling distance=3cm] { \wordnode{difference}
child [xscale=-1, sibling distance=1.5cm] { \wordnode{the}
}}}}};
\end{tikzpicture}
\end{document}
Antwort3
Die calign with current edge
Option hat geholfen:
\documentclass{article}
\usepackage{forest}
\forestset{
dg edges/.style={for tree={parent anchor=south, child anchor=north,align=center,base=bottom,where n children=0{tier=word,edge=dotted,calign with current edge}{}}},
}
\begin{document}
\begin{forest}
dg edges
[V
[N
[D [the] ]
[child] ]
[reads]
[N
[D [a] ]
[book] ] ]
\end{forest}
\end{document}