第一次发帖。
我一直在尝试弄清楚如何结合这些问题的答案: 使用 Forest 包在多个页面上显示目录树
以及 SE 上这些问题的一些其他相关变体。最终目标是能够通过转换 XML 输出来在更大的 PDF 文档中生成文件系统树/目录树树tree -X directory
使用以下管道命令(as ):
sed '1,2d' tree-output.xml |tac | sed '1,5d' | tac | sed 's/<file name=\"/[/g' | sed 's/\"><\/file>/]/g' | sed 's/<directory name=\"/[/g' | sed 's/\">//g' | sed 's/<\/directory>/]/g' >> transformed-tree.tex
然后使用\include{transformed-tree}
到目前为止,管道组工作正常……并且它似乎正确地输出了森林解析为文件夹树的内容。转换仅作为背景信息包含在内。我知道输出与下面代码中的输出不同(手动修改了[ filename, file]
来自制作文件夹和文件的目录树
以及来自如何使用森林包在根节点插入文件夹图标)
我遇到的问题是,当树必须跨越多页时,如何正确显示该树。
我对 TeX 的了解还不够,不知道我错在哪里。这是一个(不)工作的示例。它可以编译,但分页符使文件夹/文件图标停止工作,并且垂直间距完全不正常:
% from https://tex.stackexchange.com/questions/405192/how-to-insert-folder-icon-in-root-node-with-forest-package/405253#405253
% and https://tex.stackexchange.com/questions/356749/directory-tree-on-multiple-pages-using-forest-package
\documentclass[border=10pt,multi,tikz]{article}
\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 from https://tex.stackexchange.com/questions/356749/directory-tree-on-multiple-pages-using-forest-package
\def\hiddenparcommand{\par}
\newcommand\otherhiddenparcommand{\par\noindent}
\newcommand\hiddencommacommand{, }
\forestset{%
declare keylist register={split here ids},% the list of nodes to split the tree at
split here ids={},
declare keylist register={split here interjects},% the list of comments to put in between the tree parts
split here interjects={},
declare keylist={split here auto siblings}{},% a list to hold the siblings which need edge restoration
declare toks register=split here toks,
declare dimen register=tmpdima,
tmpdima'=0pt,
declare dimen register=tmpdimb,
tmpdimb'=0pt,
declare dimen register=tmpdimc,
tmpdimc'=0pt,
to widest/.style={
tikz+={\path (\forestregister{tempdima}, \forestoption{y}) -- (\forestregister{tempdimb}, \forestoption{y});},
},
hide commas/.style={%
split here toks+={\hiddencommacommand},
split here toks+={#1},
},
split dir tree pre/.style={%
label={[text=gray, anchor=north, font=\scriptsize]below:{[cont.]}{}},
},
split dir tree post/.style={%
label={[font=\scriptsize, anchor=south, text=gray]above:{[cont.]}{}},
},
split dir tree auto post/.style={% this gets applied to the first node after a break
split dir tree post,
tempkeylistc'={},
tmpdimb/.option=y,
for nodewalk={
while={
> ORw2+d _+d < On=! & {y}{tmpdimb}{##2-##1} {\textheight-#1} {n'}{1}%
}{
next,
tempkeylistc/.option=name
}%
}{},
% save the list
split here auto siblings/.register=tempkeylistc,
tikz+/.process={% this tries to redraw the edges to the following siblings
OOw2{edge}{id}%
{%
\path [##1] (!u.parent anchor |- .north) ++(\forestregister{folder indent},1ex) coordinate (before ##2) |- (.child anchor);
\edef\tempa{\foresteoption{split here auto siblings}}
\foreach \i in \tempa \path [##1] (before ##2) |- ({forest cs:\i.child anchor});
}%
},
},
split dir tree/.code={%
\forestset{%
draw tree stage/.style={
for root'={
tempdima/.min={%
>OOw2+d{x}{min x}{####1+####2}%
}{tree},
tempdimb/.max={%
>OOw2+d{x}{max x}{####1+####2}%
}{tree},
for tree={%
to widest,
},
},
tempcountb'=-1,
do until={%
strequal((split_here_ids),"")
}{%
tempkeylistb'={},
tempkeylista'={},
split register={split here ids}{,}{tempcounta,tempkeylistb+},
split register={split here interjects}{,}{temptoksa,tempkeylista+},
split here ids'/.register=tempkeylistb,
split here interjects'/.register=tempkeylista,
% Sašo Živanović: http://chat.stackexchange.com/transcript/message/28484520#28484520
for nodewalk={%
draw tree processing order/.style={%
filter={tree}{> ORw+n< OR> & {id}{tempcounta}{########1+1}{id}{tempcountb}}%
}%
}{},
for root'={draw tree},
TeX/.process={Rw{temptoksa}{\otherhiddenparcommand ####1\hiddenparcommand}},
tempcountb'/.register=tempcounta,
},
for nodewalk={%
draw tree processing order/.style={%
filter={tree}{>OR>{id}{tempcountb}}%
}%
}{},
for root'={draw tree},
},
}%
},
split dir here auto/.style n args=2{%
split dir tree pre,
!next node.split dir tree auto post=#2,
split here ids+/.option=id,
% !next node.split resume here ids+/.option=id,
split={#1}{,}{split here toks,hide commas},
split here interjects/.register=split here toks,
},
split dir tree auto/.style={%
split dir tree,
before drawing tree={%
tempdima/.max={y}{tree},
tempdimc/.register=tempdima,
tempdimd/.min={y}{tree},
tempdima-/.register=tempdimd,
tempdimb'=\textheight,
tmpdima'=10ex,
tmpdimc'=\pagetotal,
while={%
>RR>{tempdima}{tempdimb}%
}{%
for nodewalk={%
root',
until={%
> ROw2+d RRw2+d > {tempdimc}{y}{##1-##2} {tmpdima}{tmpdimc}{\textheight-##2-##1}%
}{next node},
previous node,
split dir here auto/.process={R_w2{tmpdima}{continued}{{##2}{##1}}},
next node,
tempdima/.option=y,
tempdimc/.register=tempdima,
tempdima-/.register=tempdimd,
tmpdima'=15ex,
tmpdimc'=0pt
}{},
},
},
},
}
%end from https://tex.stackexchange.com/questions/356749/directory-tree-on-multiple-pages-using-forest-package
\begin{document}
\begin{forest}
pic dir tree,
pic root,
for tree={% folder icons by default; override using file for file icons
directory,
folder,% this and next 2 lines from https://tex.stackexchange.com/questions/356749/directory-tree-on-multiple-pages-using-forest-package
grow'=0,
fit=band
},
split dir tree auto, % line from https://tex.stackexchange.com/questions/339669/automatic-page-break-with-forest-spanning-a-tree-over-multiple-pages
[ .
[ 1.txt, file ]
[ MyShelve, file ]
[ Pipfile, file ]
[ Pipfile.lock, file ]
[ cl.py, file ]
[ clasync.py, file ]
[ ex1.py, file ]
[ ex10-2.py, file ]
[ ex11-3.py, file ]
[ ex12-4.py, file ]
[ ex12-4a.py, file ]
[ ex13.py, file ]
[ ex14.py, file ]
[ ex15.py, file ]
[ ex16.py, file ]
[ ex17-loops.py, file ]
[ ex17.py, file ]
[ ex18.py, file ]
[ freewrite
[ devel
[ fwprompt.py, file ]
[ makephrases.py, file ]
[ prompt2.py, file ]
]
[ makephrases.py, file ]
[ phraseprompt.py, file ]
[ phrases.txt, file ]
]
[ jt.py, file ]
[ jt1.py, file ]
[ jt2.py, file ]
[ jt2a.py, file ]
[ jt3.py, file ]
[ jt4.py, file ]
[ jt5.py, file ]
[ jt6.py, file ]
[ jt7.py, file ]
[ jt8.py, file ]
[ python-script-examples
[ README.md , file]
[ Vagrantfile , file]
[ automate-ssh-with-netmiko
[ collect-cdp-information.py, file ]
[ result.html, file ]
]
[ cisco-ios-config-parameter-extraction
]
[ cisco-nx-api-example
[ interface-description-cleaner.py, file ]
]
[ config-generator-with-custom-filters
[ config-generator-with-custom-filter.py, file ]
[ ip-interface-config.jinja2, file ]
[ parameters.json, file ]
]
[ config-generator-with-python-and-jinja2
[ parameters.csv, file ]
[ parameters.json, file ]
[ switch.j2, file ]
]
[ create-hsrp-interface-configuration
[ create-hsrp-interface-configuration.py, file ]
]
[ json-code-example
[ cl.py, file ]
[ cl1.py, file ]
[ cl2.py, file ]
]
[ jupyter-config
[ 10-nb-import-hook.py, file ]
[ about.ipynb, file ]
[ jupyter-notebook.upstart, file ]
]
[ migrate-static-arp-entries
[ create-migration-templates.py, file ]
]
[ notebooks
[ Introduction to the ipaddress module with IPv4.ipynb, file ]
[ Introduction to the ipaddress module with IPv6.ipynb, file ]
[ pandas
[ Merge DataFrames in Pandas.ipynb, file ]
]
]
[ parse-show-inventory-with-textfsm
]
[ requirements.txt, file ]
[ setup.yaml, file ]
]
]
[ shellsets.txt , file]
[ skele-cli
[ MANIFEST.in , file]
[ README.rst , file]
[ setup.cfg , file]
[ setup.py , file]
[ skele
[ cli.py , file]
[ commands
[ base.py , file]
[ hello.py, file ]
]
]
[ tests
[ commands
]
]
]
[ test
[ a
[ boo, file ]
[ boo123, file ]
]
[ b
[ boo12, file ]
[ boo123 , file]
[ c
[ boot, file ]
[ boot1, file ]
[ boot13, file ]
]
]
[ boo ]
[ boo1 ]
[ boo12 ]
[ boo123 ]
]
[ todo.txt, file ]
[ treestuff
[ dirtree.pl , file]
[ familytree.pdf , file]
[ familytree.tex , file]
[ forest-close.tex , file]
[ forest-example-2.aux, file ]
[ forest-example-2.dvi, file ]
[ forest-example-2.fls, file ]
[ forest-example-2.log , file]
[ forest-example-2.pdf, file ]
[ forest-example-2.tex, file ]
[ forest-header.tex, file ]
[ forest-standalone-frame.tex, file ]
[ forest-start.tex, file ]
[ forest.ex.tex, file ]
[ forest.ex1.tex, file ]
[ fortt.pdf, file ]
[ fortt.tex, file ]
[ fortt1.tex, file ]
[ fortt2.pdf, file ]
[ fortt2.tex, file ]
[ fortt3.pdf, file ]
[ fortt3.tex, file ]
[ fortt4.pdf, file ]
[ fortt4.tex, file ]
[ fortt5.pdf, file ]
[ fortt5.tex, file ]
[ testtree.xml, file ]
[ textree.pdf, file ]
[ textree.tex, file ]
[ tikz-tree-sample.tex, file ]
[ tree.forest.tex, file ]
[ tree.json, file ]
[ tree.xml, file ]
[ tree1.xml, file ]
[ tree1.xml.forest, file ]
[ tree2.xml.tex, file ]
[ treedir.tex, file ]
[ treetest.tex, file ]
[ xmltree.to.forest.txt, file ]
]
\end{forest}
\end{document}
输出如下所示(使用 ghostscript 将输出 pdf 分成单个页面,使用 Preview.app 将每个页面导出为 PNG):
您可能已经注意到dirtree.pl
上面示例树中的文件列表。尝试使用forest
而不是dirtree
因为我无法像读取森林树那样轻松读取 dirtree,并且我的目标是生成美观的目录结构树。
编辑从这里开始
后续问题:如果需要通过 ~~ \include{}
s?~~随意将树包含在文档中,我的问题的答案会有所不同吗\input{}
?我之所以问这个问题,是因为我注意到该forest
包的这些用法似乎需要在\forestset{}
前后添加代码()\begin{document}
,而我正在考虑使用代码片段生成文档,其中使用 bash 脚本将前言和代码放在一起……实际森林由上述管道的变化生成...
另一种解决方案可能是使用此代码将森林树图形生成为独立的 pdf...
\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,
},
\input{transformed-tree}
\end{forest}
\end{document}
其中transformed-tree
指的是transformed-tree.tex
(如上文中的转换管道)。
我可以使用此代码将其分成多个页面:
\documentclass[letterpaper]{minimal}
\usepackage[pdftex,letterpaper]{geometry}
\usepackage{graphicx}
\begin{document}
\includegraphics[viewport={0 3030pt 400pt 2525pt},clip]{ftrn2a.pdf}
\newpage
\includegraphics[viewport={0 2525pt 400pt 2020pt},clip]{ftrn2a.pdf}
\newpage
\includegraphics[viewport={0 2020pt 400pt 1515pt},clip]{ftrn2a.pdf}
\newpage
\includegraphics[viewport={0 1515pt 400pt 1010pt},clip]{ftrn2a.pdf}
\newpage
\includegraphics[viewport={0 1010pt 400pt 505pt},clip]{ftrn2a.pdf}
\newpage
\includegraphics[viewport={0 505pt 400pt 0},clip]{ftrn2a.pdf}
\end{document}
我首先必须弄清楚独立树状 pdf 的总大小...我用这个来做到这一点:
pdfinfo -box ftrn2a.pdf | grep "Page size" | cut -d ' ' -f 8,10 | echo "
cut -d''-f 2 / 750" | bc -l | cut -d '.' -f 1
,然后在算出每页大约 500pt 看起来没问题后使用计算器...
由此产生的输出有其自身的问题......例如跨越文字和图标......
虽然这可能在紧急情况下起作用,但我相信可能需要花费大量时间来调整视口设置以避免剪切任何文本。
答案1
代码无法运行,但更接近。(它可以编译,但第二页是错误的,原因我目前还不太清楚。)
代码基本上来自使用 Forest 包在多个页面上显示目录树,除了文件夹/文件形状可能来自其他人,但我不知道在哪里或是谁。现在这里没有其他东西——没有什么新东西。但它在图标方面仍然比问题中的代码更好。(边缘是令人讨厌的。)
\documentclass{article}
\usepackage[edges]{forest}
\definecolor{folderbg}{RGB}{124,166,198}
\definecolor{folderborder}{RGB}{110,144,169}
\newlength\Size
\setlength\Size{4pt}
\newsavebox{\diricon}
\newsavebox{\fileicon}
\sbox{\diricon}{\tikz{\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);}}
\sbox{\fileicon}{\tikz{\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) ;}}
% addaswyd o gôd Sašo Živanović: http://tex.stackexchange.com/a/296771/
\def\hiddenparcommand{\par}
\newcommand\otherhiddenparcommand{\par\noindent}
\newcommand\hiddencommacommand{, }
\forestset{%
declare keylist register={split here ids},% the list of nodes to split the tree at
split here ids={},
declare keylist register={split here interjects},% the list of comments to put in between the tree parts
split here interjects={},
declare keylist={split here auto siblings}{},% a list to hold the siblings which need edge restoration
declare toks register=split here toks,
declare dimen register=tmpdima,
tmpdima'=0pt,
declare dimen register=tmpdimb,
tmpdimb'=0pt,
declare dimen register=tmpdimc,
tmpdimc'=0pt,
to widest/.style={
tikz+={\path (\forestregister{tempdima}, \forestoption{y}) -- (\forestregister{tempdimb}, \forestoption{y});},
},
hide commas/.style={%
split here toks+={\hiddencommacommand},
split here toks+={#1},
},
split dir tree pre/.style={%
label={[text=gray, anchor=north, font=\scriptsize]below:{[cont.]}{}},
},
split dir tree post/.style={%
label={[font=\scriptsize, anchor=south, text=gray]above:{[cont.]}{}},
},
split dir tree auto post/.style={% this gets applied to the first node after a break
split dir tree post,
tempkeylistc'={},
tmpdimb/.option=y,
for nodewalk={
while={
> ORw2+d _+d < On=! & {y}{tmpdimb}{##2-##1} {\textheight-#1} {n'}{1}%
}{
next,
tempkeylistc/.option=name
}%
}{},
% save the list
split here auto siblings/.register=tempkeylistc,
tikz+/.process={% this tries to redraw the edges to the following siblings
OOw2{edge}{id}%
{%
\path [##1] (!u.parent anchor |- .north) ++(\forestregister{folder indent},1ex) coordinate (before ##2) |- (.child anchor);
\edef\tempa{\foresteoption{split here auto siblings}}
\foreach \i in \tempa \path [##1] (before ##2) |- ({forest cs:\i.child anchor});
}%
},
},
split dir tree/.code={%
\forestset{%
draw tree stage/.style={
for root'={
tempdima/.min={%
>OOw2+d{x}{min x}{####1+####2}%
}{tree},
tempdimb/.max={%
>OOw2+d{x}{max x}{####1+####2}%
}{tree},
for tree={%
to widest,
},
},
tempcountb'=-1,
do until={%
strequal((split_here_ids),"")
}{%
tempkeylistb'={},
tempkeylista'={},
split register={split here ids}{,}{tempcounta,tempkeylistb+},
split register={split here interjects}{,}{temptoksa,tempkeylista+},
split here ids'/.register=tempkeylistb,
split here interjects'/.register=tempkeylista,
% Sašo Živanović: http://chat.stackexchange.com/transcript/message/28484520#28484520
for nodewalk={%
draw tree processing order/.style={%
filter={tree}{> ORw+n< OR> & {id}{tempcounta}{########1+1}{id}{tempcountb}}%
}%
}{},
for root'={draw tree},
TeX/.process={Rw{temptoksa}{\otherhiddenparcommand ####1\hiddenparcommand}},
tempcountb'/.register=tempcounta,
},
for nodewalk={%
draw tree processing order/.style={%
filter={tree}{>OR>{id}{tempcountb}}%
}%
}{},
for root'={draw tree},
},
}%
},
split dir here auto/.style n args=2{%
split dir tree pre,
!next node.split dir tree auto post=#2,
split here ids+/.option=id,
% !next node.split resume here ids+/.option=id,
split={#1}{,}{split here toks,hide commas},
split here interjects/.register=split here toks,
},
split dir tree auto/.style={%
split dir tree,
before drawing tree={%
tempdima/.max={y}{tree},
tempdimc/.register=tempdima,
tempdimd/.min={y}{tree},
tempdima-/.register=tempdimd,
tempdimb'=\textheight,
tmpdima'=10ex,
tmpdimc'=\pagetotal,
while={%
>RR>{tempdima}{tempdimb}%
}{%
for nodewalk={%
root',
until={%
> ROw2+d RRw2+d > {tempdimc}{y}{##1-##2} {tmpdima}{tmpdimc}{\textheight-##2-##1}%
}{next node},
previous node,
split dir here auto/.process={R_w2{tmpdima}{continued}{{##2}{##1}}},
next node,
tempdima/.option=y,
tempdimc/.register=tempdima,
tempdima-/.register=tempdimd,
tmpdima'=15ex,
tmpdimc'=0pt
}{},
},
},
},
}
\begin{document}
\begin{forest}
for tree={% folder icons by default; override using file for file icons
folder,
grow'=0,
fit=band,
},
split dir tree auto,
before typesetting nodes={
where n children=0{content/.wrap value={\usebox{\fileicon} #1}}{content/.wrap value={\usebox{\diricon} #1}}
}
[ .
[1.txt]
[MyShelve]
[Pipfile]
[Pipfile.lock]
[cl.py]
[clasync.py]
[ex1.py]
[ex10-2.py]
[ex11-3.py]
[ex12-4.py]
[ex12-4a.py]
[ex13.py]
[ex14.py]
[ex15.py]
[ex16.py]
[ex17-loops.py]
[ex17.py]
[ex18.py]
[freewrite
[devel
[fwprompt.py]
[makephrases.py]
[prompt2.py]
]
[makephrases.py]
[phraseprompt.py]
[phrases.txt]
]
[jt.py]
[jt1.py]
[jt2.py]
[jt2a.py]
[jt3.py]
[jt4.py]
[jt5.py]
[jt6.py]
[jt7.py]
[jt8.py]
[python-script-examples
[README.md]
[Vagrantfile]
[automate-ssh-with-netmiko
[collect-cdp-information.py]
[result.html]
]
[cisco-ios-config-parameter-extraction
]
[cisco-nx-api-example
[interface-description-cleaner.py]
]
[config-generator-with-custom-filters
[config-generator-with-custom-filter.py]
[ip-interface-config.jinja2]
[parameters.json]
]
[config-generator-with-python-and-jinja2
[parameters.csv]
[parameters.json]
[switch.j2]
]
[create-hsrp-interface-configuration
[create-hsrp-interface-configuration.py]
]
[json-code-example
[cl.py]
[cl1.py]
[cl2.py]
]
[jupyter-config
[10-nb-import-hook.py]
[about.ipynb]
[jupyter-notebook.upstart]
]
[migrate-static-arp-entries
[create-migration-templates.py]
]
[notebooks
[Introduction to the ipaddress module with IPv4.ipynb ]
[Introduction to the ipaddress module with IPv6.ipynb ]
[pandas
[Merge DataFrames in Pandas.ipynb ]
]
]
[parse-show-inventory-with-textfsm
]
[requirements.txt]
[setup.yaml]
]
]
[shellsets.txt]
[skele-cli
[MANIFEST.in]
[README.rst]
[setup.cfg]
[setup.py]
[skele
[cli.py]
[commands
[base.py]
[hello.py]
]
]
[tests
[commands
]
]
]
[test
[a
[boo]
[boo123]
]
[b
[boo12]
[boo123]
[c
[boot]
[boot1]
[boot13]
]
]
[boo ]
[boo1 ]
[boo12 ]
[boo123 ]
]
[todo.txt]
[treestuff
[dirtree.pl]
[familytree.pdf]
[familytree.tex]
[forest-close.tex]
[forest-example-2.aux]
[forest-example-2.dvi]
[forest-example-2.fls]
[forest-example-2.log]
[forest-example-2.pdf]
[forest-example-2.tex]
[forest-header.tex]
[forest-standalone-frame.tex]
[forest-start.tex]
[forest.ex.tex]
[forest.ex1.tex]
[fortt.pdf]
[fortt.tex]
[fortt1.tex]
[fortt2.pdf]
[fortt2.tex]
[fortt3.pdf]
[fortt3.tex]
[fortt4.pdf]
[fortt4.tex]
[fortt5.pdf]
[fortt5.tex]
[testtree.xml]
[textree.pdf]
[textree.tex]
[tikz-tree-sample.tex]
[tree.forest.tex]
[tree.json]
[tree.xml]
[tree1.xml]
[tree1.xml.forest]
[tree2.xml.tex]
[treedir.tex]
[treetest.tex]
[xmltree.to.forest.txt]
]
\end{forest}
\end{document}