这与使用 Forest 包在多个页面上显示目录树但我想在两列布局中放置一棵非常长而窄的树。尝试过使用,\twocolumn
但并不那么简单…… :(
似乎\twocolumn
强制分页,但我不想这样做。所以我后来尝试了一下,ltxgrid
但结果仍然很糟糕。
最后我发现我需要使用multicol
包但结果仍然很糟糕。
我的问题是:如何获得多页两列文件夹树,而无需在单列/双列切换时进行分页?如果树的第一页和最后一页上的列垂直对齐,那就完美了。我的意思是两列的树高度相似。
代码:
\documentclass[%
12pt,
a4paper,
% twocolumn, % don't use it for whole document
]{article}
\usepackage[%
includehead=true,%
includefoot=true,%
twoside,
textwidth=17cm,
hmarginratio=3:2,
textheight=25cm,
vmarginratio=1:1,
verbose,%
]{geometry}
\usepackage{blindtext}
%\usepackage{storebox}
\usepackage[edges]{forest}
\usepackage{adjustbox}
%\usepackage{ltxgrid}
% addaswyd o god Saso Zivanovic: 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}
% standard one column
\blindtext
% tree in 2 column mode
\twocolumn
%\twocolumngrid
\begin{forest}
for tree={
folder,
grow'=0,
fit=band,
},
split dir tree auto,
[ XYZ
[ XYZ
[ XYZ
[ XYZ
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
[ XYZ
[ XYZ ]
]
[ XYZ
[ XYZ ]
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
[ XYZ
[ XYZ ]
]
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
[ XYZ
[ XYZ ]
[ XYZ ]
]
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
[ XYZ
[ XYZ ]
]
[ XYZ
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
[ XYZ
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
[ XYZ
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
]
[ XYZ
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
[ XYZ
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
[ XYZ ]
]
]
[ XYZ
[ XYZ
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
[ XYZ ]
]
[ XYZ
[ XYZ ]
]
]
]
]
\end{forest}
% back to one column
\onecolumn
%\onecolumngrid
\blindtext
\end{document}
结果为\twocolumn
:
并且结果是ltxgrid
和的\onecolumngrid
和\twocolumngrid
:
答案1
代码经过最低限度的测试。
买者自负
这回答了提问者显然想问的问题,而不是原始问题。据我了解,理想的情况是 (1) 两列和 (2) 树从与文本相同的页面开始,文本从树的最后一页开始,即它应该不是开始于下列的或结束于以前的页面。这使问题变得复杂,因为 (1)在环境\pagetotal
中设置为零multicols
,并且 (2) 临时维度不能在第一个循环中设置为 0,而必须在第二个循环中设置为 0。
原始代码也有一个错误,该错误已在此版本中修复,导致出现所示的问题,该错误与 无关\twocolumn
,但只需将字体更改为 12pt 即可触发。
% !TEX TS-program = pdflatex
% !TEX encoding = UTF-8 Unicode
% arara: pdflatex
\pdfminorversion=7
% ateb: https://tex.stackexchange.com/a/445574/ addaswyd o ateb: http://tex.stackexchange.com/a/356922/ addaswyd o gwestiwn Sebastian Widz: http://tex.stackexchange.com/q/356749/ a chestiwn Simon: https://tex.stackexchange.com/q/445199/
% gweler hefyd forest2-1-dir-tree-split-auto{4,5,6,7}.tex
\documentclass[a4paper,12pt]{article}
\usepackage{geometry,kantlipsum,multicol}% geometry or similar is needed for correct A4 layout
\usepackage[edges]{forest}
% addaswyd o gôd Sašo Živanović: http://tex.stackexchange.com/a/296771/
\def\hiddenparcommand{\par}
\newcommand\otherhiddenparcommand{\par\noindent}
\newcommand\hiddencommacommand{, }
\makeatletter
\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 toks register=split here toks,
declare dimen register=tmpdima,
tmpdima'=0pt,
declare dimen register=tmpdimb,
tmpdimb'=0pt,
declare dimen register=tmpdimc,
tmpdimc'=0pt,
declare dimen register=tmpdimd,
tmpdimd'=\textheight,
declare boolean register={multicols},
not multicols,
declare count={split parent id}{0},
declare count={split descendant id}{0},
declare count register={split parent id count},
split parent id count'=0,
declare toks={split descendant}{},
declare toks register={split dir tree cont},
split dir tree cont=continued,
declare long step={current and preceding parents}{}{filter={current and preceding nodes}{>OO={n children}{n children}}},
declare keylist={splitter list}{},
to widest/.style={
tikz+={\path (\forestregister{tempdima}, \forestoption{y}) -- (\forestregister{tempdimb}, \forestoption{y});},
},
hide commas/.style={%
split here toks+={\hiddencommacommand},
split here toks+/.option=#1,
},
split dir tree pre/.style={%
label={[text=gray, anchor=north, font=\scriptsize]below:{[cont.]}{}},
tempcountd/.option=id,
temptoksc/.option=name,
for Nodewalk={on invalid=fake}{do until={ > O_ O_ =!=| {split descendant id}{0} {level}{0} }{split descendant id/.register=tempcountd, split descendant/.register=temptoksc, previous node}}{},
},
split dir tree post/.style={%
label={[font=\scriptsize, anchor=south, text=gray]above:{[cont.]}{}},
tikz+/.process={% this draws an edge to the first node after a break
OOOw+nw3 {edge}{edge label}{id}{##1+1}%
{%
\path [##1] (!u.parent anchor |- .north) ++(\forestregister{folder indent},1ex) coordinate (before ##3) |- (.child anchor)##2 ;
}%
},
},
split dir tree/.code={%
\forestset{%
for tree={
folder,
grow'=0,
edge path={},
},
tikz+/.process={Ow{id}{\path (.parent anchor) coordinate (before ##1);}},
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}}%west
}%
}{},
for root'={draw tree},
},
}%
},
split dir here auto/.style={%
split dir tree pre,
!next node.split dir tree post,
split 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={%
% for tree={tikz+/.process={Ow{id}{\node [blue] at (.child anchor) {##1};}}},
tempdima/.max={y}{tree},
tempdimc/.register=tempdima,
tempdimd/.min={y}{tree},
tempdima-/.register=tempdimd, % cyfanswm yr y sy'n angen
tempdimb'=\textheight,
tmpdima'=10ex,
not tempboola,
if multicols={tmpdimc=\textheight-\page@free+\multicolsep, tempboola, split dir tree cont=\relax}{tmpdimc'=\pagetotal},
tempcounta/.option=id,
temptoksb/.option=name,
not tempboolb,
tempboolc,
while={%
>RR>{tempdima}{tempdimb}%
}{%
for nodewalk={%
id/.register=tempcounta,
temptoksb/.option=name,
until={%
> ROw2+d RRRw3+d > {tempdimc}{y}{##1-##2} {tmpdima}{tmpdimc}{tmpdimd}{##3-##2-##1}%
}{next node, split parent id/.register=tempcounta, split parent id+'=1},
previous node,
if={>Pn={forestloopcount}{1}}{tempcounta/.option=id, temptoksd/.option=name, for current and preceding nodes={split descendant id/.register=tempcounta, split descendant/.register=temptoksd,}}{},
split dir here auto/.register=split dir tree cont,
next node,
split parent id/.option=id,
split parent id+'=1,
tempcounta/.option=id,
split parent id count/.option=split parent id,
tempdima/.option=y,
tempdimc/.register=tempdima,
tempdima-/.register=tempdimd,
tmpdima'=15ex,
if tempboola={not tempboola}{tmpdimc'=0pt},
if={>RR&{multicols}{tempboolc}}{% 1 for odd (except first); 0 for evens; split dir tree cont changes next iteration i.e. 1 for evens; 0 for odds
if tempboolb={
not tempboolb, split dir tree cont=\relax,
if={> RR_w3+dRw+d< {tempdima}{tmpdima}{10ex}{##1+##2+##3}{tempdimb}{##1+##1} }{
not tempboolc,
split dir tree cont=\relax,
tempdimb/.process={Rw+d{tempdima}{##1/2}},
tmpdimd/.register=tempdimb,
tempdimb+/.register=tmpdima,
tmpdimd+/.process={Rw+d{tmpdima}{##1/3}},
tmpdima'=0pt,
}{},
}{
tempboolb, split dir tree cont=continued,
},
}{},
}{},
},
where level=0{}{
if split parent id=0{split parent id/.register=split parent id count}{},
if={ > OOw+n< {!u.id}{split parent id}{##1-1} }{
tikz+/.process={ OOOw3 {edge}{edge label}{split parent id} {\path [##1] (!u.parent anchor |- before ##3) ++(\forestregister{folder indent},0pt) |- (.child anchor)##2;}}
}{
if={ > OOw+n= {id}{split parent id}{##1-1} }{}{
tikz+/.process={ OOw2 {edge}{edge label} {\path [##1] (!u.parent anchor) ++(\forestregister{folder indent},0pt) |- (.child anchor)##2;}}
},
},
},
where n children=0{}{
if={ > OO> {!l.id}{split descendant id} }{
tikz+/.process={ OOw2 {edge}{split descendant} { \path [##1] (.parent anchor) ++(\forestregister{folder indent},0pt) coordinate (a) -- (a |- ##2.parent anchor) -- ++(0pt,-1ex); }
},
}{},
},
split register={split here ids}{,}{splitter split},
},
},
splitter split/.style={
for nodewalk={id=#1}{
tempcounta/.option=id,
tempcountc/.option=split parent id,
tempkeylista'=,
for filter={current and preceding nodes}{>O_>{n children}{0}}{
if={> OR > OR < & {!l.id}{tempcounta} {id}{tempcountc} }{
tempkeylista+/.option=name,
}{},
},
splitter list/.register=tempkeylista,
tikz+/.process={
OOw2{split parent id}{edge}{
\edef\tempa{\foresteoption{splitter list}}
\foreach \i in \tempa {\path [##2] (\i.parent anchor |- before ##1) ++(\forestregister{folder indent},0pt) coordinate (b) -- (.parent anchor -| b) -- ++(0,-1ex); }
}
},
},
if nodewalk valid={next}{temptoksa/.option=!next.name}{temptoksa'={}},
},
}
\makeatother
\begin{document}
\kant[1-2]
\begin{multicols}{2}
\begin{forest}
split dir tree auto,
multicols,
[0. XYZ [1. XYZ [2. XYZ [3. XYZ] [3. XYZ] [3. XYZ] [3. XYZ [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] ] [3. XYZ [4. XYZ] [4. XYZ] ] [3. XYZ [4. XYZ] [4. XYZ] ] ] [2. XYZ [3. XYZ] [3. XYZ] [3. XYZ] [3. XYZ] [3. XYZ [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] ] [3. XYZ] [3. XYZ [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] ] ] [2. XYZ [3. XYZ] [3. XYZ] [3. XYZ] [3. XYZ] [3. XYZ [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] ] [3. XYZ [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] ] ] [2. XYZ [3. XYZ] [3. XYZ] [3. XYZ] [3. XYZ] [3. XYZ] [3. XYZ] ] [2. XYZ [3. XYZ] [3. XYZ] ] [2. XYZ] [2. XYZ] ] [1. XYZ] [1. XYZ [2. XYZ [3. XYZ] [3. XYZ] [3. XYZ] [3. XYZ] [3. XYZ [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] ] [3. XYZ [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] ] ] ] [1. XYZ [2. XYZ [3. XYZ [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] ] [3. XYZ] [3. XYZ [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] ] ] [2. XYZ [3. XYZ [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] ] [3. XYZ] [3. XYZ [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] ] ] [2. XYZ [3. XYZ [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] ] [3. XYZ] [3. XYZ [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] ] ] [2. XYZ [3. XYZ [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] ] [3. XYZ] [3. XYZ [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] [4. XYZ] ] ] [2. XYZ [3. XYZ] [3. XYZ] [3. XYZ] [3. XYZ] ] [2. XYZ [3. XYZ] ] ] [1. XYZ [2. XYZ [3. XYZ] [3. XYZ] [3. XYZ] [3. XYZ] ] [2. XYZ [3. XYZ] [3. XYZ] [3. XYZ] ] [2. XYZ [3. XYZ] [3. XYZ] [3. XYZ] [3. XYZ] ] ] [1. XYZ [2. XYZ] [2. XYZ] [2. XYZ] [2. XYZ] [2. XYZ] [2. XYZ] [2. XYZ] [2. XYZ] ] [1. XYZ [2. XYZ] [2. XYZ] [2. XYZ] [2. XYZ] [2. XYZ] [2. XYZ] [2. XYZ] ] [1. XYZ] [1. XYZ [2. XYZ] [2. XYZ] [2. XYZ] [2. XYZ] [2. XYZ] ] ]
\end{forest}
\end{multicols}
\clearpage
\kant[1-2]
\begin{multicols}{2}
\begin{forest}
split dir tree auto,
multicols,
[XYZ[XYZ[XYZ[XYZ[XYZ]]][XYZ[XYZ[XYZ]]][XYZ[XYZ[XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ]][XYZ[XYZ][XYZ][XYZ][XYZ][XYZ]][XYZ[XYZ]][XYZ[XYZ][XYZ]]][XYZ[XYZ[XYZ][XYZ]]][XYZ[XYZ[XYZ][XYZ][XYZ][XYZ][XYZ][XYZ]][XYZ[XYZ]][XYZ[XYZ][XYZ][XYZ]]][XYZ[XYZ[XYZ]]][XYZ[XYZ[XYZ][XYZ][XYZ]]][XYZ[XYZ[XYZ][XYZ][XYZ][XYZ][XYZ][XYZ]]][XYZ[XYZ[XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ]][XYZ[XYZ][XYZ]][XYZ[XYZ][XYZ][XYZ]]][XYZ[XYZ[XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ]][XYZ[XYZ]][XYZ[XYZ]]][XYZ[XYZ[XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ]][XYZ[XYZ]]][XYZ[XYZ[XYZ][XYZ]]][XYZ[XYZ[XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ]][XYZ[XYZ]]][XYZ[XYZ[XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ]][XYZ[XYZ][XYZ][XYZ]]][XYZ[XYZ[XYZ]][XYZ[XYZ]]][XYZ[XYZ[XYZ]]][XYZ[XYZ[XYZ]]][XYZ[XYZ[XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ]][XYZ[XYZ]]][XYZ[XYZ[XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ]][XYZ[XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ]][XYZ[XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ][XYZ]][XYZ[XYZ][XYZ][XYZ][XYZ]]][XYZ[XYZ[XYZ][XYZ]]][XYZ[XYZ[XYZ][XYZ]]][XYZ[XYZ[XYZ][XYZ][XYZ][XYZ][XYZ][XYZ]][XYZ[XYZ]]]]]
\end{forest}
\end{multicols}
\kant[1]
\end{document}