1.我想改变森林高度动态,像这样
for tree={
grow=0,reversed, % tree direction
parent anchor=east,child anchor=west, % edge anchors
edge path={none},
minimum width=15mm,
draw=black,
outer sep=0pt,% node shape
l sep=0mm, % level distance
s sep=0mm % level distance
}
2.从 forest_doc 复制以下代码
\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage[left=1.00cm, right=1.00cm, top=1.00cm, bottom=1.00cm]{geometry}
\usepackage{forest}
\begin{document}
\forestset{box/.style={
draw,
no edge,
l=0,
l sep=0mm,
s sep=0mm,
calign=first,
anchor=base west,
content format={\strut\forestoption{content}},
if n children=0{}{
after packing node={
minimum width/.pgfmath=
{s("!l")+max_x("!l")-s("!1")-min_x("!1")},
for children/.wrap pgfmath arg={s+={##1}}{0},
typeset node}}}}
\begin{forest}
for tree={box} [total
[home[saso[Download][TeX]][alja][joe]]
[usr[bin][share]]]
\end{forest}
\end{document}
答案1
这是对Zarko 的回答这样就避免了对如此多的维度进行硬编码。虽然代码有点复杂,但结果却更加灵活,因为可以更轻松地扩展和/或调整树,例如通过添加带有多行文本的附加层或节点。
\documentclass[tikz,border=10pt,multi]{standalone}
\usepackage{forest}
\usetikzlibrary{backgrounds}
% modified from Zarko's answer at https://tex.stackexchange.com/a/314181/
\begin{document}
\tikzset{
L0/.style={fill=green},
L1/.style={fill=orange},
L2/.style={fill=yellow},
L3/.style={fill=pink},
basic/.style={line width=1pt, draw=white},
}
\begin{forest}
for tree={
grow'=0,
parent anchor=children,
child anchor=parent,
edge path={none},
minimum width=15mm,
l sep=0pt,
s sep=0pt,
if n children=0{
minimum height=8mm,
}{},
},
before drawing tree={
where n children=0{
tikz+/.wrap pgfmath arg={
\scoped[on background layer]{\path [L#1, basic] (.north west) rectangle (.south east);}
}{level()},
}{
tikz+/.wrap pgfmath arg={
\scoped[on background layer]{\path [L#1, basic] (.west |- !L.south) rectangle (.east |- !F.north);}
}{level()},
}
}
[AAAA
[EEEE, minimum height=32mm
[EEEE
[YYYY]
[AAAA]
]
[DDDD
[DDDD]
[KKKK]
]
]
[OOOO
[PPPP
[KKKK]
[KKKK]
]
]
]
\end{forest}
\end{document}
答案2
像这样:
我仍处于学习阶段forest
,所以应该有更优雅的解决方案......
\documentclass[border=3mm]{standalone}
\usepackage{forest}
\begin{document}
\forestset{
line width=1pt,
L1/.style={fill=green,minimum height=48mm,yshift=4mm},
L2/.style={fill=orange,minimum height=16mm},
L3/.style={fill=yellow,minimum height=16mm},
L4/.style={fill=pink,minimum height=8mm},
}
\begin{forest}
for tree={
grow=0,reversed, % tree direction
parent anchor=east,child anchor=west, % edge anchors
edge path={none},
minimum width=15mm, draw=white,outer sep=0pt,% node shape
l sep=0mm, % level distance
s sep=0mm % level distance
}
[AAAA,L1
[EEEE,L2,minimum height=32mm
[EEEE,L3
[YYYY,L4][AAAA,L4]
]
[DDDD,L3
[DDDD,L4][KKKK,L4]
]
]
[OOOO,L2
[PPPP,L3
[KKKK,L4][KKKK,L4]
]
]
]
\end{forest}
\end{document}
我按照 MWE 中的说明更改了树,这样更有可能提供图像。