如何绘制如下所示的目录树图像,表示文件夹和文件?
为了绘制文件夹树,我使用了以下代码制作(简单)目录树,但没有明显的选项来包含文件,因此我在 Inkscape 中编辑了图像,如红色所示。
来自 Gonzalo Medina 帖子的复制代码(制作(简单)目录树)如下所示
\documentclass[border=5pt]{standalone}
\usepackage{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,
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},
}
[system
[config
]
[lib
[Access
]
[Plugin
]
]
[templates
]
[tests
]
]
\end{forest}
\end{document}
答案1
您可以style
像这样为您的文件节点创建一个
file/.style={edge path={\noexpand\path [draw, \forestoption{edge}]
(!u.south west) +(7.5pt,0) |- (.child anchor) \forestoption{edge label};},
inner xsep=2pt,font=\small\ttfamily
}
代码
\documentclass[border=5pt]{standalone}
\usepackage{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,
edge path={
\noexpand\path [draw, \forestoption{edge}]
(!u.south west) +(7.5pt,0) |- (.child anchor) pic {folder} \forestoption{edge label};
},
% style for your file node
file/.style={edge path={\noexpand\path [draw, \forestoption{edge}]
(!u.south west) +(7.5pt,0) |- (.child anchor) \forestoption{edge label};},
inner xsep=2pt,font=\small\ttfamily
},
before typesetting nodes={
if n=1
{insert before={[,phantom]}}
{}
},
fit=band,
before computing xy={l=15pt},
}
[system
[config
]
[lib
[Access
]
[Plugin
]
[file.txt,file
]
]
[templates
]
[tests
]
]
\end{forest}
\end{document}
答案2
这个答案有两个主要目的。
通过更新来简化现有代码,以利用当前 Forest 提供的设施,尤其是提供
edges
该folder
选项的库提供的设施。创建一张
file
图片来匹配现有的folder
图片,并启用样式以便在它们之间轻松切换。
此外,它还有次要用途。
pic
如果需要,提供一个可扩展的界面来添加更多图标。
什么时候贡萨洛·梅迪纳发布该代码后,Forest 没有提供支持这种结构的简单开箱即用的解决方案。这就是为什么我编写了诸如dir tree
和Gonzalo Medina 引用的答案以响应对此类图表的请求。
从那时起,我们就有了经过广泛更新和扩展的 Forest,并开始通过库来扩展系统。其中一个已经提供的库edges
,也许令人惊讶的是,它只支持这种树。
我不建议使用旧方法,除非你被困在 Forest 1 中而无法更新。更新的 Forest 对这种树的支持更加灵活、简单且更强大。
首先,我们pic
为文件图标添加一个。
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) ;
},
这将选取基本文件夹颜色。显然,您可以根据需要将其更改为使用不同的颜色。
现在进行一些 Forest 配置。
\forestset{%
declare autowrapped toks={pic me}{},
这是一个保存每个节点所需值的选项。最终,它将采用诸如 之类的值pic {file}
。默认情况下,它是空的。
我们为这种树定义了一种风格pic dir tree
。
pic dir tree/.style={%
for tree={%
folder,
font=\ttfamily,
grow'=0,
},
树的默认值:folder
与 无关。相反,它是 Forest库为目录样式树提供的pic
样式的名称。edges
我们将pic me
在解析树时收集设置。然后,我们将edge path
通过将选项附加到 的值来将它们添加到edge label
。
before typesetting nodes={%
for tree={%
edge label+/.option={pic me},
},
},
},
folder
这样就避免了使用树的样式来设置非默认路径的问题。
现在,对于方便的包装器。pic me set
需要 2 个参数。第一个是要创建的 Forest 样式的名称。第二个是pic
诸如folder
(在图标意义上)或的名称file
。
pic me set/.code n args=2{%
\forestset{%
#1/.style={%
inner xsep=2\Size,
pic me={pic {#2}},
}
}
},
如此定义的每个样式都会做两件事。首先,它将节点的设置inner xsep
为一个值,该值不是硬编码的,而是依赖于\Size
。其次,它将节点的pic me
选项设置为相关值。
目前我们只创建 2 种这样的样式。
pic me set={directory}{folder},
第一个是directory
。这将添加folder
图标。(我们使用directory
而不是folder
以避免进一步混淆。)
pic me set={file}{file},
第二个是file
。这里没有什么复杂的,所以我们可以使用图标的名称file
。
如果有合适的样式,可以用同样的方式创建更多样式pic
。
}
现在要排版这种类型的树,我们可以在树的序言中使用以下内容。
\begin{forest}
pic dir tree,
这将使用上面描述的选项来设置树。
where level=0{}{% folder icons by default; override using file for file icons
directory,
},
在我们的例子中,我们将所有非根节点设置directory
为默认使用该样式,因为它们大多数都需要文件夹图标。
然后我们可以写
[file.txt, file
]
覆盖样式并使用文件图标来表示单个异常。
完整代码:
\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}{},
pic dir tree/.style={%
for tree={%
folder,
font=\ttfamily,
grow'=0,
},
before typesetting nodes={%
for tree={%
edge label+/.option={pic me},
},
},
},
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,
where level=0{}{% folder icons by default; override using file for file icons
directory,
},
[system
[config
]
[lib
[Access
]
[Plugin
]
[file.txt, file
]
]
[templates
]
[tests
]
]
\end{forest}
\end{document}
看https://tex.stackexchange.com/a/405253/如果您想要根节点的文件夹图标。