포리스트 2.0에 의해 깨진 멋진 빈 노드가 있습니까?

포리스트 2.0에 의해 깨진 멋진 빈 노드가 있습니까?

나는 꽤 오랫동안 나무에 대한 숲 매뉴얼의 "좋은 빈 노드" 스타일을 사용해 왔습니다. 오늘 패키지를 업데이트했는데 이제 오류가 발생합니다(출력은 여전히 ​​작동하는 것 같습니다). 최소한의 예:

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

오류: "패키지 포리스트 오류: nodewalk가 잘못된 노드로 이동했습니다. 스택: ",tree,tree,parent". \end{forest}"

이 문제를 해결하는 방법을 아는 사람이 있나요?

답변1

@cfr이 지적했듯이,

문제는 노드 탐색이 극적으로 변경되었으며 이제 잘못된 단계가 기본적으로 오류를 유발한다는 것입니다. 루트가 비어 있기 때문에 빈 노드 처리가 잘 되고 부모에 대해서는 부모가 없기 때문에 실패합니다.

그렇습니다. 이것은 의 정의에 있는 버그입니다 nice empty nodes. 이를 찾아 지적해 주셔서 감사합니다. nice empty nodes문서 의 유일한 예는 루트 노드에 스타일을 적용하지 않으므로 문서가 잘 컴파일되었기 때문에 나는 그것을 포착하지 못했습니다 .

forest솔루션은 실제로 매우 간단합니다( 향후 마이너 릴리스에 포함될 예정) 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}

현재 노드가 케이스에서 탐색되지 않기 때문에 이 for parent={for children={...}}관용어는 와 정확히 동일하지 않습니다 . 우리의 경우에는 현재 노드가 좌표 모양을 갖기 때문에 아무런 차이가 없습니다. (이전) 동작을 정확하게 얻으려면 다음과 같이 말하십시오 . 그리고 다음 마이너 릴리스에는 키를 포함할 것을 약속합니다 . 지금까지 키를 갖는 것이 타당한 경우가 있다는 것을 깨닫지 못했습니다.for siblings={...}for siblingsfor parent={for children={...}}for preceding siblings={...},for current and following siblings={...}for current and siblings

답변2

확실히 버그인가요? 라이브러리를 로드하고 트리 프리앰블에서 linguistics공식을 사용해 도 작동하지 않습니다 .nice empty nodes

이는 매우 우아하지 않지만 지금은 작동합니다. 문제는 노드 탐색이 극적으로 변경되었으며 이제 잘못된 단계가 기본적으로 오류를 유발한다는 것입니다. 루트가 비어 있기 때문에 nice empty nodes치료를 받고 for parent실패합니다. 음, 부모가 없기 때문입니다. 전역적으로 비활성화하는 대신 이 노드 워크에 대해서만 비활성화하기를 바랍니다. 그러나 더 효율적인 접근 방식이 있다고 확신합니다.

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

빈 노드가 더 좋나요?

관련 정보