From e6b754ddd8bdcc1242d8acf0517fa8a694a960c5 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 25 Sep 2018 08:30:26 +0900 Subject: aeb-minitoc (new) --- .../source/latex/aeb-minitoc/aeb-minitoc.dtx | 723 +++++++++++++++++++++ .../source/latex/aeb-minitoc/aeb-minitoc.ins | 60 ++ 2 files changed, 783 insertions(+) create mode 100644 texmf-dist/source/latex/aeb-minitoc/aeb-minitoc.dtx create mode 100644 texmf-dist/source/latex/aeb-minitoc/aeb-minitoc.ins (limited to 'texmf-dist/source') 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. %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +%\NeedsTeXFormat{LaTeX2e} +%\ProvidesPackage{aeb-minitoc} +% [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} +% +% \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} +% +% \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 -- cgit v1.2.3