Wie kann ich Gesamtstrukturknoten automatisch beschriften, indem ich dem Inhalt der Knoten genau einmal Beschriftungen als Präfixe hinzufüge?

Wie kann ich Gesamtstrukturknoten automatisch beschriften, indem ich dem Inhalt der Knoten genau einmal Beschriftungen als Präfixe hinzufüge?

Ich habe versucht, herauszufinden, wie man forestdie 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 ist P0, sollte der Knoten mit dem Inhalt gesetzt werden O. P0;
  • Ebene 1: Dem Inhalt sollte das Präfix „ vorangestellt werden, O.nwobei ndie Nummer des untergeordneten Elements ist“. Wenn beispielsweise die Knoten auf der ersten Ebene als P1und angegeben sind P3, sollten sie als O.1 P1und gesetzt werden O.2 P3.
  • Ebene 2: Dem Inhalt sollte das Präfix vorangestellt werden, O.n.mwobei ndie untergeordnete Nummer des übergeordneten Elements und mdie untergeordnete Nummer des Knotens ist. Beispiel: Wenn P1es ein untergeordnetes Element hat P2, sollte dieses als angezeigt werden, O.1.1 P2und wenn P3es ein untergeordnetes Element hat P4, sollte dieses als gesetzt werden O.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!

zu viele Etiketten!

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 wheres durch ifs.

whereist als definiert where/.style n args={3}{for tree={if={#1}{#2}{#3}}}, enthält also implizit eine for treeSchleife.

verwandte Informationen