
Ich möchte folgende Abbildung erzeugen mit forest
:
Was ich also suche ist eine Stilangabe die besagt, dass Tochter 1 (frapp) und Tochter 2 (ant) sich gemeinsam auf A beziehen. Wichtiger ist dabei die Tochter 2 (ant), die in der Abbildung durch den nach rechts unten gebogenen Strich gekennzeichnet ist ant
.
Gibt es eine Möglichkeit, es in das folgende Beispiel zu integrieren?
\documentclass{article}
\usepackage{forest}
\begin{document}
\begin{forest}
[un exemple
[A
[frapp]
[ant] ] ]
\end{forest}
\end{document}
Es handelt sich um zwei Beziehungen mit drei Elementen: A ist die Mutter von Frapp und Ant. Und Ant ist der Kopf (das wichtigste Element) innerhalb von A. Gibt es eine gute Möglichkeit, dies mit forest
Stilen zu tun?
Bearbeiten:
Ich bin dem Vorschlag gefolgt und habe ein bisschen mit experimentiert edge path
. Das ist, was ich habe:
\documentclass{article}
\usepackage{forest}
\forestset{
dg translation/.style={edge path={\noexpand\path[\forestoption{edge}]
(!u.parent anchor)-- +(0,-l)
(!p.north west)--(.north east)\forestoption{edge label};}}
}
\begin{document}
\begin{forest}
[un example
[A
[frapp, no edge]
[ant, dg translation] ] ]
\end{forest}
\end{document}
Das Ergebnis:
Eine gerade Linie der Länge l
Süd und eine Linie, die die beiden Töchter überdeckt. Ich müsste die Linie dann so anheben, dass sie wieder auf der Höhe von A ist (und etwas Rundung hinzufügen). Aber ich weiß nicht, wie ich den Abstand hinbekomme. Es ist nicht so, l
aber etwas weniger. Alternativ könnte ich von unterhalb von A zeichnen, aber ich weiß nicht, wie weit nach links und nach rechts ich gehen muss, da dies von der Größe der Töchter abhängt.
Auch auf die andere Tochter musste ich Rücksicht nehmen no edge
. Wenn sich das irgendwie vermeiden ließe, wäre das super.
Bearbeitung 2:
no edge
OK, ich habe gemäß einem Kommentar von cfr die Spezifikation im Baum entfernt :
\documentclass{article}
\usepackage{forest}
\forestset{
dg translation/.style={edge path={\noexpand\path[\forestoption{edge}]
(!u.parent anchor)-- +(0,-l)
(!p.north west)--(.north east)\forestoption{edge label};},!p.edge'={}}
}
\begin{document}
\begin{forest}
[un example
[A
[frapp]
[ant, dg translation] ] ]
\end{forest}
\end{document}
Ich weiß aber immer noch nicht, wie ich die geschwungene Linie unter A zeichnen soll. Der Kommentar hilft mir da nicht weiter.
Bearbeitung 3:
OK. Ich bin so weit gekommen:
\documentclass{article}
\usepackage{forest}
\usetikzlibrary{calc}
\forestset{
dg translation/.style={edge path={\noexpand\path[\forestoption{edge}, rounded corners=3pt]
% the line downwards
(!u.parent anchor)-- +($(0,-l)-(0,12pt)$)-- +($(12pt,-l)-(0,12pt)$)
% the horizontal line
($(!p.north west)+(0,l)-(0,14pt)$)--($(.north east)+(0,l)-(0,14pt)$)\forestoption{edge label};},!p.edge'={}}
}
\begin{document}
\begin{forest}
[un exemple
[A
[frapp]
[ant, dg translation] ] ]
\end{forest}
\end{document}
Es ergibt sich folgendes Bild:
Ich bin mit mehreren Dingen unzufrieden: Der Code enthält eine manuelle Verschiebung nach oben um 14pt. Dies funktioniert bei anderen Schriftgrößen nicht.
Eine weitere Frage ist, wie ich die horizontale Linie kurvig bekomme. Ich habe einige Möglichkeiten gefunden, die Linie in zu beeinflussen tikz
, aber dies sind Optionen für den Pfad und es scheint nicht möglich zu sein, zwei verschiedene Randpfade in zu haben forest
. Wenn ich also Optionen wie diese angebe, rounded corners
wirkt sich dies auf alle Teile des Pfads aus, aber ich möchte zwei separate Pfade haben. Gibt es eine Möglichkeit, dies zu tun?
Antwort1
BEARBEITENMeine ursprüngliche Antwort funktioniert nur mitWaldVersion 1. Der folgende Code ist nicht nur einfacher, sondern funktioniert auch mit Version 1 und Version 2 gleich gut.
Das war meine Lösung. Beachten Sie, dass Stefan Müllers Lösung zum Festlegen no edge
auf das Geschwister viel eleganter war als meine explizite Verwendung von node walk
in der Originalversion dieses Codes, obwohl die aktualisierte Version unten noch einfacher ist.
Ich verwende die tikz
Taste, um die kurvige horizontale Linie zu zeichnen, anstatt zu versuchen, diese in den edge
Pfad einzufügen. So kann ich leicht sicherstellen, dass die Knoten, auf die ich verweise, vorhanden sind, obwohl dies edge
mit etwas Sorgfalt in die Zeichnung integriert werden könnte.
„VIN“ ist natürlich das Knoten-Äquivalent zum „VIP“ der Leute.
\documentclass[tikz,border=10pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={
parent anchor=south,
child anchor=north,
},
vin/.style={
child anchor=south west,
edge path={
\noexpand\path [draw, \forestoption{edge}]
(!u.parent anchor) -- (!u.parent anchor |- .west) [out=-90, in=180] to (.child anchor)\forestoption{edge label};
},
for parent={
before packing={
tikz={
\draw (!1.north west |- .parent anchor) [out=30, in=170] to (.parent anchor) [out=-10, in=-150] to (!l.north east |- .parent anchor);
},
},
},
before typesetting nodes={
!p.no edge,
},
}
[un exemple
[A
[frapp
]
[ant, vin
]
]
]
\end{forest}
\end{document}