Satzabhängigkeit Grammatikbäume

Satzabhängigkeit Grammatikbäume

Ich versuche Abhängigkeitsbäume zu setzen:

Bildbeschreibung hier eingeben

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}

Bildbeschreibung hier eingeben

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 treeverwendet wird. Um den Text unten auszurichten, dfontwird ein Stil definiert.

Bildbeschreibung hier eingeben

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}

Bildbeschreibung hier eingeben

Antwort3

Die calign with current edgeOption 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}

Bildbeschreibung hier eingeben

verwandte Informationen