\tikzset{pics/folder/.style={code={% \node[inner sep=0pt, minimum size=#1](-foldericon){}; \node[folder style, inner sep=0pt, minimum width=0.3*#1, minimum height=0.6*#1, above right, xshift=0.05*#1] at (-foldericon.west){}; \node[folder style, inner sep=0pt, minimum size=#1] at (-foldericon.center){};} }, pics/folder/.default={20pt}, folder style/.style={draw=foldercolor!80!black,top color=foldercolor!40,bottom color=foldercolor} } \forestset{is file/.style={edge path'/.expanded={% ([xshift=\forestregister{folder indent}]!u.parent anchor) |- (.child anchor)}, inner sep=1pt}, this folder size/.style={edge path'/.expanded={% ([xshift=\forestregister{folder indent}]!u.parent anchor) |- (.child anchor) pic[solid]{folder=#1}}, inner ysep=0.3*#1}, folder tree indent/.style={before computing xy={l=#1}}, folder icons/.style={folder, this folder size=#1, folder tree indent=2*#1, inner xsep=10pt}, folder icons/.default={11pt}, } \begin{forest} for tree={font=\sffamily, grow'=0, folder indent=.7em, folder icons} [dataset [metadata%, this folder size=20pt [children.csv, is file] [recordings.csv, is file] [annotations.csv, is file]] [recordings [raw [recording1.wav, is file] % [recording2.wav, is file] ] [converted [standard] [recording1.wav, is file] % [recording2.wav, is file] [vetted] [recording1.wav, is file] % [recording2.wav, is file] ] ] [annotations [its [raw [recording1.its, is file] % [recording2.its, is file] ] [converted, [recording1\_0\_0.csv, is file] % [recording2\_0\_0.csv, is file] ] ] ] ] \end{forest}