
Ich habe versucht, herauszufinden, wie man forest
die Knoten in einem Diagramm wie dem indiese Frageautomatisch. Die Idee ist also:
- Ebene 0: Der Inhalt des Knotens sollte mit
O.
dem Präfix versehen werden, d. h. wenn der angegebene Inhalt istP0
, sollte der Knoten mit dem Inhalt gesetzt werdenO. P0
; - Ebene 1: Dem Inhalt sollte das Präfix „ vorangestellt werden,
O.n
wobein
die Nummer des untergeordneten Elements ist“. Wenn beispielsweise die Knoten auf der ersten Ebene alsP1
und angegeben sindP3
, sollten sie alsO.1 P1
und gesetzt werdenO.2 P3
. - Ebene 2: Dem Inhalt sollte das Präfix vorangestellt werden,
O.n.m
wobein
die untergeordnete Nummer des übergeordneten Elements undm
die untergeordnete Nummer des Knotens ist. Beispiel: WennP1
es ein untergeordnetes Element hatP2
, sollte dieses als angezeigt werden,O.1.1 P2
und wennP3
es ein untergeordnetes Element hatP4
, sollte dieses als gesetzt werdenO.2.1 P4
.
Ebene 0 ist kein Problem. Das kann ich mit tun content={O. #1}
. Ich kann auch die relevanten Beschriftungen erstellen und in die Knoten für die Ebenen 1 und 2 einfügen. Was ich jedoch nicht herausfinden kann, ist, wie ich dies genau einmal zum Inhalt jedes Knotens hinzufügen kann. Was auch immer ich tue, ich lande entweder ohne das Präfix oder mit einem verstümmelten oder leeren Präfix oder mit mehreren Kopien des richtigen Präfixes.
Das ist, glaube ich, das Beste, was ich gefunden habe:
\documentclass[tikz, border=5pt]{standalone}
\usepackage{forest}
\usetikzlibrary{arrows.meta}
\begin{document}
\forestset{
tree node/.style = {align=center, inner sep=2pt, rounded corners = 2pt, text centered, font=\sffamily, rectangle, draw=black},
}
\begin{forest}
for tree={
parent anchor=south,
child anchor=north,
tree node,
l sep+=5pt,
edge path={
\noexpand\path [-{Stealth[]}, \forestoption{edge}, thick]
(!u.parent anchor) -- +(0,-5pt) -| (.child anchor)\forestoption{edge label};
},
},
set node label/.style={
content/.wrap 2 pgfmath args={O.##1 ##2}{n()}{content()},
},
set node super label/.style={
content/.wrap 3 pgfmath args={O.##1.##2 ##3}{n("!u")}{n()}{content()},
},
before typesetting nodes={
for tree={
where level=0{
content={O. #1},
}{
where level=1{
set node label,
}{
where level=2{
set node super label,
}{
},
},
},
},
}
[P0
[P1
[P2
]
]
[P3
[P4
]
]
]
;
\end{forest}
\end{document}
Dadurch werden die Präfixe korrekt erstellt, aber sie werden den Knoten zu oft hinzugefügt!
Ich habe auch versucht, den Originalinhalt in einem Makro zu speichern und dieses dann in der Spezifikation von zu verwenden content
. In diesem Fall geht jedoch der Originalinhalt vollständig verloren.
Antwort1
Ersetzen Sie alle where
s durch if
s.
where
ist als definiert where/.style n args={3}{for tree={if={#1}{#2}{#3}}}
, enthält also implizit eine for tree
Schleife.