6

(this question is a follow up of How to insert folder icon in root node with forest package and Making a directory tree of folders and files)

The following example shows the problem:

\documentclass[border=10pt,multi,tikz]{standalone}
\usepackage[edges]{forest}
\definecolor{folderbg}{RGB}{124,166,198}
\definecolor{folderborder}{RGB}{110,144,169}
\newlength\Size
\setlength\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);
  },
  file/.pic={%
    \filldraw [draw=folderborder, top color=folderbg!5, bottom color=folderbg!10] (-\Size,.4*\Size+5pt) coordinate (a) |- (\Size,-1.2*\Size) coordinate (b) -- ++(0,1.6*\Size) coordinate (c) -- ++(-5pt,5pt) coordinate (d) -- cycle (d) |- (c) ;
  },
}
\forestset{%
  declare autowrapped toks={pic me}{},
  declare boolean register={pic root},
  pic root=0,
  pic dir tree/.style={%
    for tree={%
      folder,
      font=\ttfamily,
      grow'=0,
    },
    before typesetting nodes={%
      for tree={%
        edge label+/.option={pic me},
      },
      if pic root={
        tikz+={
          \pic at ([xshift=\Size].west) {folder};
        },
        align={l}
      }{},
    },
  },
  pic me set/.code n args=2{%
    \forestset{%
      #1/.style={%
        inner xsep=2\Size,
        pic me={pic {#2}},
      }
    }
  },
  pic me set={directory}{folder},
  pic me set={file}{file},
}
\begin{document}

\begin{forest}
  pic dir tree,
  pic root,
  for tree={% folder icons by default; override using file for file icons
    directory,
  },
  [system
    [config
    ]
    [lib
      [Access
      [Plugin
      [List
      [file.txt, file
      ]
      ]
      ]
      ]
    ]
    [tmp
    ]
    [tests
    ]
  ]
\end{forest}
\end{document}

enter image description here

The tmp folder should appear below the file.txt file.

2
  • Isn't the sep- parameter or silimal missing, see ch. `"ode positioning", p. 11 ?
    – MS-SPO
    Commented Apr 18, 2022 at 8:51
  • Although it doesn't do icons, you may find the dirtree package to be of interest.
    – Dan
    Commented Apr 21, 2022 at 16:07

1 Answer 1

5
+200

The simple, manual solution is to add fit=band to the tmp node, which puts the node's subtree in a rectangle of "infinite depth".

To automate this process, just add it to your for tree.

for tree={% folder icons by default; override using file for file icons
  directory,
  fit=band
}

enter image description here

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .