belos nós vazios quebrados pela floresta 2.0?

belos nós vazios quebrados pela floresta 2.0?

Já faz algum tempo que uso o estilo "bons nós vazios" do manual florestal para árvores. Hoje atualizei o pacote e agora ele gera um erro (embora a saída ainda pareça funcionar). Exemplo mínimo:

\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}

Erro: "Erro de floresta de pacote: nodewalk avançou para o nó inválido; pilha: ",tree,tree,parent". \end{forest}"

Alguém tem uma ideia de como consertar isso?

Responder1

Como aponta @cfr,

O problema é que as caminhadas pelos nós mudaram drasticamente e as etapas inválidas agora acionam erros por padrão. Como a raiz está vazia, ela recebe um bom tratamento de nós vazios e o pai falha porque, bem, não há pai.

Então, sim, isso é um bug na definição de nice empty nodes, então obrigado por encontrá-lo e apontá-lo. Não entendi porque o único exemplo nice empty nodesna documentação não aplica o estilo ao nó raiz, então os documentos foram compilados perfeitamente ...

A solução é na verdade muito simples (e será incluída na próxima versão secundária), pois forestagora tem a etapa 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}

Observe que o for parent={for children={...}}idioma não é exatamente igual a for siblings={...}, pois o nó atual não é percorrido no for siblingscaso. No nosso caso, isso não faz diferença, pois o nó atual adquire uma forma de coordenadas. Para obter exatamente o for parent={for children={...}}comportamento (antigo), digamos for preceding siblings={...},for current and following siblings={...}. E prometo incluir a chave for current and siblingsno próximo lançamento secundário... Só não percebi até agora que há um caso em que faz sentido tê-la.

Responder2

Certamente um bug? Não funciona nem carregando a linguisticsbiblioteca e usando o nice empty nodespreâmbulo oficial em uma árvore.

Isso é muito deselegante, mas deve funcionar por enquanto. O problema é que as caminhadas pelos nós mudaram drasticamente e as etapas inválidas agora acionam erros por padrão. Como a raiz está vazia, ela recebe nice empty nodestratamento e for parentfalha porque, bem, não há pai. Em vez de desabilitar isso globalmente, esperançosamente isso desabilita apenas para esta caminhada no nó. No entanto, tenho certeza de que existe uma abordagem mais eficiente.

\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}

nós vazios mais agradáveis?

informação relacionada