% -*- coding: iso-latin-1; -*-
%<*ins>
\def\pkgname{tableof}
\def\pkgdate{2012/12/13}
\def\pkgversion{v1.1}
\def\pkgdescription{tables of tagged contents (jfB)}
%</ins>
%%
%% Package `tableof' by Jean-Francois Burnol
%% Copyright (C) 2012 by Jean-Francois Burnol
%%
%<*none>
\def\lasttimestamp{Time-stamp: <13-12-2012 23:59:02 CET jfb>}
\def\docdate{2012/12/13}
\def\striptimestamp#1 <#2 #3 #4 #5>{#2 at #3 #4}
\edef\dtxtimestamp{\expandafter\striptimestamp\lasttimestamp}
\ProvidesFile{\pkgname.dtx}
  [`\pkgname' source and documentation (\dtxtimestamp)]
%
% The copyright at the top of this file applies to `tableof.dtx'
% and to its derived files.
% 
%    They 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 2003/12/01 or later.  
% 
%  Installation:
%  ============
%
% `latex tableof.dtx' or `pdflatex tableof.dtx'
%  Run twice to get the bookmarks right.
%
%  `tableof.sty', `tableof.ins' and `tableoftest.tex' are generated on
%  the first latex run.
%
%  Put `tableof.sty' at a suitable location within the TeX installation:
%          tableof.sty -> ..path..to../tex/latex/tableof/
%
%  `tableof.ins' is for TeX distributions expecting it.
%
%  `tableoftest.tex' is an example of use of the package commands. Run
%  latex twice on it to get the tagged tables of contents.
%
\begingroup
\input docstrip.tex
\askforoverwritefalse
\def\pkgpreamble{\defaultpreamble^^J\MetaPrefix^^J%
\string\ProvidesPackage{\pkgname}^^J%
\space[\pkgdate\space\pkgversion\space\pkgdescription]}
\generate{\nopreamble
\file{\pkgname.ins}{\from{\pkgname.dtx}{ins}}
\usepreamble\defaultpreamble
\file{\pkgname test.tex}{\from{\pkgname.dtx}{test}}
\usepreamble\pkgpreamble
\file{\pkgname.sty}{\from{\pkgname.dtx}{package}}}
\endgroup
\iffalse
%</none>
%<*ins>
%-------------------------------------------------------------------------------
%% This file `tableof.ins' is provided for compatibility with TeX
%% distributions expecting to find it for installation of `tableof.sty'.
%%
%% As usual `latex tableof.ins' produces `tableof.sty' from the source
%% `tableof.dtx'
%%
%% (an already existing `tableof.sty' in the same repertory will be
%% overwritten)
%% 
%% Put `tableof.sty' in a suitable location within the TeX installation:
%% tableof.sty -> ................/tex/latex/tableof/
%%
%% The generated auxiliary files may be discarded. 
%%
%% See `tableof.dtx' for the statements of copyright and conditions of
%% distribution or modification.
%%
\input docstrip.tex
\askforoverwritefalse
\def\pkgpreamble{\defaultpreamble^^J\MetaPrefix^^J%
\string\ProvidesPackage{\pkgname}^^J%
\space[\pkgdate\space\pkgversion\space\pkgdescription]}
\generate{\usepreamble\pkgpreamble
\file{\pkgname.sty}{\from{\pkgname.dtx}{package}}}
\endbatchfile
%-------------------------------------------------------------------------------
%</ins>
%<*test>
%-------------------------------------------------------------------------------
%% This file `tableoftest.tex' serves to demontrate the use of the
%% commands from package `tableof'.
%%
%% (run on it `latex' or `pdflatex' twice.)
%%
\documentclass{article}
\usepackage[colorlinks,linkcolor=blue]{hyperref}
\usepackage{tableof}
%%\usepackage{etoc}
\begin{document}
%% \etoctoclines % (from package etoc)
%%
%% we don't need here \tofOpenTocFileForWrite
%% as the document has \tableofcontents a few lines down.
\section*{with (and)}
\tableof{}
\section*{with (A or B or C or D or E or F)}
\tableof*{A,B,C,D,E,F}
\section*{with A (and)}
\tableof{A}
\section*{with A (or)}
\tableof*{A}
\section*{with A and with C}
\tableof{A,C}
\renewcommand\contentsname{with (A or D) and (without B or without F)}
\nexttocwithtags*{A,D}*{B,F}\tableofcontents
%% requires package etoc 
%% (or at least a class or package allowing multiple \tableofcontents): 
%% \etoctocstyle{1}{with A and D and without B and without F}
%% \nexttocwithtags{A,D}{B,F}\tableofcontents
%% \etoctocstyle{1}{with (A or D) and without B and without F}
%% \nexttocwithtags*{A,D}{B,F}\tableofcontents
%% \etoctocstyle{1}{with A and D and (without B or without F)}
%% \nexttocwithtags{A,D}*{B,F}\tableofcontents
\section*{with B or with C}
\tableof*{B,C}
\section*{with A and with B and with C}
\tableof{A,B,C}
\section*{with A or with B or with C}
\tableof*{A,B,C}
\section*{without B (and)}
\tablenotof{B}
\section*{without A and without B}
\tablenotof{A,B}
\section*{without A or without C}
\tablenotof*{A,C}
\section*{without A and without B and without C}
\tablenotof{A,B,C}
\section*{without A or without B or without C}
\tablenotof*{A,B,C}
\section*{with D and with E}
\tableof{D,E}
\section*{with E}
\tableof{E}
\section*{without D}
\tablenotof{D}
\section*{Ecology}
\tableof{ecology}
\section*{Rabbits}
\tableof{rabbits}
\section*{Kitchenware}
\tableof{kitchenware}
\clearpage
\section{no tag}
nothing
\begin{verbatim}
\toftagstart{D,E,F}
\toftagthis{A}
\end{verbatim}
\toftagstart{D,E,F}
\toftagthis{A}
\section{A,D,E,F}
A,D,E,F
\begin{verbatim}
\toftagthis{B}
\end{verbatim}
\toftagthis{B}
\section{B,D,E,F}
B,D,E,F
\begin{verbatim}
\toftagthis{C}
\end{verbatim}
\toftagthis{C}
\section{C,D,E,F}
C,D,E,F
\begin{verbatim}
\toftagstop{F}
\toftagthis{A,B}
\end{verbatim}
\toftagstop{F}
\toftagthis{A,B}
\section{A,B,D,E}
A,B,D,E
\begin{verbatim}
\toftagthis{B,C}
\end{verbatim}
\toftagthis{B,C}
\section{B,C,D,E}
B,C,D
\begin{verbatim}
\toftagthis{A,C}
\toftagstop{E}
\end{verbatim}
\toftagthis{A,C}
\toftagstop{E}
\section{A,C,D}
A,C,D
\begin{verbatim}
\toftagstop{D}
\toftagthis{A,B,C}
\end{verbatim}
\toftagstop{D}
\toftagthis{A,B,C}
\section{A,B,C}
A,B,C
\begin{verbatim}
\toftagstop{A,B,C,D,E,F}
\toftagstart{kitchenware,rabbits}
\end{verbatim}
\toftagstop{A,B,C,D,E,F}
\toftagstart{kitchenware,rabbits}
\section{Knives and rabbits}
\begin{verbatim}
\tofuntagthis{kitchenware}
\end{verbatim}
\tofuntagthis{kitchenware}
\subsection{Hunting rabbits}
\begin{verbatim}
\tofuntagthis{rabbits}
\end{verbatim}
\tofuntagthis{rabbits}
\subsection{Best knives for cooking}
\subsection{Eating rabbits}
\begin{verbatim}
\toftagstart{ecology}\tofuntagthis{rabbits}
\end{verbatim}
\toftagstart{ecology}\tofuntagthis{rabbits}
\section{Knives and global climate}
\begin{verbatim}
\toftagstop{kitchenware}
\end{verbatim}
\toftagstop{kitchenware}
\section{The rabbit in the wild}
\subsection{Impact of the rabbit on global climate}
\begin{verbatim}
\toftagstop{rabbits}
\end{verbatim}
\toftagstop{rabbits}
\section{Other species of interest for cooking}
\end{document}\endinput
%-------------------------------------------------------------------------------
%</test>
%<*none>
\fi
\documentclass[a4paper,11pt,abstract]{scrdoc}
\pagestyle{headings}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{geometry}
\usepackage{verbatim}
\usepackage{txfonts}
\usepackage{xspace}
\usepackage{color}

\definecolor{joli}{RGB}{225,95,0}
\definecolor{JOLI}{RGB}{225,95,0}
\definecolor{BLUE}{RGB}{0,0,255}
\usepackage[english]{babel}

\usepackage[%dvipdfmx,%
pdfencoding=pdfdoc,bookmarks=true]{hyperref}

\hypersetup{%
linktoc=all,%
breaklinks=true,%
hidelinks,%
pdfauthor={Jean-Fran\c cois Burnol},%
pdftitle={The tableof package},%
pdfsubject={LaTeX, table of contents},%
pdfkeywords={LaTeX, table of contents},%
pdfstartview=FitH,%
pdfpagemode=UseOutlines}

\MakeShortVerb{\|}

\DeclareRobustCommand\cs[1]{{\ttfamily\hyphenchar\font45\char`\\#1}}
\DeclareRobustCommand\csb[1]{{%
\color{blue}\ttfamily\hyphenchar\font45\char`\\#1}}

\newcommand\cshyp[1]{\texorpdfstring{\cs{#1}}{\textbackslash #1}}
\newcommand\csbhyp[1]{\texorpdfstring{\csb{#1}}{\textbackslash #1}}
\newcommand\lowast{\raisebox{-.25\height}{*}}
\newcommand\starit[1]{\cs{#1\lowast}}
\newcommand\staritb[1]{\csb{#1\lowast}}

\newcommand\tof{\cs{tableof}\xspace}
\newcommand\tnotof{\cs{tablenotof}\xspace}
\newcommand\tofb{\csb{tableof}\xspace}
\newcommand\tnotofb{\csb{tablenotof}\xspace}

\newcommand\tableof{%
\texorpdfstring{{\color{joli}\ttfamily\bfseries tableof}}
{tableof}\xspace}


\frenchspacing

\renewcommand\familydefault\sfdefault

\begin{document}
\thispagestyle{empty}
\rmfamily

\begin{center}
  {\normalfont\Large The \tableof  package}\\
\textsc{Jean-François Burnol}\par
  \footnotesize \ttfamily 
  jfbu (at) free (dot) fr\\
  Package version: \pkgversion\ (\pkgdate)\\
  Documentation generated from the source file\\
  with timestamp ``\dtxtimestamp''
\end{center}

\begin{abstract}
  The \tableof package allows to tag table of contents entries.

  The command \csb{tableof}\{{\color{blue}\emph{comma,separated,list,of,tags}}\}
  displays a table of contents containing only the entries having all the listed
  tags. There is a complementary command \csb{tablenotof}. They may be used
  multiple times.
 
  The command
  \csb{nexttocwithtags}\{{\color{blue}\emph{required\_tags}}\}\{{\color{blue}\emph{excluded\_tags}}\}
  specifies which tags are to be obeyed by the next standard
  \cs{tableofcontents} or equivalent command.
\end{abstract}


\section{Commands}

\subsection{\csbhyp{toftagstart} and \csbhyp{toftagstop}}

These commands have a mandatory argument which is a comma separated list of
tags. The tags need not have been predeclared.
\begin{verbatim}
\toftagstart{kitchenware,weaponry,gastronomy}
\section{Dealing with knives}
\subsection{This is tagged, too}
\section{Hunting rabbits}
\toftagstop{weaponry}
\section{Eating rabbits}
\end{verbatim}

\subsection{\csbhyp{toftagthis} and \csbhyp{tofuntagthis}}

The \cs{toftagthis} command tags with the values from its argument (a comma
separated list) only the next object found in the |.toc| file. The command
should be located \emph{before} and not \emph{after} the
to-be-tagged TOC entry. The \cs{tofuntagthis}
command untags the next entry.
\begin{verbatim}
\toftagstart{kitchenware,rabbits}
\section{Knives and rabbits}
    \tofuntagthis{kitchenware}
\subsection{Hunting rabbits}
\subsection{Best knives for cooking}
\subsection{Eating rabbits}
\toftagstart{ecology}
    \toftagthis{climate}
\section{Knives and global climate}
\toftagstop{kitchenware}
\section{The rabbit in the wild}
    \toftagthis{climate}
\subsection{Impact of the rabbit on global climate}
\end{verbatim}

\subsection{\csbhyp{nexttocwithtags}}

This command is new with version |1.1|. It has two \emph{mandatory} arguments
(possibly empty): the first one is a comma separated list of required tags, the
second one is a comma separated list of excluded tags. The command has no
immediate effect but influences the next \cs{tableofcontents} (or equivalent
command) in the document:\footnote{in documents with a class or package allowing
  multiple uses of the command \cs{tableofcontents}, the command
  \cs{nexttocwithtags} influences only the next use of \cs{tableofcontents}.}
the TOC will contain only the entries having been tagged with all the required
tags and none of the excluded tags. For example:
\begin{verbatim}
\nexttocwithtags{A,B}{C,D,E}
\tableofcontents
\end{verbatim}
will print only the division units having both tags |A| and |B| and none of |C|,
|D|, or |E|. 

There are starred variants:
\begin{verbatim}
\nexttocwithtags{A,B}{C,D,E}   % A and B and neither C nor D nor E
\nexttocwithtags*{A,B}{C,D,E}  % (A or B) and neither C nor D nor E
\nexttocwithtags{A,B}*{C,D,E}  % A and B and (not C or not D or not E)
\nexttocwithtags*{A,B}*{C,D,E} % (A or B) and (not C or not D or not E)
\end{verbatim}


\subsection{\csbhyp{tableof}}

\tableof also provides commands to typeset on its own the tagged entries of
the |.toc| file: \cs{tableof} has a mandatory argument which is a comma
separated list of tags. It displays, exactly as would appear in the actual table
of contents, the corresponding tagged entries from the |.toc| file. Its title
needs to be explicitely set up by additional code.
\begin{verbatim}
\section*{Table of entries tagged with weaponry AND with hunting}
\tableof{weaponry,hunting}
\end{verbatim}
There is a starred variant:
\begin{verbatim}
\section*{Table of entries tagged with weaponry OR with hunting}
\tableof*{weaponry,hunting}
\end{verbatim}

\subsection{\csbhyp{tablenotof}}

It has a mandatory argument which is a comma separated list of tags. It
displays, exactly as would appear in the table of contents, the
entries from the |.toc| file which are \emph{not} tagged:
\begin{verbatim}
\section*{Table of entries NOT tagged with weaponry NEITHER with hunting}
\tablenotof{weaponry,hunting}
\end{verbatim}
There is a starred variant:
\begin{verbatim}
\section*{Table of entries NOT tagged with weaponry OR NOT tagged with hunting}
\tablenotof*{weaponry,hunting}
\end{verbatim}
Both \cs{tableof} and \cs{tablenotof} may be used arbitrarily many times
(whether or not the document has somewhere a \cs{tableofcontents}).


\subsection{\csbhyp{tofOpenTocFileForWrite}}

The |.toc| file is read (if it exists) into memory by \tableof at the
\cs{usepackage}, for use by \cs{tableof} and \cs{tablenotof}. But the creation
of the |.toc| file is not dealt with by \tableof itself: either this will be
done by a standard \cs{tableofcontents} command somewhere in the document, or,
one may use the package provided command \cs{tofOpenTocFileForWrite} which does
not display anything and just does what its name indicates. This command can be
used also in the preamble.\footnote{Note to people or packages wanting also to
  access the |.toc| file: as happens with the standard \cs{tableofcontents}, the
  |.toc| file becomes temporarily empty immediately after
  \cs{tofOpenTocFileForWrite}.}

Again: this command should \emph{not} be used when the document has its own
\cs{tableofcontents} or equivalent.



\subsection{Compatibility with other packages}

\tableof checks if |hyperref| is loaded as |hyperref| modifies the format of the
|.toc| file. This check is done at the \cs{begin}|{document}| so the order
of loading is not important.

\tableof adds the tag data to the |.toc| file, but this data is defined (within
the |.toc| file) to do
nothing. Hence the generated |.toc| file may be imported for use
by other \TeX{} documents.\footnote{this import must do \cs{makeatletter} and
  also the new document must use |hyperref| if the original did so.}

\subsection{TODO}

Create a parser for arbitrary iterated boolean combinations of tags . . . but
this kind of thing must have been done a zillion times already, as it belongs to
the basics in computer science! . . . and it surely is no easy task in \TeX{}!
so I cautiously retreated from such an endeavor.

\subsection{version history}

|2012/12/13 v1.1: i.| new command \cs{nexttocwithtags},\\
|                ii.| |.toc| remains usable from other \LaTeX{} source files.\\
|2012/12/06 v1.0:| initial version.

\section{Generating the package file and the test file}

Running |latex| (or |pdflatex|) on |tableof.dtx| generates:
{1})~the package file |tableof.sty| (which should be moved to a suitable
location within the \TeX{} installation),
{2})~|tableof.ins| for \TeX{}
distributions expecting such a file,
{3})~|tableoftest.tex| which
demonstrates the package features (one should run |latex| twice on it),
and
{4})~the documentation itself (run |pdflatex| twice to get the
bookmarks.)


\section{Implementation}

\makeatletter
\StopEventually{\check@checksum\end{document}}
\makeatother

Writing-up source code comments is hopefully for a future
release. 

% I don't want to have to type at this location (far from the top of the file)
% explicitly the package version or version date, as it is inconvenient to have
% to remember to do this when updating the package. Also, I prefer not to add
% macros to the |.sty| file macros with the package date, name, or version. So I
% cut out the following from the real macrocode environment (leaving out the
% \init@crossref.)
\makeatletter
\begingroup
\topsep\MacrocodeTopsep
\trivlist\parskip\z@\item[]
\macro@font
\leftskip\@totalleftmargin  \advance\leftskip\MacroIndent
\rightskip\z@  \parindent\z@  \parfillskip\@flushglue
\global\@newlistfalse \global\@minipagefalse
\ifcodeline@index
  \everypar{\global\advance\c@CodelineNo\@ne
  \llap{\theCodelineNo\ \hskip\@totalleftmargin}}%
\fi
\string\ProvidesPackage\string{\pkgname\string}\par
\noindent\space [\pkgdate\space\pkgversion\space\pkgdescription]\par
\nointerlineskip
\global\@inlabelfalse
\endtrivlist
\endgroup
\makeatother
% The catcode hackery next is to avoid to have <*package> to be listed
% in the commented source code...
% (c) 2012/11/19 jf burnol ;-)
\MakePercentIgnore
%
% \catcode`\<=0 \catcode`\>=11 \catcode`\*=11 \catcode`\/=11
% \let</none>\relax
% \def<*package>{\catcode`\<=12 \catcode`\>=12 \catcode`\*=12 \catcode`\/=12}
%
%</none>
%<*package>
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\DeclareOption*{\PackageWarning{tableof}{Option `\CurrentOption' is unknown.}}
\ProcessOptions\relax
%    \end{macrocode}
%    \begin{macrocode}
\newtoks\tof@toctoks
%    \end{macrocode}
%    \begin{macrocode}
\def\tof@readtoc#1{%
  \ifeof #1
     \let\tof@nextread\@gobble
     \global\tof@toctoks=\expandafter{\the\tof@toctoks}%
  \else
     \let\tof@nextread\tof@readtoc
     \read #1 to \tof@buffer
     \tof@toctoks=\expandafter\expandafter\expandafter
       {\expandafter\the\expandafter\tof@toctoks\tof@buffer}%
  \fi
  \tof@nextread{#1}}
%    \end{macrocode}
%    \begin{macrocode}
\IfFileExists{\jobname .toc}
    {{% \endlinechar-1
        \makeatletter
        \newread\tof@tf
        \openin\tof@tf\@filef@und
           \tof@readtoc\tof@tf
        \closein\tof@tf}}{}
%    \end{macrocode}
%    \begin{macrocode}
\AtBeginDocument{
    \addtocontents{toc}{\string\@ifundefined\string{tof@begin\string}}
    \addtocontents{toc}{\string{\let\string\tof@begin\string\relax%
        \string\let\string\tof@finish\string\relax%
        \string\let\string\tof@starttags\string\@gobble%
        \string\let\string\tof@stoptags\string\@gobble%
        \string\let\string\tof@tagthis\string\@gobble%
        \string\let\string\tof@untagthis\string\@gobble\string}\string{\string}}
    \addtocontents{toc}{\string\tof@begin}
    \@ifpackageloaded{hyperref}
       {\def\tof@gobblethree@orfour#1#2#3#4{}%
        \ifx\hyper@last\@undefined\tof@toctoks{}\fi}
       {\def\tof@gobblethree@orfour#1#2#3{}}}
\AtEndDocument{\addtocontents{toc}{\string\tof@finish}}
\newcommand\tofOpenTocFileForWrite{%
\expandafter\newwrite \csname tf@toc\endcsname
\immediate \openout \csname tf@toc\endcsname \jobname .toc\relax}
%    \end{macrocode}
%    \begin{macrocode}
\def\tof@tags{}
\def\tof@tags@tmp{}
\def\tof@untags@tmp{}
\def\tof@true#1{\expandafter\let\csname tofsw@#1\endcsname\iftrue}
\def\tof@false#1{\expandafter\let\csname tofsw@#1\endcsname\iffalse}
\def\tof@secondiftrue#1{\csname tofsw@#1\endcsname
                       \let\tof@next\@secondoftwo\fi}
\def\tof@secondiffalse#1{\csname tofsw@#1\endcsname\else
                       \let\tof@next\@secondoftwo\fi}
\def\tof@setflags#1{\let\tof@next\@firstoftwo
        \@for\@tempa:=#1\do{\tof@true{\@tempa}}%
        \@for\@tempa:=\tof@tags\do{\tof@false{\@tempa}}%
        \@for\@tempa:=\tof@tags@tmp\do{\tof@false{\@tempa}}%
        \@for\@tempa:=\tof@untags@tmp\do{\tof@true{\@tempa}}}  
%    \end{macrocode}
%    \begin{macrocode}
\def\tof@filter#1#2{\ifx#1#2\else
               \ifx\tof@tmptags\@empty\edef\tof@tmptags{#2}\else
               \edef\tof@tmptags{\tof@tmptags,#2}\fi\fi}
\def\tof@@starttags#1{%
        \ifx\tof@tags\@empty\edef\tof@tags{#1}\else
        \edef\tof@tags{\tof@tags,#1}\fi}
\def\tof@@stoptags#1{%
        \@for\@tempa:=#1\do{\def\tof@tmptags{}%
            \@for\@tempb:=\tof@tags\do{\tof@filter\@tempa\@tempb}%
            \edef\tof@tags{\tof@tmptags}}}
%    \end{macrocode}
%    \begin{macrocode}
\def\tof@init#1{%
    \def\tof@begin{%
        \begingroup
        \def\tof@finish{\endgroup\global\let\tof@begin\relax}%
        \let\tof@savedcontentsline\contentsline
        \let\tof@starttags\tof@@starttags
        \let\tof@stoptags\tof@@stoptags
        \def\tof@tagthis####1{\def\tof@tags@tmp{####1}}%
        \def\tof@untagthis####1{\def\tof@untags@tmp{####1}}%
        \def\contentsline{#1}}}
%    \end{macrocode}
%    \begin{macrocode}
\def\tof@and#1{%
    \tof@init{\tof@setflags{#1}\def\tof@tags@tmp{}\def\tof@untags@tmp{}%
        \@for\@tempa:=#1\do{\tof@secondiftrue{\@tempa}}%
        \tof@next\tof@savedcontentsline\tof@gobblethree@orfour}%
    \the\tof@toctoks}
%    \end{macrocode}
%    \begin{macrocode}
\def\tof@or#1{%
    \tof@init{\tof@setflags{#1}\def\tof@tags@tmp{}\def\tof@untags@tmp{}%
        \@for\@tempa:=#1\do{\tof@secondiffalse{\@tempa}}%
        \tof@next\tof@gobblethree@orfour\tof@savedcontentsline}%
    \the\tof@toctoks}
%    \end{macrocode}
%    \begin{macrocode}
\def\tof@nor#1{%
    \tof@init{\tof@setflags{#1}\def\tof@tags@tmp{}\def\tof@untags@tmp{}%
        \@for\@tempa:=#1\do{\tof@secondiffalse{\@tempa}}%
        \tof@next\tof@savedcontentsline\tof@gobblethree@orfour}%
   \the\tof@toctoks}
%    \end{macrocode}
%    \begin{macrocode}
\def\tof@nand#1{%
    \tof@init{\tof@setflags{#1}\def\tof@tags@tmp{}\def\tof@untags@tmp{}%
        \@for\@tempa:=#1\do{\tof@secondiftrue{\@tempa}}%
        \tof@next\tof@gobblethree@orfour\tof@savedcontentsline}%
    \the\tof@toctoks}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand\nexttocwithtags{\@ifstar{\tof@nextof@or}{\tof@nextof@and}}
\def\tof@nextof@or#1{\toks\z@{\tof@setflags{#1}%
        \@for\@tempa:=#1\do{\tof@secondiffalse{\@tempa}}%
        \tof@next
        {\def\tof@tags@tmp{}\def\tof@untags@tmp{}\tof@gobblethree@orfour}}%
        \@ifstar{\tof@nextof@nand}{\tof@nextof@nor}}
\def\tof@nextof@and#1{\toks\z@{\tof@setflags{#1}%
             \@for\@tempa:=#1\do{\tof@secondiftrue{\@tempa}}%
             \tof@next\@secondoftwo\@firstoftwo
             {\def\tof@tags@tmp{}\def\tof@untags@tmp{}\tof@gobblethree@orfour}}%
        \@ifstar{\tof@nextof@nand}{\tof@nextof@nor}}
\def\tof@nextof@nor#1{%
       \toks\z@\expandafter{\the\toks\z@ 
             {\tof@setflags{#1}\def\tof@tags@tmp{}\def\tof@untags@tmp{}%
              \@for\@tempa:=#1\do{\tof@secondiffalse{\@tempa}}%
              \tof@next\tof@savedcontentsline\tof@gobblethree@orfour}}%
       \expandafter\tof@init\expandafter{\the\toks\z@}}
\def\tof@nextof@nand#1{%
       \toks\z@\expandafter{\the\toks\z@ 
             {\tof@setflags{#1}\def\tof@tags@tmp{}\def\tof@untags@tmp{}%
              \@for\@tempa:=#1\do{\tof@secondiftrue{\@tempa}}%
              \tof@next\tof@gobblethree@orfour\tof@savedcontentsline}}%
       \expandafter\tof@init\expandafter{\the\toks\z@}}
\newcommand\tableof{\@ifstar{\tof@or}{\tof@and}}
\newcommand\tablenotof{\@ifstar{\tof@nand}{\tof@nor}}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\toftagthis[1]{\addtocontents{toc}
          {\string\tof@tagthis\string{#1\string}}}
\newcommand*\tofuntagthis[1]{\addtocontents{toc}
          {\string\tof@untagthis\string{#1\string}}}
\newcommand*\toftagstart[1]{\addtocontents{toc}
          {\string\tof@starttags\string{#1\string}}}
\newcommand*\toftagstop[1]{\addtocontents{toc}
          {\string\tof@stoptags\string{#1\string}}}
\endinput
%    \end{macrocode}
% \MakePercentComment
\CharacterTable
 {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
  Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
  Digits        \0\1\2\3\4\5\6\7\8\9
  Exclamation   \!     Double quote  \"     Hash (number) \#
  Dollar        \$     Percent       \%     Ampersand     \&
  Acute accent  \'     Left paren    \(     Right paren   \)
  Asterisk      \*     Plus          \+     Comma         \,
  Minus         \-     Point         \.     Solidus       \/
  Colon         \:     Semicolon     \;     Less than     \<
  Equals        \=     Greater than  \>     Question mark \?
  Commercial at \@     Left bracket  \[     Backslash     \\
  Right bracket \]     Circumflex    \^     Underscore    \_
  Grave accent  \`     Left brace    \{     Vertical bar  \|
  Right brace   \}     Tilde         \~}

\CheckSum{474}

\Finale
%%
%% End of file `tableof.dtx'.

