Schöne leere Knoten, die durch Forest 2.0 kaputt gegangen sind?

Schöne leere Knoten, die durch Forest 2.0 kaputt gegangen sind?

Ich verwende schon seit einiger Zeit den „schönen leeren Knoten“-Stil aus dem Forest-Handbuch für Bäume. Heute habe ich das Paket aktualisiert und jetzt gibt es einen Fehler aus (obwohl die Ausgabe immer noch zu funktionieren scheint). Minimales Beispiel:

\documentclass{article}
\usepackage{forest}
\forestset{
nice empty nodes/.style={
    for tree={calign=fixed edge angles},
    delay={where content={}{shape=coordinate,for parent={
                for children={anchor=north}}}{}}
},
}
\begin{document}
\begin{forest}
    [{},nice empty nodes
    [b][
    [c]
    [
    [b] [a]
    ]
    ]
    ]
\end{forest}
\end{document}

Fehler: „Paketwald-Fehler: Nodewalk ist zum ungültigen Knoten gegangen; Stapel: „,tree,tree,parent“. \end{forest}“

Hat jemand eine Idee, wie man das beheben kann?

Antwort1

Wie @cfr hervorhebt,

Das Problem ist, dass sich die Knotendurchläufe drastisch geändert haben und ungültige Schritte nun standardmäßig Fehler auslösen. Da die Wurzel leer ist, wird sie netterweise als leerer Knoten behandelt und für übergeordnete Knoten schlägt dies fehl, weil, nun ja, es keine übergeordneten Knoten gibt.

Also ja, das ist ein Fehler in der Definition von nice empty nodes, also danke, dass Sie ihn gefunden und darauf hingewiesen haben. Ich habe ihn nicht bemerkt, da das einzige Beispiel von nice empty nodesin der Dokumentation den Stil nicht auf den Stammknoten anwendet, sodass die Dokumentation problemlos kompiliert wurde ...

Die Lösung ist eigentlich sehr einfach (und wird in der nächsten Nebenversion enthalten sein), da forestjetzt Schritt vorliegt siblings.

\documentclass{article}
\usepackage{forest}
\forestset{
nice empty nodes/.style={
    for tree={calign=fixed edge angles},
    delay={where content={}{shape=coordinate,for siblings={anchor=north}}{}}
},
}
\begin{document}
\begin{forest}
    [{},nice empty nodes
    [b][
    [c]
    [
    [b] [a]
    ]
    ]
    ]
\end{forest}
\end{document}

Beachten Sie, dass die for parent={for children={...}}Redewendung nicht genau dieselbe ist wie for siblings={...}, da der aktuelle Knoten in diesem Fall nicht durchlaufen wird for siblings. In unserem Fall macht das keinen Unterschied, da der aktuelle Knoten eine Koordinatenform erhält. Um genau das (alte) for parent={for children={...}}Verhalten zu erhalten, sagen Sie for preceding siblings={...},for current and following siblings={...}. Und ich verspreche, den Schlüssel in die nächste Nebenversion aufzunehmen for current and siblings... Mir ist bisher nur nicht aufgefallen, dass es einen Fall gibt, in dem es Sinn macht.

Antwort2

Sicherlich ein Fehler? Es funktioniert nicht, selbst wenn die linguisticsBibliothek geladen und die offizielle nice empty nodesPräambel in einem Baum verwendet wird.

Das ist sehr unelegant, sollte aber vorerst funktionieren. Das Problem ist, dass sich die Knotendurchgänge dramatisch geändert haben und ungültige Schritte jetzt standardmäßig Fehler auslösen. Da die Wurzel leer ist, wird sie nice empty nodesbehandelt und for parentschlägt fehl, weil, nun ja, kein übergeordnetes Element vorhanden ist. Anstatt das global zu deaktivieren, wird es hier hoffentlich nur für diesen Knotendurchgang deaktiviert. Ich bin mir jedoch sicher, dass es einen effizienteren Ansatz gibt.

\documentclass[tikz]{standalone}
\usepackage{forest}
\forestset{%
  nice empty nodes/.style={%
    for tree={calign=fixed edge angles},
    delay={%
      where content={}{%
        shape=coordinate,
        for nodewalk={%
          Nodewalk={%
            on invalid=fake,
          }{%
            parent,
          }{%
            for children={anchor=north},
          }
        }{},
      }{},
    },
  },
}

\begin{document}
\begin{forest}
  nice empty nodes
  [
    [b]
    [
      [c]
      [
        [b]
        [a]
      ]
    ]
  ]
\end{forest}
\end{document}

schönere leere Knoten?

verwandte Informationen