以下代码的预期行为是,从 myFolder 节点下降的节点位于父节点下方并带有一些缩进。
但是,从图像中可以看出,myFolder 节点的直接子节点的定位似乎使得它们的左侧与父节点的中心对齐。
有没有什么办法解决这一问题?
我还想了解如何将同一级别上具有不同高度的节点对齐在顶部而不是中心。
\usepackage[edges]{forest}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}
\forestset{
declare boolean={folderDescendants}{false},
myFolder/.style={
l sep = 0,
for tree={
grow'=0,
folder,
align=center,
s sep'=1mm,
minimum height=5mm,
},
folder indent'=5mm,
for descendants={
folderDescendants,
inner xsep=2mm,
inner ysep=0mm,
edge path'/.expanded={
([xshift=\forestregister{folder indent}]!u.parent anchor) |- ([yshift=.6ex].base west)
},
},
},
myFork/.style={
for tree={
fit=band,
rounded corners,
ultra thick,
font=\sffamily\bfseries\Large,
inner xsep=5mm,
inner ysep=5mm,
edge+={ultra thick, rounded corners},
align=center,
l sep'=20mm,
s sep'=7mm,
fork sep'=8mm,
align = center,
},
forked edges,
before typesetting nodes={
where folderDescendants={}{
draw,
minimum height=15mm,
minimum width=20mm,
anchor=center,
},
},
},
}
\begin{document}
\begin{forest}
myFork,
[Root,calign=child, calign child=2
[Lorem ipsum, myFolder
[Lorem ipsum dolor sit amet
[Lorem ipsum dolor sit amet]
[Lorem ipsum dolor sit amet]
[Lorem ipsum dolor sit amet]
]
[Lorem ipsum dolor sit amet]
[Lorem ipsum]
]
[Lorem ipsum dolor sit amet
[Lorem ipsum dolor sit amet]
[Lorem ipsum\\dolor sit amet]
[Lorem ipsum dolor sit amet,myFolder
[Lorem 4
[Lorem ipsum dolor sit amet]
[Lorem ipsum dolor sit amet]
[Lorem ipsum dolor sit amet]
]
[Lorem 5.1\\Lorem 5.2\\Lorem 5.3]
[Lorem 6]
]
]
[Lorem ipsum\\dolor sit amet]
[Lorem ipsum]
[Lorem ipsum]
]
\end{forest}
\end{document}
期望的结果(我用绿色和紫红色突出显示了我想要修改的空间)
期望结果可能与节点顶部对齐
答案1
我不太清楚你想要什么。不过,这至少可以对齐绘制节点的顶部,并删除folder
节点的额外缩进。
代码中的重要部分似乎与您的期望不一致。删除这些部分可以立即解决一些问题。不要只是复制forest
样式然后尝试调整它们。如果它们没有达到您想要的效果,至少看看手册中的默认设置是否能达到您的要求。目录样式节点的插入就属于这一类:默认情况下,它们首先不与父级的中心对齐。
这种folder
风格很棘手,当树改变方向时,很难让它按照人们想要的方式表现。我不认为它真的打算以这种方式使用 ;)。使用其他东西可能更好,但我没有任何改进的风格可以提供 :(,所以这是一个针对特定情况进行黑客攻击的问题。
\documentclass[border=9pt]{standalone}
\usepackage[edges]{forest}
\forestset{
folders down/.style={
for tree={
grow'=0,
folder,
minimum height=5mm,
},
for current and siblings={anchor=north west, child anchor=north},
for current and ancestors={
minimum height=15mm,
minimum width=20mm,
},
for ancestors={l sep'+=5pt},
for descendants={
draw=none,
inner xsep=2mm,
inner ysep=0mm,
},
},
myFork/.style={
for tree={
fit=band,
rounded corners,
draw,
ultra thick,
font=\sffamily\bfseries\Large,
inner xsep=5mm,
inner ysep=5mm,
outer ysep=0pt,
edge+={ultra thick},% rounded corners}, replace if you like
align=center,
},
forked edges,
},
}
\begin{document}
\begin{forest}
myFork,
[Root,calign=child, calign child=2
[Lorem ipsum, folders down
[Lorem ipsum dolor sit amet
[Lorem ipsum dolor sit amet]
[Lorem ipsum dolor sit amet]
[Lorem ipsum dolor sit amet]
]
[Lorem ipsum dolor sit amet]
[Lorem ipsum]
]
[Lorem ipsum dolor sit amet
[Lorem ipsum dolor sit amet]
[Lorem ipsum\\dolor sit amet, calign with current edge]
[Lorem ipsum dolor sit amet, folders down
[Lorem 4
[Lorem ipsum dolor sit amet]
[Lorem ipsum dolor sit amet]
[Lorem ipsum dolor sit amet]
]
[Lorem 5.1\\Lorem 5.2\\Lorem 5.3]
[Lorem 6]
]
]
[Lorem ipsum\\dolor sit amet]
[Lorem ipsum]
[Lorem ipsum]
]
\end{forest}
\end{document}
我更改了样式名称,因为我几乎从不使用大写字母,所以我继续写myfolder
。显然,您可以使用任何您喜欢的名称。(我留下是myFork
因为我不想重新输入它。因此,现在代码样式不一致了。)