%% forest-doc.sty
%%
%% `forest-doc.sty` is an auxiliary package needed to compile the documentation of package
%% `forest`. (It is not needed to use the package.)
%%
%% Copyright (c) 2012-2017 Saso Zivanovic
%% (Sa\v{s}o \v{Z}ivanovi\'{c})
%%
[email protected]
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%%
%%
http://www.latex-project.org/lppl.txt
%%
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%%
%% This work has the LPPL maintenance status `author-maintained'.
%%
%% This file is a part of package `forest'. For the list of files
%% constituting the package see main source file of the package,
%% `forest.dtx', or the derived `forest.sty'.
%%
\ProvidesPackage{forest-doc}
\RequirePackage{lstdoc}
\RequirePackage{pgfkeys}
\RequirePackage{forest-index}
% if you want index support, load package "forest-index", but later
\lstset{language={[LaTeX]TeX},tabsize=4,gobble=2,%
basicstyle=\small\ttfamily,basewidth=0.51em,boxpos=c,pointstyle=\pstyle,moredelim=[is][\pstyle]{~}{~}}
%\lst@InstallKeywords{p}{point}{pointstyle}\relax{keywordstyle}{}ld
\def\pstyle{\color{darkgreen}}
\newcommand\itemnosep[1][0pt]{\vspace{\the\dimexpr-1.4ex+#1}}
\lstset{
rangebeginprefix=\ \ \%\%\%\ begin\ listing\ region:\ ,
rangebeginsuffix=,
rangeendprefix=\ \ \%\%\%\ end\ listing\ region:\ ,
rangeendsuffix=,
includerangemarker=false,
keepspaces=true,
}
\newcommand\lstinputregion[3][]{\lstinputlisting[linerange=#3-#3,#1]{#2}}
\def\lst@outputspace{{\ifx\lst@bkgcolor\empty\color{white}\else\lst@bkgcolor\fi\lst@visiblespace}}% this works for acroread, but not for atril :-(
\lstnewenvironment{forestexample}[1][]{%
\PackageWarning{forest-doc}{Compiling example}{}%
\global\let\lst@intname\@empty
\gdef\lst@sample{}%
\def\forestexample@layout{tree on left}%
\def\forestexample@treebin{box}%
\pgfqkeys{/forestexample}{label format,#1}%
\pgfkeysgetvalue{/forestexample/counter}\forestexample@temp
\ifdefempty\forestexample@temp{}{\addtocounter{\forestexample@temp}{1}}%
\setbox\lst@samplebox=\hbox\bgroup
\pgfkeysvalueof{/forestexample/tree prefix}%
\lst@BeginAlsoWriteFile{\jobname.tmp}%
}{%
\lst@EndWriteFile
\pgfkeysvalueof{/forestexample/tree suffix}%
\egroup
\global\setbox\codebox=\box\lst@samplebox
\global\setbox
\treebox
\csname forestexample@treebin@\forestexample@treebin\endcsname
\pgfkeys{/forestexample/do layout/.expanded=\forestexample@layout}%
}
\pgfqkeys{/forestexample}{%
.unknown/.code={\lstset{\pgfkeyscurrentname={#1}}},
index/.code={\indexex[not print]{#1}},
index>/.code={\indexex[not print]>{#1}},
code prefix/.code={\gdef\lst@sample{#1}},
tree prefix/.initial={},
tree suffix/.initial={},
counter/.initial=lstlisting,
no label/.style={counter={}},
label format/.store in=\@currentlabel,
label format/.default={\arabic{\pgfkeysvalueof{/forestexample/counter}}},
tree width/.initial={\dimexpr\linewidth-\wd\codebox-
\glueexpr\pgfkeysvalueof{/forestexample/center skip}\relax\relax},
layout/.store in=\forestexample@layout,
tree bin/.store in=\forestexample@treebin,
do layout/.is choice,
do layout/export/.code={%
\pgfkeysgetvalue{/forestexample/counter}\forestexample@temp
\ifdefempty\forestexample@temp{}{\addtocounter{\forestexample@temp}{-1}}%
},
left skip/.initial={\glueexpr 0pt plus .4\linewidth minus \marginparsep + 0pt minus \@totalleftmargin + 0pt minus .75\marginparwidth},
center skip/.initial={3em plus 0.1\linewidth minus 2em},
right skip/.initial={0pt plus .4\linewidth},
tree left skip/.initial=0pt,
tree right skip/.initial=0pt,
code left skip/.initial=0pt,
code right skip/.initial=0pt,
label y offset/.initial={\height-1ex}, % looks better to me this way
do layout/tree on left/.code={%
\begin{list}{}{\leftmargin 0pt}
\item
\@tempdima=\ifdim\totalht\treebox>\totalht\codebox
\dimexpr0.5 \totalht\treebox\relax
\else
\dimexpr0.5 \totalht\codebox\relax
\fi
\mbox{%
\mbox{\hbox to \linewidth{%
\hskip\pgfkeysvalueof{/forestexample/left skip}\relax
\textvcenter{\box\treebox}%
\hskip\pgfkeysvalueof{/forestexample/center skip}\relax
\hbox{\hskip-\@totalleftmargin\box\codebox\hskip\@totalleftmargin}%
\hskip\pgfkeysvalueof{/forestexample/right skip}\relax
}}%
\forestexample@label
}%
\end{list}
},
v sep/.initial={1ex},
align/.initial=center,
do layout/tree on top/.code={%
\begin{list}{}{\leftmargin 0pt \parsep 0pt \itemsep \pgfkeysvalueof{/forestexample/v sep}\relax}
\item \forestexample@align{tree}\forestexample@label
\item \forestexample@align{code}
\end{list}
},
do layout/tree on bottom/.code={%
\begin{list}{}{\leftmargin 0pt \parsep 0pt \itemsep \pgfkeysvalueof{/forestexample/v sep}\relax}
\item \forestexample@align{code}\forestexample@label
\item \forestexample@align{tree}
\end{list}
},
do layout/only tree/.code={%
\forestexample@align{tree}\forestexample@label
},
do layout/only code/.code={%
\forestexample@align{code}\forestexample@label
},
}
\newbox\treebox
\newbox\codebox
\def\forestexample@treebin@box{%
\hbox{\lst@sampleInput}%
}
\def\forestexample@treebin@minipage{%
\hbox{%
\begin{minipage}{\pgfkeysvalueof{/forestexample/tree width}}%
\lst@sampleInput
\end{minipage}%
}%
}
\def\forestexample@label{%
\pgfkeysgetvalue{/forestexample/counter}\forestexample@temp
\ifdefempty\forestexample@temp{}{%
\makebox[0pt][l]{%
\hskip-\linewidth
\hskip-\@totalleftmargin
\hskip\textwidth
\hskip\marginparsep
\raisebox
{\dimexpr\@tempdima+\depth-\pgfkeysvalueof{/forestexample/label y offset}}%
{\hbox to 0pt{\scriptsize(\@currentlabel)}}%
}%
}%
}
\def\forestexample@align#1{%
\pgfkeysgetvalue{/forestexample/align}\forestexample@temp
\mbox{\hbox to \linewidth{%
\csname forestexample@align@left@\forestexample@temp\endcsname
\hspace*{\pgfkeysvalueof{/forestexample/#1 left skip}}%
\mbox{\expandafter\box\csname #1box\endcsname}%
\hspace*{\pgfkeysvalueof{/forestexample/#1 right skip}}%
\csname forestexample@align@right@\forestexample@temp\endcsname
}}%
}
\def\forestexample@align@left@left{}
\def\forestexample@align@right@left{}
\def\forestexample@align@left@right{\hfill}
\def\forestexample@align@right@right{}
\def\forestexample@align@left@center{\hfill}
\def\forestexample@align@right@center{\hfill}
\newcommand\forestexampleimport[1][]{%
\def\forestexample@layout{tree on left}%
\pgfkeysgetvalue{/forestexample/counter}\forestexample@temp
\ifdefempty\forestexample@temp{}{\addtocounter{\forestexample@temp}{1}}%
\pgfqkeys{/forestexample}{%
label format,
do layout/.expanded=\forestexample@layout
}%
}
\def\totalht#1{\dimexpr\ht#1 + \dp#1\relax}
\def\textvcenter#1{\raisebox{\dimexpr .5\depth-.5\height}{#1}}
% For some reason, lstdoc's version kills all spaces in defaults ...
\def\lst@syntaxlabel@#1>#2\relax
%{\edef\lst@temp{\zap@space#2 \@empty}}
{\edef\lst@temp{#2}}
\def\getforestversion#1/#2/#3 v#4 #5\getforestversion{v#4}
\edef\forestversion{%
\expandafter\expandafter\expandafter\getforestversion
\csname
[email protected]\endcsname\getforestversion}
\def\settodayfromforestdateA#1/#2/#3 v#4 #5\settodayfromforestdateA{\def\year{#1}\def\month{#2}\def\day{#3}}
\def\settodayfromforestdate{\expandafter\expandafter\expandafter\settodayfromforestdateA\csname
[email protected]\endcsname\settodayfromforestdateA}
\def\TikZ;{{\rm Ti\emph{k}Z}}
\def\PGF;{\textsc{pgf}}
\def\foRest;{\textsc{Forest}}
\def\FoRest;{\textsc{Forest}}
\let\keyname\texttt
\newcommand\cmdname[1]{\texttt{\char\escapechar#1}}
\gdef\greaterthan{>}
\def\gobbleone#1{}
\newcommand{\Repeat}[1]{% from tex.se
http://tex.stackexchange.com/a/16194/16819
\expandafter\@Repeat\expandafter{\the\numexpr #1\relax}%
}
\def\@Repeat#1{%
\ifnum#1>0
\expandafter\@@Repeat\expandafter{\the\numexpr #1-1\expandafter\relax\expandafter}%
\else
\expandafter\@gobble
\fi
}
\def\@@Repeat#1#2{%
\@Repeat{#1}{#2}#2%
}
\def\spaces#1{\Repeat{#1}\space}
\RequirePackage{dingbat}
%%% Local Variables:
%%% mode: latex
%%% fill-column: 100
%%% TeX-command-default: "Make PDF"
%%% TeX-master: "forest-doc"
%%% End: