
Я пытаюсь сделать диаграмму для структуры папок/файлов. Проблема в том, что в подпапках находится большое количество файлов, что приводит к очень длинной диаграмме.
МВЭ:
\documentclass[border=5pt]{standalone}
\usepackage[edges]{forest}
\definecolor{folderbg}{RGB}{124,166,198}
\definecolor{folderborder}{RGB}{110,144,169}
\def\Size{4pt}
\tikzset{
folder/.pic={
\filldraw[draw=folderborder,top color=folderbg!50,bottom color=folderbg]
(-1.05*\Size,0.2\Size+5pt) rectangle ++(.75*\Size,-0.2\Size-5pt);
\filldraw[draw=folderborder,top color=folderbg!50,bottom color=folderbg]
(-1.15*\Size,-\Size) rectangle (1.15*\Size,\Size);
}
}
\begin{document}
\begin{forest}
for tree={
font=\ttfamily,
grow'=0,
child anchor=west,
parent anchor=south,
anchor=west,
calign=first,
inner xsep=7pt,
forked edges,
edge path={
\noexpand\path [draw, \forestoption{edge}]
(!u.south west) +(7.5pt,0) |- (.child anchor) pic {folder} \forestoption{edge label};
},
before typesetting nodes={
if n=1
{insert before={[,phantom]}}
{}
},
fit=band,
before computing xy={l=15pt},
}
[Main Folder
[subfolder 1
[subsubfolder 1
[file
]
]
[subsubfolder 2
[file
]
]
[file
]
]
[subfolder 2
]
[subfolder 3
]
[subfolder 4
]
]
\end{forest}
\end{document}
Что производит:
Есть ли способ разветвить каждую подпапку верхнего уровня по горизонтали, а оставшуюся структуру внутри подпапки сделать вертикальной, как на схеме выше? Например:
ОБНОВЛЯТЬ
Используя ответ @js bibra, я изменил строку
grow'=0,
К:
where level=0{
l sep'=0.1cm,
s sep'=0.5cm,
}{
grow'=0,
},
Для справки моя полная диаграмма выглядит так:
Это довольно близко к тому, чего я хотел бы добиться. Есть ли способ уменьшить горизонтальный интервал и центрировать ветви относительно родителя?
решение1
Это то, что вы ищите
\documentclass[border=10pt]{standalone}
\usepackage[edges]{forest}
\usetikzlibrary{shadows,arrows.meta}
\tikzset{
parent/.style={align=center,text width=4cm,fill=gray!50,rounded corners=2pt},
child/.style={align=center,text width=2.5cm,fill=gray!20,rounded corners=6pt},
grandchild/.style={fill=white,text width=2.3cm}
}
\begin{document}
\begin{forest}
for tree={%
thick,
drop shadow,
node options={
draw,
font=\sffamily
},
edge={
semithick,
-Latex
},
where level=0{
parent,
l sep'=0.8cm,
s sep'=1.0cm,
}{
folder,
grow'=0,
},
where level=1{
minimum height=1cm,
child,
l sep=7.5mm,
for descendants={%
grandchild,
minimum height=0.6cm,
},
for children={
before computing xy={s+=5mm},
}
}{},
}
[\large Long text with line break%
[\textbf{Test 1} \\ with a lot of subtext%
[Topic]
[Long topic with line break]
[Topic]
]
[\textbf{Test 2} \\ with a lot of subtext%
[Topic]
[Long topic with line break]
[Topic]
]
[\textbf{Test 3} \\ with a lot of subtext%
[Topic]
[Long topic with line break]
[Topic]
]
[\textbf{Test 4} \\ with a lot of subtext%
[Topic]
[Long topic with line break]
[Topic]
]
]
\end{forest}
\end{document}