summaryrefslogtreecommitdiff
path: root/texmf-dist/source
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2018-09-25 08:30:26 +0900
committerNorbert Preining <norbert@preining.info>2018-09-25 08:30:26 +0900
commite6b754ddd8bdcc1242d8acf0517fa8a694a960c5 (patch)
tree1469880d4b4f3fa14abe2694b697a8cfbc3833f9 /texmf-dist/source
parent75618a98911aa06acc60d6895de38dd4e4f7cf4e (diff)
aeb-minitoc (new)
Diffstat (limited to 'texmf-dist/source')
-rw-r--r--texmf-dist/source/latex/aeb-minitoc/aeb-minitoc.dtx723
-rw-r--r--texmf-dist/source/latex/aeb-minitoc/aeb-minitoc.ins60
2 files changed, 783 insertions, 0 deletions
diff --git a/texmf-dist/source/latex/aeb-minitoc/aeb-minitoc.dtx b/texmf-dist/source/latex/aeb-minitoc/aeb-minitoc.dtx
new file mode 100644
index 00000000..48e8a324
--- /dev/null
+++ b/texmf-dist/source/latex/aeb-minitoc/aeb-minitoc.dtx
@@ -0,0 +1,723 @@
+% \iffalse
+% makeindex -s gglo.ist -o aeb-minitoc.gls aeb-minitoc.glo
+% makeindex -s gind.ist -o aeb-minitoc.ind aeb-minitoc.idx
+%<*copyright>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% aeb-minitoc.sty package, %%
+%% Copyright (C) 2012--2018 D. P. Story %%
+%% dpstory@uakron.edu dpstory@acrotex.net %%
+%% %%
+%% This program can redistributed and/or modified under %%
+%% the terms of the LaTeX Project Public License %%
+%% Distributed from CTAN archives in directory %%
+%% macros/latex/base/lppl.txt; either version 1.2 of the %%
+%% License, or (at your option) any later version. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</copyright>
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{aeb-minitoc}
+%<package> [2018/09/21 v1.6 Creates a simple mini-toc]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[colorlinks,hyperindex=false,linktocpage,bookmarksnumbered]{hyperref}
+\usepackage{calc}
+\usepackage{aeb-minitoc}
+%\def\texorpdfstring#1#2{#1}
+%\pdfstringdefDisableCommands{\let\\\textbackslash}
+\OnlyDescription % comment out for implementation details
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\gdef\brpr#1{\texttt{\char123\relax#1\char125\relax}}
+\let\darg\brpr
+\let\env\texttt
+\let\opt\texttt
+\let\app\textsf
+\let\pkg\textsf
+\def\EXCL{!}
+\def\visispace{\symbol{32}}
+\def\ameta#1{\ensuremath{\langle\textit{\texttt{#1}}\rangle}}
+\def\meta#1{\textsl{\texttt{#1}}}
+\def\SUB#1{\ensuremath{{}_{\mbox{\scriptsize\ttfamily#1}}}}
+\def\CMD#1{\textbackslash#1}
+\makeatletter
+\renewcommand\theparagraph{\texorpdfstring{\protect\P\protect\ }{\textparagraph}}
+\renewcommand\thesubparagraph{\texorpdfstring{\protect\P\protect\P\protect\ }{\textparagraph\textparagraph}}
+\renewcommand{\section}
+ {\renewcommand{\@seccntformat}[1]{\thesection\quad}%
+ \@startsection {section}{1}{\z@}%
+ {-3.5ex \@plus -1ex \@minus -.2ex}%
+ {2.3ex \@plus.2ex}%
+ {\normalfont\Large\bfseries}}
+\renewcommand{\paragraph}
+ {\renewcommand{\@seccntformat}[1]{\theparagraph\unskip\,}%
+ \@startsection{paragraph}{4}{0pt}{6pt}{-3pt}{\bfseries}}
+\renewcommand{\subparagraph}
+ {\renewcommand{\@seccntformat}[1]{\thesubparagraph\unskip\,}%
+ \@startsection{subparagraph}{5}{\parindent}{6pt}{-3pt}{\bfseries}}
+\makeatother
+\InputIfFileExists{aebdocfmt.def}{\PackageWarning{aeb-minitoc}{Inputting aebdocfmt.def}}
+ {\def\IndexOpt{\DescribeMacro}\def\IndexKey{\DescribeMacro}\let\setupFullwidth\relax
+ \PackageInfo{aeb-minitoc}{aebdocfmt.def cannot be found}}
+\begin{document}
+\addtolength{\marginparwidth}{3pt}
+ \GetFileInfo{aeb-minitoc.sty}
+ \title{The \textsf{aeb-minitoc} Package}
+ \author{D. P. Story\\
+ Email: \texttt{dpstory@uakron.edu}}
+ \date{processed \today}
+ \maketitle
+\setcounter{secnumdepth}{5}
+\setcounter{tocdepth}{5}
+\bgroup
+\value{secnumdepth}=3
+\value{tocdepth}=3
+ \tableofcontents
+\egroup
+ \DocInput{aeb-minitoc.dtx}
+\IfFileExists{\jobname.ind}{\newpage\setupFullwidth\par\PrintIndex}{\paragraph*{Index} The index goes here. Execute
+ \begin{quote}\texttt{makeindex -s gind.ist -o aeb-minitoc.ind aeb-minitoc.idx}\end{quote}
+ on the command line and recompile
+ \texttt{aeb-minitoc.dtx}.}
+\IfFileExists{\jobname.gls}{\PrintChanges}{\paragraph*{Change History} The list of changes goes here. Execute
+ \begin{quote}
+ \texttt{makeindex -s gglo.ist -o aeb-minitoc.gls aeb-minitoc.glo}
+ \end{quote}
+ on the command line and recompile \texttt{aeb-minitoc.dtx}.}
+\end{document}
+%</driver>
+% \fi
+% \MakeShortVerb{|}
+% \InputIfFileExists{aebdonotindex.def}{\PackageInfo{web}{Inputting aebdonotindex.def}}
+% {\PackageInfo{web}{cannot find aebdonotindex.def}}
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+% The \DescribeMacro{\ifMiniTocListings}\cs{ifMiniTocListings} is a Boolean switch, which when true
+% signals that there is a non-empty listing; otherwise, it is set to false. It is used to display
+% a latex warning to the user that the listing is empty. Also, globally, \cs{ifMiniTocListings}
+% is set to false when \IndexOpt{nominitocs}\opt{nominitocs} is taken. The other option
+% is \IndexOpt{\EXCL!nominitocs}\opt{!nominitocs} is a convenience option; it is not `not' version
+% of \opt{nominitocs}; when \opt{!nominitocs} is specified, mini-tocs are created. This is the
+% same as specifiying no option at all.
+% \begin{macrocode}
+\newif\ifMiniTocListings \MiniTocListingstrue
+\DeclareOption{nominitocs}{\AtEndOfPackage{\MiniTocListingsfalse
+ \let\insertminitoc\insertminitocNOT}}
+\DeclareOption{!nominitocs}{\MiniTocListingstrue}
+\ProcessOptions
+% \end{macrocode}
+% \section{Description}
+% A simple mini-toc package; originally designed for \textsf{web}, but now works for all standard
+% {\LaTeX} classes. The main user command is \cs{insertminitoc}, defined below.
+%
+% Our approach is to use each entry the \cs{jobname.toc} as the first argument of the
+% macro \cs{mtocCL}, a second argument keeps a running count on the number of entries.
+%\begin{flushleft}\small
+%\begin{verbatim}
+%\mtocCL{\contentsline{section}{\numberline{1}Section Title}{2}}{cnt} or
+%\mtocCL{\contentsline{section}
+% {\numberline{1}Section Title}{2}{section.1}}{cnt}
+%\end{verbatim}
+%\end{flushleft}
+%\cs{contentsline} has four arguments when \pkg{hyperref} is loaded and three otherwise. When inserting
+%the full table of contents, we define |\def\mtocCL#1#2{#1}| to do nothing. When we
+%are building a mini-toc, we \cs{let} \cs{mtocCL} to \cs{mtoc@CL@mtoc}. The effect
+%of this macro is to remove any entry (in \cs{jobname.toc}) that does not contain
+%\cs{contentsline} as it first token and to position the \texttt{cnt} argument for later use.
+%But by then \cs{contentsline} has already
+%been \cs{let} to \cs{cl@LOOKFORSEC}. Now \cs{cl@LOOKFORSEC} determines whether any
+%particular entry should be displayed in the current mini-toc.
+%
+% \section{Documentation and Code.}
+% As a demonstration of this package, we present a mini-toc for this section,
+% which only has \cs{paragraph} and \cs{subparagraph} section headings.
+% \changes{v1.2}{2018/08/29}{Created \string\texttt{aeb-minitoc.ins}}
+% \changes{v1.3}{2018/08/29}{Remove \string\textsf{hyperref} as a requirement}
+% \changes{v1.4}{2018/08/29}{Some renaming of commands}
+% \changes{v1.6}{2018/09/21}{Code cleanup in prepreparation for release}
+%
+% The verbatim listing for this mini-toc is
+%\begin{verbatim}
+%\TOCLevels{section}{subparagraph}
+%\begin{minitocfmt}{\minitocFmt}
+% \declaretocfmt{paragraph}{\@W{1em}\@D{0em}}
+% \declaretocfmt{subparagraph}{\@W{1.5em}\@D{1em}}
+%\end{minitocfmt}
+%
+%\begin{center}\minitocFmt
+%\fbox{\begin{minipage}{0.8\linewidth}\centering
+%\textbf{Contents of this section}\vadjust{\kern3pt}%
+%\insertminitoc\relax
+%\end{minipage}}
+%\end{center}
+%\end{verbatim}
+% \value{secnumdepth}=5 \value{tocdepth}=5
+% \TOCLevels{section}{subparagraph}
+% \begin{minitocfmt}{\minitocFmt}
+% \declaretocfmt{paragraph}{\@W{1em}\@D{0em}}
+% \declaretocfmt{subparagraph}{\@W{1.5em}\@D{1em}}
+% \end{minitocfmt}
+%
+% \begin{center}\minitocFmt
+% \fbox{\begin{minipage}{0.8\linewidth}\centering
+% \textbf{Contents of this section}\vadjust{\kern3pt}%
+% \insertminitoc\relax
+% \end{minipage}}
+% \end{center}
+%
+% \noindent We begin by saving the definitions macros we modify later.
+% \begin{macrocode}
+\let\mtoc@contentsline\contentsline
+\let\mtoc@starttoc\@starttoc
+\let\mtoc@tableofcontents\tableofcontents
+\let\mtoc@addtocontents\addtocontents
+% \end{macrocode}
+% Some counters and utility macros. The counter \DescribeMacro\@minitocCnt\cs{@minitocCnt} is incremented
+% in the redefined \cs{addtocontents} command. The command \DescribeMacro{\mtocgobble}\cs{mtocgobble} is
+% a `public' version of the core {\LaTeX} command \cs{@gobble}.
+% \begin{macrocode}
+\newcount\@minitocCnt \@minitocCnt=0\relax
+\def\csarg#1#2{\expandafter#1\csname#2\endcsname}
+\let\mtoc@One=1 \let\mtoc@Zero=0
+\let\mtocgobble\@gobble
+% \end{macrocode}
+%
+% \paragraph[The top and bottom most]{The top and bottom most.}
+% The package assigns the top level and bottom level automatically, based upon the class being used;
+% the document author can override these for the whole document, or for particular mini-tocs.
+% \DescribeMacro{\TOPLevel}\cs{TOPLevel\darg{\ameta{name}}} is the name of the top level. It is expected
+% that a mini-toc will be inserted with each top level in the document, as the author's discretion. The
+% \DescribeMacro{\BTMLevel}\cs{BTMLevel\darg{\ameta{name}}} is the name of the bottom most level. A mini-toc
+% consists of all sections \emph{beneath} the top level and \emph{above} the bottom level. Thus, if
+% \cs{TOPLevel\darg{chapter}} and \cs{BTMLevel\darg{subsubsection}}, then the mini-toc contans all \cs{section}
+% and \cs{subbsection} title headings within the current chapter.
+%
+% \subparagraph[Manually set the top and bottom levels]{Manually set the top and bottom levels.} \DescribeMacro{\TOPLevel}\cs{TOPLevel\darg{\ameta{top-level}}}
+% and \DescribeMacro{\BTMLevel}\cs{BTMLevel\darg{\ameta{btm-level}}} are used to determine what entries are to be included in the mini-toc.
+% As a convenience,
+% \begin{quote}
+% \DescribeMacro{\TOCLevels}\cs{TOCLevels\darg{\ameta{top-level}}\darg{\ameta{btm-level}}}
+% \end{quote}
+% can declare both
+% at once. If an argument is empty, the current level is used.
+% \begin{macrocode}
+\def\TOPLevel#1{\def\x{#1}\ifx\x\@empty\else
+ \def\mtoc@TOPLevel{#1}\edef\TOPLevelNum{\@nameuse{sl@#1}}\fi}
+\def\BTMLevel#1{\def\x{#1}\ifx\x\@empty\else
+ \def\mtoc@BTMLevel{#1}\edef\BTMLevelNum{\@nameuse{sl@#1}}\fi}
+\def\TOCLevels#1#2{\TOPLevel{#1}\BTMLevel{#2}}
+% \end{macrocode}
+% \subparagraph[Automatically set the top and bottom levels]{Automatically set the top and bottom levels.}
+% We make reasonable choices for \texttt{book}, \texttt{report}, and \texttt{article}; these are the three
+% classes that this package supports. In the course, we define, in macro form, the levels of
+% each of these section names (\cs{sl@\ameta{sec-name}} and \cs{sl@\ameta{sec-name}*}).
+% \begin{macrocode}
+\@ifclassloaded{book}{%
+ \TOCLevels{chapter}{subsection}
+ \def\sl@part{-1}\def\sl@chapter{0}
+ \csarg{\edef}{sl@part*}{\sl@part}
+ \csarg{\edef}{sl@chapter*}{\sl@chapter}
+}{%
+ \@ifclassloaded{report}{%
+ \TOCLevels{chapter}{subsection}
+ \def\sl@part{-1}\def\sl@chapter{0}
+ \csarg{\edef}{sl@part*}{\sl@part}
+ \csarg{\edef}{sl@chapter*}{\sl@chapter}
+ }{%
+ \TOCLevels{section}{subsubsection}
+ \def\sl@part{0}\csarg{\edef}{sl@part*}{\sl@part}
+ }%
+}
+\def\sl@section{1}\def\sl@subsection{2}\def\sl@subsubsection{3}
+\def\sl@paragraph{4}\def\sl@subparagraph{5}%\def\sl@all{17}
+\csarg{\edef}{sl@section*}{\sl@section}
+\csarg{\edef}{sl@subsection*}{\sl@subsection}
+\csarg{\edef}{sl@subsubsection*}{\sl@subsubsection}
+\csarg{\edef}{sl@paragraph*}{\sl@paragraph}
+\csarg{\edef}{sl@subparagraph*}{\sl@subparagraph}
+\newif\if@foundTOPLevel \@foundTOPLevelfalse
+% \end{macrocode}
+% The command \cs{insertminitoc}, just before inputting \cs{jobname.toc}, \cs{let}s \cs{contentsline} to
+% \DescribeMacro\cl@LOOKFORSEC\cs{cl@LOOKFORSEC}. This command then looks for lines at the top most section level, if it finds one,
+% and the section number matches the one set by \cs{insertminitoc} (\cs{mtoc@sec}), it sets
+% \cs{if@foundTOPLevel} to \texttt{true}, and stores all subsequent lines in \cs{toks@} until
+% another section is encountered, at which time \cs{if@foundTOPLevel} is set to \texttt{false}. There are two versions
+% of \cs{cl@LOOKFORSEC}: (1) \DescribeMacro\cl@LOOKFORSEC@LX\cs{cl@LOOKFORSEC@LX} for when \pkg{hyperref} is not loaded;
+% and (2) \DescribeMacro\cl@LOOKFORSEC@HY\cs{cl@LOOKFORSEC@HY} for
+% when \pkg{hyperref} is loaded.\par\medskip
+% \noindent
+% \cs{mtoc@@contentsline} takes five arguments, we save the page number (\texttt{\#3})
+% the hyperref anchor (\texttt{\#4}) and the TOC entry number (\texttt{\#5}). The
+% definitions made within \cs{mtoc@@contentsline} are later \cs{let} to \cs{@PgNum},
+% \cs{@L}, and \cs{@E}. We grab \texttt{\#5}, which is the entry count, and pass
+% the rest to \cs{mtoc@contentsline}.
+% \begin{macrocode}
+\def\mtoc@@contentsline#1#2#3#4#5{\def\mtoc@PgNum{#3}%
+ \def\mtoc@HY@anchor{#4}\def\TOCEntryNum{#5}%
+ \mtoc@contentsline{#1}{#2}{#3}{#4}}
+% \end{macrocode}
+% All but the last argument in both of these next two command are the standard
+% arguments for \cs{contentsline}. The last argument is one introduced by this
+% package; it keeps the count of the TOC entries. This last argument is used
+% to identify the top level section.
+% \begin{macrocode}
+\long\def\cl@LOOKFORSEC@LX#1#2#3#4{%
+ \cl@LOOKFORSEC@HY{#1}{#2}{#3}{\@empty}{#4}}
+\long\def\cl@LOOKFORSEC@HY#1#2#3#4#5{\def\mt@rgi{#1}% dps
+ \if@foundTOPLevel\ifx\mtocCL\@gobbletwo\else
+ \edef\NUMLevel{\@nameuse{sl@#1}}%
+ \ifnum\NUMLevel > \TOPLevelNum\relax\else
+ \let\mtocCL\@gobbletwo
+ \fi
+ \fi\fi
+ \@chkForNl#2\@nil % is it a * section
+ \ifx\mtocCL\@gobbletwo\else
+ \edef\mtoc@tmp{\the\mtocs@toks@}%
+ \ifx\mt@rgi\mtoc@TOPLevel
+ \def\SECNUM{MTOC.#5}%
+ \set@display@protect
+ \edef\mtoc@sec{\mtoc@sec}%
+ \ifx\SECNUM\mtoc@sec
+ \@foundTOPLeveltrue
+ \else
+ \@foundTOPLevelfalse\fi
+ \set@typeset@protect
+ \else
+ \if@foundTOPLevel
+ \ifnum\NUMLevel > \BTMLevelNum\relax\else
+ \ifx\@nlrtn\relax
+ \mtocs@toks@=\expandafter{\mtoc@tmp
+ \mtoc@@contentsline{#1}{#2}{#3}{#4}{#5}}\else
+ \mtocs@toks@=\expandafter{\mtoc@tmp
+ \mtoc@@contentsline{#1*}{#2}{#3}{#4}{#5}}\fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% This version of \cs{mtoc@BTMLevel} only accepts lines that are not
+% \texttt{subsubsection}.
+% \begin{macrocode}
+\@ifpackageloaded{hyperref}{\let\cl@LOOKFORSEC\cl@LOOKFORSEC@HY}
+ {\let\cl@LOOKFORSEC\cl@LOOKFORSEC@LX}
+% \end{macrocode}
+% \DescribeMacro{\@chkForNl} determines if the first token is \cs{numberline}.
+% \begin{macrocode}
+\def\@chkForNl#1#2\@nil{% check for number line
+ \ifx#1\numberline\let\@nlrtn\relax\else
+ \def\@nlrtn{\numberline{\hfill}}\fi}
+% \end{macrocode}
+% \paragraph{Modify \texorpdfstring{\protect\cs{tableofcontents}}{\textbackslash{tableofcontents}}}
+% \begin{macrocode}
+\def\mtoc@st@rttoc#1{\begingroup
+ \if@filesw \expandafter\newwrite\csname tf@#1\endcsname
+ \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
+ \fi\global\@nobreakfalse\endgroup}
+\let\mtoc@@starttoc\mtoc@One
+\def\mtoc@start@toc{\let\mtoc@start@next\relax
+ \@ifundefined{aebLastPage}
+ {%
+ \ifx\mtoc@@starttoc\mtoc@One
+ \global\let\mtoc@@starttoc\mtoc@Zero
+ \def\mtoc@start@next{\mtoc@st@rttoc{toc}}\fi
+ \mtoc@start@next
+ }{%
+ \ifnum\aebLastPage<\thepage\relax
+ \def\mtoc@start@next{\mtoc@st@rttoc{toc}}\fi
+ \mtoc@start@next
+ }%
+}
+\AtEndDocument{\mtoc@start@toc}
+% \end{macrocode}
+%
+% \paragraph[Modify \texorpdfstring{\protect\cs{addtocontents}}
+% {\textbackslash{addtocontents}}]{Modify \cs{addtocontents}.}
+% (\cs{addtocontents\darg{toc}\darg{\ameta{content}}}) If the document author inserts vertical spacing, or
+% other formatting, that could be problems in the minitoc. So we'll try to remove it.
+% We begin by placing the second argument \ameta{content} as the argument of a command,
+% \cs{mtocCL\darg{\ameta{content}}}. Initially, \cs{mtocCL} just passes its argument into the
+% {\TeX} stream. Later, it will be redefined within \cs{insertminitoc}.
+% \begin{macrocode}
+\def\mtoc@TOC{toc}
+\def\mtocCL#1#2{#1}
+% \end{macrocode}
+% Here, we modify the macro \cs{addtocontents} to insert \cs{mtocCL}.
+% \begin{macrocode}
+\renewcommand\addtocontents[2]{%
+ \def\mt@rgi{#1}\ifx\mt@rgi\mtoc@TOC
+ \global\advance\@minitocCnt\@ne
+ \mtoc@addtocontents{#1}{\protect\mtocCL{#2}{\the\@minitocCnt}}\else
+ \mtoc@addtocontents{#1}{#2}\fi}
+% \end{macrocode}
+% Modify the \cs{tableofcontents} to \cs{mtoc@tableofcontents}.
+% We compensate later by executing \cs{mtoc@start@toc} at the end of the document.
+% \begin{macrocode}
+\def\tableofcontents{%
+ \def\@starttoc##1{\makeatletter
+ \@input{\jobname.##1}\makeatother}%
+ \NoFmtTOCEntry
+ \mtoc@tableofcontents
+ \global\let\@starttoc\mtoc@starttoc}
+% \end{macrocode}
+% \leavevmode\DescribeMacro{\mtoc@CL@mtoc}\cs{mtoc@CL@mtoc} is the redefined version of \cs{mtocCL}, as described above.
+% We attempt to see if the first token of its argument is \cs{contentsline}, if yes
+% we pass it on, otherwise, we gobble it.
+% \begin{macrocode}
+\newcommand{\mtoc@CL@mtoc}[1]{\mtoc@parse#1\@nil}
+\def\mtoc@parse#1#2\@nil{\ifx#1\contentsline
+ \def\mtoc@next##1{#1#2{##1}}\else
+ \let\mtoc@next\@gobble\fi\mtoc@next}
+% \end{macrocode}
+%
+% \paragraph[Modify \texorpdfstring{\protect\cs{@startsection}}{\textbackslash{@startsection}} and referencing]%
+% {Modify \texorpdfstring{\protect\cs{@startsection}}{\textbackslash{@startsection}} and referencing.}
+% We redefine \cs{@startsection} to pick up the first argument (the section name)
+% and define \cs{@currentsecname}, which is use in a simple cross referencing system
+% needed for this mini-toc package. This package should be loaded after \pkg{hyperref} for sure.
+% \begin{macrocode}
+\let\@startsection@mtoc@SAVE\@startsection
+\def\@startsection#1{\def\@currentsecname{#1}%
+ \@startsection@mtoc@SAVE{#1}}
+% \end{macrocode}
+%\goodbreak\noindent
+% The use of \DescribeMacro\mtoclabel\cs{mtoclabel} and \DescribeMacro\mtocref
+% \cs{mtocref} are not needed unless you redefine a section heading to a non-numerical
+% value. This system needs a section number.
+% \begin{macrocode}
+\def\mtoclabel#1{\label{#1}\@bsphack
+ \protected@write\@auxout{}{\string
+ \csarg{\string\gdef}{mtoclbl#1}{\the\@minitocCnt}
+ }%
+ \@esphack
+}
+\def\mtocref#1{\@nameuse{mtoclbl#1}}
+% \end{macrocode}
+%
+% \paragraph[\texorpdfstring{\protect\cs{insertminitoc}}{\textbackslash{insertminitoc}}:
+% The main command]{\protect\cs{insertminitoc}: The main command.}
+% \DescribeMacro{\insertminitoc}\cs{insertminitoc} is the main user command for this package, it places
+% a ``minitoc'' for a section (\cs{mtoc@TOPLevel}) of a document, listing only the subsections within that section.
+% It takes an optional argument for indicating the section number, the subsections of which are to
+% be displayed. The default is the current section, \texttt{\cs{@nameuse\darg{the\cs{mtoc@TOPLevel}}}}.
+% \par\medskip\noindent
+% \DescribeMacro{\if@minitoc} This Boolean is set to true, in a group, when \cs{insertminitoc} is expanded.
+% This is to support a feature for formatting a mini-toc entry;
+% \cs{miniorfulltoc} is used for this purpose. \cs{miniorfulltoc} is
+% inserted in the optional argument of a section command:
+%\begin{verbatim}
+% \subsection[\protect
+% \miniorfulltoc{\textbf}{Subsection Entry}]{Subsection Entry}
+%\end{verbatim}
+%\DescribeMacro\miniorfulltoc\hskip-\marginparsep\texttt{\darg{\ameta{fmt}}\darg{\ameta{entry}}}
+%The first argument of \cs{miniorfulltoc} is passed to the second entry; for example,
+%|{\textbf{Subsection Entry}}| as an argument and in a group. Thus, the first argument
+%can be a command with one argument, or a command with not arguments.
+% \begin{macrocode}
+\newif\if@minitoc \@minitocfalse
+\newif\if@MiniTocListings \@MiniTocListingstrue
+\def\NoFmtTOCEntry{\@minitocfalse}
+\def\FmtTOCEntry{\@minitoctrue}
+\def\miniorfulltoc#1#2{\if@minitoc
+ {{#1{#2}}}\else{#2}\fi}
+% \end{macrocode}
+% \leavevmode\DescribeMacro\insertminitoc\hskip-\marginparsep\texttt{[\ameta{label-name}]}
+% After the above preliminaries, we get to \cs{insertminitoc}.
+% The default value of the optional parameter is |MTOC.\the\@minitocCnt|; thus, we use the most
+% recent value of \cs{@minitocCnt}. An explicit argument is needed when the mini-toc is placed
+% somewhere else (after \cs{\@minitocCnt} has been incremented). You can also say
+% \cs{insertminitoc[\ameta{label-name}]}, where \ameta{label-name} is a label name set by
+% the \cs{mtoclabel} command.
+% \begin{macrocode}
+\newcommand{\insertminitoc}[1][]{%
+ \def\mtoc@rgi{#1}\ifx\mtoc@rgi\@empty
+ \edef\mtoc@rgi{MTOC.\the\@minitocCnt}\else
+ \edef\mtoc@rgi{MTOC.\mtocref{#1}}\fi
+ \ifnum\TOPLevelNum > \BTMLevelNum
+ \PackageError{aeb-minitoc}{%
+ The top level (\mtoc@TOPLevel) must be\MessageBreak
+ must be higher on the hierarchy then at bottom level}
+ {Try switching the two}\fi
+ \begingroup
+ \edef\mtoc@sec{\mtoc@rgi}\mtocs@toks@={}%
+% \end{macrocode}
+% \cs{let} \cs{contentsline} to \cs{cl@LOOKFORSEC}
+% \begin{macrocode}
+ \let\contentsline\cl@LOOKFORSEC
+% \end{macrocode}
+% \cs{let} \cs{mtocCL} to \cs{mtoc@CL@mtoc}
+% \begin{macrocode}
+ \let\mtocCL\mtoc@CL@mtoc
+ \@foundTOPLevelfalse
+ \let\mtoc@numberline\numberline
+% \end{macrocode}
+% Insert formatting ($\cs{Pg}=\cs{sl@@sNumFmt}$) for the page number here.
+% \begin{macrocode}
+ \def\numberline##1{\makebox[\mtoc@numBoxWidth][l]%
+ {\sl@@sNumFmt{##1}}\sl@@EntryFmt}%
+ \makeatletter\InputIfFileExists{\jobname.toc}%
+ {\PackageInfo{aeb-minitoc}{TOC file read}}
+ {\PackageInfo{aeb-minitoc}{TOC file not available}}%
+ \edef\x{\the\mtocs@toks@}\ifx\x\@empty
+ \global\@MiniTocListingsfalse\else
+ \global\@MiniTocListingstrue\fi
+% \end{macrocode}
+% \textbf{Insertion point.} This is where the mini-toc entries are entered
+% into the latex stream to be typeset.
+% \begin{macrocode}
+ \the\mtocs@toks@\par\makeatother
+ \if@MiniTocListings\else
+ \PackageWarning{aeb-mintoc}{No mini-toc built here}\fi
+ \endgroup
+}
+% \end{macrocode}
+% When the \opt{nominitocs} option is in effect, we \cs{let} the command
+% \cs{insertminitoc} to \DescribeMacro\insertminitocNOT\cs{insertminitocNOT}, which absorbs all its arguments.
+% \begin{macrocode}
+\newcommand{\insertminitocNOT}[1][]{}
+% \end{macrocode}
+% \leavevmode\DescribeMacro{\numBoxWidth}\hskip-\marginparsep\texttt{\darg{\ameta{length}}}
+% The \cs{mtoc@numBoxWidth} determines the width of the \cs{hbox} that contains the section number.
+% It is conveniently set using \cs{numBoxWidth}. The default declaration is
+% \cs{numBoxWidth\darg{2.5em}}. The \ameta{length} should be measured in em units. Within
+% the \env{minitocfmt}, \cs{@W} is \cs{let} to \cs{numBoxWidth}.
+% \begin{macrocode}
+\def\numBoxWidth#1{\def\mtoc@numBoxWidth{#1}}
+\numBoxWidth{2.5em}
+% \end{macrocode}
+% In its ``raw'' expansion, \cs{insertminitoc} may not be what you want; in this case,
+% enclose it in some appropriate environment.
+% The following is an example of how to use this command.
+% This can be part of a command that inserts code just after every \cs{section}.
+%\begin{verbatim}
+%\begin{center}\minitocFmt
+%\begin{tabular}{c}\toprule
+%\begin{minipage}[c]{0.8\linewidth}
+%\insertminitoc\relax
+%\end{minipage}\\\bottomrule
+%\end{tabular}
+%\end{center}
+%\end{verbatim}
+%where \cs{minitocFmt} is a command that expands to some formatting, see demo files.
+%
+%\paragraph[The mini-toc format environment: \texttt{minitocfmt}]%
+% {The mini-toc format environment: \texttt{minitocfmt}.}
+% To help facilitate designing and declaring the mini-toc format, we define
+% the \texttt{minitocfmt} environment. The environment defines a command
+% (\ameta{\cs{cmd}}) that contains all the formatting information for
+% the mini-toc. The body of the environment consists of a series of
+% \cs{declaretocfmt\darg{\ameta{toc-fmt}}} declarations. Within argument
+% of \cs{declaretocfmt}, \cs{@W} is an alias for \cs{numBoxWidth} and
+% \cs{@D} is an alias for \cs{sl@dots}. If \cs{@D}
+% appears ($\texttt{@D} = \texttt{@dottedtocline}$, a dotted line is created in the usual
+% {\LaTeX} manner. \cs{@N} is an alias \cs{sl@sNumFmt} and \cs{@P} is an alias for
+% \cs{sl@pNumFmt}. All are optional. \def\MP#1{\marginpar{\raggedleft\small\itshape#1}}
+%\begin{description}
+% \item[\cs{@A\darg{\ameta{various}}}]\hskip-.5em\relax\space is a command that is not used very
+% often, but is available when needed. The argument \ameta{various} is
+% various commands to support the min-toc being generated.
+%\begin{description}
+% \item[\cs{@PW\darg{\ameta{length}}}] Within\MP{pg num box width} the argument of
+% \cs{@A}, insert \cs{@PW\darg{\ameta{length}}} to set
+% the width of the box that contains the page number
+% (\cs{@pnumwidth}). The value set by {\LaTeX} is
+% \texttt{1.55em}.
+% \item[\cs{@DS\darg{\ameta{num}}}] The \ameta{num}\MP{dots separation} determines the
+% separation between dots for a TOC entry that uses a dotted rule
+% line. This command is only recognized within the argument of
+% \cs{@A}. The default is 4.5.
+% \item[\cs{@R\darg{\ameta{length}}}]\hskip-.5em\relax\space is a\MP{right margin of title}
+% convenience command, it takes its argument and defines the
+% {\LaTeX} command \cs{@tocrmarg}, which sets the right margin
+% for the sec-title. The length set by {\LaTeX} is
+% \texttt{2.55em}. The \ameta{length} of \cs{@R} should be \emph{larger
+% than} the \ameta{length} set by \cs{@PW}.
+%\end{description}
+%
+% \item[\cs{declaretocfmt\darg{\ameta{sec-name}}\darg{\ameta{various}}}]\hskip-.5em\relax\space
+% formats all \ameta{sec-name} (section, subsection, etc.) entries.
+%
+% A `typical' table of contents entry has the form:
+%\begin{quote}\ttfamily
+%\ameta{sec-num} \ameta{title-heading}\dotfill\ameta{pg-num}
+%\end{quote}
+%Within the \ameta{various} argument, there are a number of commands that
+%are recognized:
+%\begin{description}
+% \item[\cs{@W\darg{\ameta{length}}}]\hskip-.5em\relax\space is\MP{sec
+% num box width} the width of the box that encloses
+% \ameta{sec-num}. Normally, all lengths are measured in
+% \texttt{em} units (\cs{@W\darg{\ameta{num}em}}). The default
+% length is \texttt{2.5em}
+% \item[\cs{@D\darg{\ameta{length}}}]\hskip-.5em\relax\space is\MP{use dots} the
+% amount to indent prior to \ameta{sec-num}. Again, \texttt{em}
+% units preferred (\cs{@D\darg{\ameta{num}em}}). When the \cs{@D}
+% command is present in the argument, a dotted line is
+% to be used for the entry (this is the norm). If \cs{@D} not
+% present, there is an opportunity within the \ameta{various}
+% argument to create a custom entry.
+% \item[\cs{@B\darg{\ameta{length}}}] Same as \cs{@D}\MP{no dots}, but no dotted leaders are created.
+% \item[\cs{@N\darg{\ameta{fmt}}}]\hskip-.5em\relax\space is\MP{fmt sec num} the
+% formatting for \ameta{sec-num}. You can pass a command with one
+% argument that will operate on the section number; for example,
+% \cs{@N\darg{\cs{textbf}}}, \cs{@N\darg{\cs{color\darg{blue}}}},
+% or \cs{@N\darg{\cs{color\darg{blue}}\cs{textbf}}}. Note that
+% changing the style to bold might require a corresponding change
+% in \cs{@W}.
+% \item[\cs{@F\darg{\ameta{fmt}}}]\hskip-.5em\relax\space is\MP{fmt title} the formatting
+% for the title heading of the current section; for example, \cs{@F\darg{\string\bfseries}}
+% turns all heading, for this \ameta{sec-name}, bold.
+% \item[\cs{@P\darg{\ameta{fmt}}}]\hskip-.5em\relax\space is the\MP{fmt pg num}
+% formatting for the page number (\ameta{pg-num}). You can pass a
+% command with one argument that will operate on the page number
+% When \pkg{hyperref} is loaded with the \opt{colorlinks} option,
+% we cannot change the color of the page number (see the discussion
+% of \cs{@A} above), but \cs{@P\darg{\string\textit}} changes the
+% numbers to italics. If \pkg{hyperref} is not loaded,
+% \cs{@P\darg{\string\color\darg{red}\string\textit}} changes page
+% numbers to a red italic.
+% \item[\cs{@R\darg{\ameta{length}}}]\hskip-.5em\relax\space is\MP{right margin of title} a convenience
+% command, it takes its argument and defines the {\LaTeX} command
+% \cs{@tocrmarg}, which sets the right margin for the sec-title.
+% The length set by {\LaTeX} is \texttt{2.55em}. Setting \cs{@R}
+% within the \ameta{various} argument of \cs{declaretocfmt} affects
+% the current section level as well as all lower section levels. If
+% you want to make this `local' change, you need to put \cs{@R}
+% back to its default of \texttt{2.55em} locally for other
+% declarations.
+% \item[\cs{@E}] Within\MP{TOC number} the \env{minitocfmt} environment, the command
+% \cs{@E} expands to the current TOC entry number of the TOC entry
+% being read in.
+% \item[\cs{@L}] This\MP{link anchor} macro expands to the \pkg{hyperref} anchor of the
+% page entry reference, it is empty if \pkg{hyperref} is not
+% loaded.
+% \item[\cs{@Pg}] This\MP{pg number} macro expands to the page number this entry
+% references.
+%\end{description}
+%\end{description}
+% Usually, the \ameta{length} argument is measured in \texttt{em} units (\texttt{\ameta{num}em}).
+% \begin{macrocode}
+\newtoks\mtoc@toks
+\newtoks\mtocs@toks@
+% \end{macrocode}
+% Within the \env{minitocfmt}, \cs{@D} is \cs{let} to \cs{sl@dots}.
+% \begin{macrocode}
+\def\sl@dots#1{\def\sl@@dots{%
+ \@dottedtocline{\sl@current}{#1}{\mtoc@numBoxWidth}}}
+\let\sl@@dots\@gobble
+\def\sl@nodots#1{\def\sl@@dots{%
+ \no@dottedtocline{\sl@current}{#1}{\mtoc@numBoxWidth}}}
+\let\sl@@nodots\@gobble
+% \end{macrocode}
+% Within the \env{minitocfmt}, \cs{@F} is \cs{let} to \cs{\sl@EntryFmt}.
+% \begin{macrocode}
+\def\sl@EntryFmt#1{\def\sl@@EntryFmt{#1}} % dps
+\let\sl@@EntryFmt\relax % dps
+% \end{macrocode}
+% Within the \env{minitocfmt}, \cs{@N} is \cs{let} to \cs{sl@sNumFmt}.
+% \begin{macrocode}
+\def\sl@sNumFmt#1{\def\sl@@sNumFmt{#1}}
+\let\sl@@sNumFmt\relax
+% \end{macrocode}
+% Within the \env{minitocfmt}, \cs{@P} is \cs{let} to \cs{sl@pNumFmt}.
+% \begin{macrocode}
+\def\sl@pNumFmt#1{\def\sl@@pNumFmt{#1}}
+\let\sl@@pNumFmt\relax
+\def\sl@tocrmarg#1{\def\@tocrmarg{#1}}
+\def\sl@dotsep#1{\def\@dotsep{#1}}
+\def\mtoc@star#1*#2\@nil{\def\@rgii{#2}\ifx\@rgii\@empty
+ \let\mtoc@@star\mtoc@Zero\else\let\mtoc@@star\mtoc@One\fi}
+% \end{macrocode}
+% \subparagraph[The \texorpdfstring{\protect\cs{declaretocfmt}}{\textbackslash{declaretocfmt}} command defined]%
+% {The \texorpdfstring{\protect\cs{declaretocfmt}}{\textbackslash{declaretocfmt}} command defined.}
+% The \cs{declaretocfmt} is used to designed how a mini-toc entry is displayed.
+%
+% \begin{macro}{\declaretocfmt}\hskip-\marginparsep\texttt{\darg{\ameta{sec-name}}\darg{\ameta{various}}}
+% The \pkg{aeb-mintoc} way of declaring the formatting for a toc \ameta{sec-name} entry. The
+% \ameta{various} argument consists of various combinations of \cs{@W}, \cs{@D}, \cs{@N}, and \cs{@P}.
+% \begin{macrocode}
+\long\def\declaretocfmt#1#2{%
+ \xdef\sl@current{\@nameuse{sl@#1}}%
+ \global\@namedef{\mtoc@CmdName @l@#1}##1##2{%
+ \normalfont\normalcolor\let\@E\TOCEntryNum
+ \let\@L\mtoc@HY@anchor\let\@Pg\mtoc@PgNum
+ \let\sl@@dots\@empty\let\sl@@sNumFmt\relax
+ \let\sl@@pNumFmt\relax\let\sl@@EntryFmt\relax
+ \let\@W\numBoxWidth\let\@R\sl@tocrmarg\let\@D\sl@dots
+ \let\@B\sl@nodots\let\@F\sl@EntryFmt\let\@N\sl@sNumFmt
+ \let\@P\sl@pNumFmt
+ #2\ifx\sl@@dots\@empty\let\sl@next\relax\else
+ \mtoc@star#1*\@nil % dps
+ \ifx\mtoc@@star\mtoc@Zero
+ \def\sl@next{\sl@@dots{##1}{\sl@@pNumFmt{##2}}}\else
+ \def\sl@next{\sl@@dots{\sl@@EntryFmt##1}{\sl@@pNumFmt{##2}}}\fi
+ \fi\sl@next}%
+ \edef\x{\expandafter\noexpand\csname l@#1\endcsname}%
+ \edef\y{\expandafter\noexpand\csname\mtoc@CmdName @l@#1\endcsname}%
+ \edef\mtoc@@tmp{\the\mtoc@toks\let\expandafter\noexpand\x=
+ \expandafter\noexpand\y}
+ \global\mtoc@toks=\expandafter{\mtoc@@tmp}}
+\def\mtoc@getCmdName#1{\edef\mtoc@CmdName{\expandafter
+ \@gobble\string#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \subparagraph[The \texttt{minitocfmt} environment defined]%
+% {The \texttt{minitocfmt} environment defined.} Is a `simplified' way of
+% designing toc entries.
+% \begin{environment}{minitocfmt}\hskip-\marginparsep\texttt{\darg{\cs{\ameta{cmdName}}}}
+% The definition of the environment. The argument is a command that will hold the expanded
+% content of the environment. The body of the environment consists of one or more
+% \cs{declaretocfmt} commands.
+% \begin{macrocode}
+\newenvironment{minitocfmt}[1]{\makeatletter
+ \gdef\@mtoc@cmd@@{#1}\let\@A\mtoc@addto
+% \end{macrocode}
+% The \cs{mtoc@getCmdName} returns the \texttt{cmdName} (without backslash). \texttt{cmdName}
+% is used the creating command sequences, using to this definition.
+% \begin{macrocode}
+ \mtoc@getCmdName{#1}\mtoc@toks={\let\@PW\mtoc@PW\let\@DS\sl@dotsep
+ \let\@R\sl@tocrmarg}%
+% \end{macrocode}
+% The body of the environment consists of one or more \cs{declaretocfmt} commands, these
+% commands contribute to \cs{mtoc@toks}. \cs{mtoc@toks} consists of all the formatting
+% declarations requested.
+% \begin{macrocode}
+}{\expandafter\xdef\@mtoc@cmd@@{\the\mtoc@toks}}
+% \end{macrocode}
+% \end{environment}
+% \leavevmode\DescribeMacro\mtoc@addto is a macro to add to the declarations. Within
+% \env{minitocfmt} is \cs{@A} is \cs{let} to \cs{mtoc@addto}.
+% \begin{macrocode}
+\def\mtoc@addto#1{\edef\mtoc@@tmp{\the\mtoc@toks}%
+ \global\mtoc@toks=\expandafter{\mtoc@@tmp #1}}
+\def\mtoc@PW#1{\def\@pnumwidth{#1}}
+% \end{macrocode}
+% Here is code from \texttt{latex.ltx} for \cs{@dottedtocline}, we modify it so there
+% are no leaders.
+% \begin{macrocode}
+\def\no@dottedtocline#1#2#3#4#5{%
+ \ifnum #1>\c@tocdepth \else
+ \vskip \z@ \@plus.2\p@
+ {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+ \parindent #2\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima #3\relax
+ \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+ {#4}\nobreak
+% \leaders\hbox{$\m@th
+% \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
+% mu$}\hfill
+% Insert an \hfill
+ \hfill
+ \nobreak
+ \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%
+ \par}%
+ \fi}
+% \end{macrocode}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%\Finale
diff --git a/texmf-dist/source/latex/aeb-minitoc/aeb-minitoc.ins b/texmf-dist/source/latex/aeb-minitoc/aeb-minitoc.ins
new file mode 100644
index 00000000..e9d20b39
--- /dev/null
+++ b/texmf-dist/source/latex/aeb-minitoc/aeb-minitoc.ins
@@ -0,0 +1,60 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% Copyright 1999-2012 D. P. Story
+%%
+%% This file is part of the `AcroTeX eDucation Bundle'.
+%% -------------------------------------------
+%%
+%% It may be distributed under the conditions of the LaTeX Project Public
+%% License, either version 1.2 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.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\filedate{2018/09/21}
+\def\batchfile{aeb-minitoc.ins}
+
+\input docstrip
+\ifx\generate\undefined
+ \Msg{**********************************************}
+ \Msg{*}
+ \Msg{* This installation requires docstrip}
+ \Msg{* version 2.4 or later.}
+ \Msg{*}
+ \Msg{* An older version of docstrip has been input}
+ \Msg{*}
+ \Msg{**********************************************}
+ \errhelp{Move or rename old docstrip.tex and get a newer one.}
+ \errmessage{Old docstrip in input path}
+ \batchmode
+ \csname @@end\endcsname\end
+\fi
+
+\keepsilent
+\askforoverwritefalse
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\preamble
+\endpreamble
+
+\generate
+{%
+ \file{aeb-minitoc.sty}{\from{aeb-minitoc.dtx}{copyright,package}}
+}
+
+\Msg{***************************************************************}
+\Msg{*}
+\Msg{* \space To finish the installation you have to copy the files }
+\Msg{*}
+\Msg{* \space *.sty, *.cfg and *.def into a directory searched by TeX}
+\Msg{*}
+\Msg{***************************************************************}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput