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 nodes
na 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 forest
agora 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 siblings
caso. 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 siblings
no 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 linguistics
biblioteca e usando o nice empty nodes
preâ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 nodes
tratamento e for parent
falha 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}