TikZ 森林树中的跳过级别

TikZ 森林树中的跳过级别

在以下示例中,我尝试“跳过” TikZ 树中的某个级别。在其他线程中,我看到了添加, tier=text相关节点以手动将它们分配到另一个层级的建议。这对我来说不起作用,这只会改变对齐方式 - 我想要实现以下目标。第二个选项,一个空节点(参见下面的 MWE)留下了令人讨厌的空白。

如果“第 1 层”和“第 3.1 层”之间的界线是连续的,我会很高兴。但我基本上想实现的是,在彼此下方显示更多“第 2 层”节点,因为否则它将不适合页面(如果我在第 2 层水平列出它们)

森林树

梅威瑟:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[edges]{forest}

\forestset{
  direction switch/.style={
    for tree={edge+=thick, font=\sffamily},
    where level>=0{}{draw},
    where level>=2{folder, grow'=0}{for children=forked edge},
  },
}

\begin{document}

{\footnotesize
\begin{forest}
  direction switch
  [Tier 0
  [Tier 1,
    [Tier 2.1
        [Tier 3]
    ]
    [Tier 2.2]
    [Tier 2.3]
    [%the empty node
    [Tier 3.1]
    [Tier 3.2
        [Tier 4]
    ]
    [Tier 3.3
    ]
    ]
    ]
    ]
  ]
  ]
\end{forest}
}

\end{document}

答案1

直接跳过空节点在这里没有帮助,因为必须为该节点分配样式folder。有帮助的是将其形状更改为coordinate并设置folder indent0pt。简单一点:设置coordinate删除垂直空白空间,设置 将folder indent=0边缘的垂直部分与空节点对齐。

我已经改变了direction switch样式,以便对空节点自动执行此操作。备注:

  1. 必须延迟执行where level才能正确识别空节点。如果没有延迟,所有节点都会显示为空。

  2. folder indent登记样式使用folder。如果我们简单地将其设置为0,它会影响后续的调用folder。因此,我们需要“保存并恢复”它;这将通过分配给临时寄存器“手动”实现,但 Forest 实际上提供了一个专用的键save and restore register

  3. l sep空节点的长度需要减少 (原始) 的值folder indent,否则边的水平部分对于空节点的子节点来说太长。

代码:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[edges]{forest}

\forestset{
  direction switch/.style={
    for tree={edge+=thick, font=\sffamily},
    delay={
      where level>=2{
        grow'=0,
        if content={}{
          coordinate,
          save and restore register={folder indent}{
            folder indent=0,
            folder,
          },
          l sep-/.register=folder indent,
        }{folder},
      }{
        for children=forked edge
      },
    },
  },
}

\begin{document}

{\footnotesize
\begin{forest}
  direction switch
  [Tier 0
    [Tier 1,
      [Tier 2.1
        [Tier 3]
      ]
      [Tier 2.2]
      [Tier 2.3]
      [
        [Tier 3.1]
        [Tier 3.2
          [Tier 4]
        ]
        [Tier 3.3
        ]
      ]
    ]
  ]
\end{forest}
}

\end{document}

https://i.stack.imgur.com/nedw7.png

相关内容