在以下示例中,我尝试“跳过” 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 indent
为0pt
。简单一点:设置coordinate
删除垂直空白空间,设置 将folder indent=0
边缘的垂直部分与空节点对齐。
我已经改变了direction switch
样式,以便对空节点自动执行此操作。备注:
必须延迟执行
where level
才能正确识别空节点。如果没有延迟,所有节点都会显示为空。folder indent
是登记样式使用folder
。如果我们简单地将其设置为0
,它会影响后续的调用folder
。因此,我们需要“保存并恢复”它;这将通过分配给临时寄存器“手动”实现,但 Forest 实际上提供了一个专用的键save and restore register
。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}