summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/tocvsec2/tocvsec2.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/tocvsec2/tocvsec2.dtx')
-rw-r--r--Master/texmf-dist/source/latex/tocvsec2/tocvsec2.dtx197
1 files changed, 166 insertions, 31 deletions
diff --git a/Master/texmf-dist/source/latex/tocvsec2/tocvsec2.dtx b/Master/texmf-dist/source/latex/tocvsec2/tocvsec2.dtx
index 244ad2750ef..5d47eb29e29 100644
--- a/Master/texmf-dist/source/latex/tocvsec2/tocvsec2.dtx
+++ b/Master/texmf-dist/source/latex/tocvsec2/tocvsec2.dtx
@@ -3,8 +3,8 @@
% tocvsec2.dtx
% Author: Peter Wilson, Herries Press
% Maintainer: Will Robertson (will dot robertson at latex-project dot org)
-% Copyright 1999--2004 Peter R. Wilson
-% Copyright 2010 Will Robertson
+% Copyright 1999-2004 Peter R. Wilson
+% Copyright 2010-2011 Will Robertson
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
@@ -22,7 +22,7 @@
%</driver>
%<usc>\ProvidesPackage{tocvsec2}
%<*usc>
- [2010/02/27 v1.2b variable ToC section entries]
+ [2011/08/07 v1.3 variable ToC section entries]
%</usc>
%
%<*driver>
@@ -113,7 +113,7 @@
% in the Table of Contents on a section by section basis.
% It is a replacement for the \Lpack{tocvsec} package, which should
% not be used.
-% Use of the package requires the \Lpack{ifthen} package to be available.
+% Use of the package requires e\TeX\ and the \Lpack{ifthen} package to be available.
% \end{abstract}
% \tableofcontents
%
@@ -139,8 +139,6 @@
% \LaTeX{} \textsc{docstrip} utility which enables the automatic
% extraction of the \LaTeX{} macro source files~\cite{GOOSSENS94}.
%
-% \clearpage
-%
% Section~\ref{sec:usc} describes the usage of the package.
% Commented source code for the package is in Section~\ref{sec:code}.
%
@@ -226,13 +224,20 @@
% The package also provides some utility commands so you don't have to remember
% the level numbers of the sectioning commands.
%
+% \subsection{Changing ToC appearances}
+%
% \DescribeMacro{\maxtocdepth}
% The |\maxtocdepth{|\meta{sec}|}| command can be used after the preamble
% (and before the |\tableofcontents| command) to set the global value
% for the \Lcount{tocdepth}. \meta{sec} is the name of a sectioning
% division (e.g., |part| or |paragraph|). You can also use |all|,
% meaning all sectioning divisions, or |none|, meaning no sectioning divisions.
-%
+%
+% \textbf{Note well}: after \cs{tableofcontents}, the \Lcount{tocdepth}
+% is reset to the value specified by \cs{maxtocdepth} in case that counter is
+% used by a subsequent `List of Figures' or `List of Tables', as in the
+% standard \LaTeX\ classes.
+%
%
% \DescribeMacro{\settocdepth}
% The |\settocdepth{|\meta{sec}|}| command can be used to change the value of
@@ -250,9 +255,20 @@
% to the least
% significant sectional unit
% that should be in the printed ToC.
-% Later, after the |\tableofcontents| command, it is possible to
-% to use |\settocdepth| to reset \Lcount{tocdepth} to a more significant
-% sectional level (and to reset it back again). As an example, assume that
+% Later, after the |\tableofcontents| command, it is possible to
+% to use |\settocdepth| to change \Lcount{tocdepth} to a different
+% sectional level.
+%
+% \DescribeMacro{\resettocdepth}
+% After \Lcount{tocdepth} has been changed with |\settocdepth|, it is
+% possible to reset it to its previous value with |\resettocdepth|.
+% In fact, you may use |\resettocdepth| multiple times
+% to reset multiple uses of |\settocdepth|. (It behaves like a stack, for
+% you computer-science-types.)
+% If you wish to reset \Lcount{tocdepth} to its original value completely,
+% use |\resettocdepth*|.
+%
+% As an example, assume that
% the ToC should list subsections and above, but there is one particular
% section in the document which consists of a set of definitions, each of
% which is presented as a subsection, but these should not appear in the
@@ -270,11 +286,13 @@
% \settocdepth{section}
% \subsection{Definition 1}
% ...
-% \settocdepth{subsection}
+% \resettocdepth %% equivalent to "\settocdepth{subsection}"
% \section{After definitions}
% ...
% \end{verbatim}
%
+% \section{Changing section numbering}
+%
% \DescribeMacro{\setsecnumdepth}
% The |\setsecnumdepth{|\meta{sec}|}| command is similar to |\settocdepth|
% except
@@ -286,10 +304,19 @@
% \DescribeMacro{\maxsecnumdepth}
% The |\maxsecnumdepth{|\meta{sec}|}| command is similar to |\maxtocdepth|
% except that it is for setting the default value for \Lcount{secnumdepth}
-% after the preamble. If you used |\setsecnumdepth| for this purpose
-% you might find an extra blank page in the typeset manuscript.
-%
-% For example, assume that in a document the sectional divisions are
+% after the preamble.
+% In previous versions of the package if you used |\setsecnumdepth| for this
+% purpose you might find an extra blank page in the typeset manuscript, but
+% nowadays the two commands are interchangeable.
+%
+% \DescribeMacro{\resetsecnumdepth}
+% Similarly to |\resettocdepth|, this command cycles back through previous
+% values for \Lcount{secnumdepth} so you don't have to keep track of them
+% yourself if you need to change its value for only a short component of a
+% manuscript. By writing |\resetsecnumdepth*|, you can reset entirely back
+% to a clean state with \Lcount{secnumdepth} set to its original value.
+%
+% For example, assume that in a document the sectional divisions are
% normally numbered down to the sub-subsection level, but within a particular
% section, they should only be numbered to the subsection level. Also,
% all sectional divisions within the appendices are to be numbered.
@@ -308,7 +335,7 @@
% \section{Reduce numbering}
% \setsecnumdepth{subsection}
% ...
-% \setsecnumdepth{subsubsection}
+% \resetsecnumdepth %% equivalent to "\setsecnumdepth{subsubsection}"
% \section{Another normal section}
% ...
% \appendix
@@ -393,35 +420,35 @@
\newcommand{\settocdepth}[1]{%
\@knownsect@cfalse
\ifthenelse{\equal{#1}{none}}{%
- \addtocontents{toc}{\protect\setcounter{tocdepth}{-10}}
+ \addtocontents{toc}{\save@tocdepth\protect\setcounter{tocdepth}{-10}}
\@knownsect@ctrue}{}
\ifthenelse{\equal{#1}{part}}{%
\ift@cchapter
- \addtocontents{toc}{\protect\setcounter{tocdepth}{-1}}
+ \addtocontents{toc}{\save@tocdepth\protect\setcounter{tocdepth}{-1}}
\else
- \addtocontents{toc}{\protect\setcounter{tocdepth}{0}}
+ \addtocontents{toc}{\save@tocdepth\protect\setcounter{tocdepth}{0}}
\fi
\@knownsect@ctrue}{}
\ifthenelse{\equal{#1}{chapter}}{%
- \addtocontents{toc}{\protect\setcounter{tocdepth}{0}}
+ \addtocontents{toc}{\save@tocdepth\protect\setcounter{tocdepth}{0}}
\@knownsect@ctrue}{}
\ifthenelse{\equal{#1}{section}}{%
- \addtocontents{toc}{\protect\setcounter{tocdepth}{1}}
+ \addtocontents{toc}{\save@tocdepth\protect\setcounter{tocdepth}{1}}
\@knownsect@ctrue}{}
\ifthenelse{\equal{#1}{subsection}}{
- \addtocontents{toc}{\protect\setcounter{tocdepth}{2}}
+ \addtocontents{toc}{\save@tocdepth\protect\setcounter{tocdepth}{2}}
\@knownsect@ctrue}{}
\ifthenelse{\equal{#1}{subsubsection}}{%
- \addtocontents{toc}{\protect\setcounter{tocdepth}{3}}
+ \addtocontents{toc}{\save@tocdepth\protect\setcounter{tocdepth}{3}}
\@knownsect@ctrue}{}
\ifthenelse{\equal{#1}{paragraph}}{%
- \addtocontents{toc}{\protect\setcounter{tocdepth}{4}}
+ \addtocontents{toc}{\save@tocdepth\protect\setcounter{tocdepth}{4}}
\@knownsect@ctrue}{}
\ifthenelse{\equal{#1}{subparagraph}}{%
- \addtocontents{toc}{\protect\setcounter{tocdepth}{5}}
+ \addtocontents{toc}{\save@tocdepth\protect\setcounter{tocdepth}{5}}
\@knownsect@ctrue}{}
\ifthenelse{\equal{#1}{all}}{%
- \addtocontents{toc}{\protect\setcounter{tocdepth}{100}}
+ \addtocontents{toc}{\save@tocdepth\protect\setcounter{tocdepth}{100}}
\@knownsect@ctrue}{}
\if@knownsect@c\else
\PackageError{tocvsec2}{%
@@ -436,28 +463,136 @@
% |\maxtocdepth{|\meta{sec}|}| can be used to initialise \Lcount{tocdepth}
% between the end of the preamble and the |\tableofcontents| command.
% \begin{macrocode}
-\newcommand{\maxtocdepth}[1]{
- \@setseccntt@c{#1}{tocdepth}}
+\newcounter{max@tocdepth}
+\setcounter{max@tocdepth}{\value{tocdepth}}
+\newcommand{\maxtocdepth}[1]{%
+ \save@tocdepth
+ \@setseccntt@c{#1}{max@tocdepth}%
+ \@setseccntt@c{#1}{tocdepth}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\tableofcontents}
+% \changes{v1.3}{2011/08/07}{Patch to reset \Lcount{tocdepth}}
+% \begin{macrocode}
+\g@addto@macro\tableofcontents{%
+ \setcounter{tocdepth}{\value{max@tocdepth}}%
+}
% \end{macrocode}
% \end{macro}
%
+%
% \begin{macro}{\setsecnumdepth}
% \changes{v1.2b}{2010/02/27}{Remove occasional extraneous vertical space}
-% |\setsecnumdepth{|\meta{sec}|}| is the user command for setting
+% |\setsecnumdepth{|\meta{sec}|}| is the user command for setting
% \Lcount{secnumdepth} to the value corresponding to \meta{sec}.
% \begin{macrocode}
\newcommand{\setsecnumdepth}[1]{%
+ \save@secnumdepth
\@setseccntt@c{#1}{secnumdepth}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\maxsecnumdepth}
% |\maxsecnumdepth{|\meta{sec}|}| is the user command to initialise
-% \Lcount{secnumdepth} after the preamble
+% \Lcount{secnumdepth} after the preamble
% to the value corresponding to \meta{sec}.
% \begin{macrocode}
+\newcounter{max@secnumdepth}
+\setcounter{max@secnumdepth}{\value{secnumdepth}}
\newcommand{\maxsecnumdepth}[1]{%
- \@setseccntt@c{#1}{secnumdepth}}
+ \save@secnumdepth
+ \@setseccntt@c{#1}{max@secnumdepth}%
+ \@setseccntt@c{#1}{secnumdepth}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Resetting and returning to previous values}
+%
+%
+% \begin{macro}{\resetsecnumdepth}
+% \changes{v1.3}{2011/08/07}{New command}
+% It would be nice to be able to `reset' the tocdepth or secnumdepth
+% to a previous value.
+% Unfortunately this can't be done with grouping so we use a stack-based
+% approach.
+% \begin{macrocode}
+\let\stack@secnumdepth\@empty
+\newcommand\save@secnumdepth{%
+ \edef\stack@secnumdepth{\the\c@secnumdepth\relax\stack@secnumdepth}%
+}
+\def\gobble@secnumdepth#1\@nil{\edef\stack@secnumdepth{#1}}
+% \end{macrocode}
+% The idea of the stack is
+% |{|$x_n$|\relax| $x_{n-1}$|\relax| \dots$x_0$|\relax}|;
+% prepending new values with \cs{edef} and using assignment and
+% \cs{afterassignment} to push an entry off the front.
+% \begin{macrocode}
+\newcommand\resetsecnumdepth{%
+ \@ifstar{%
+ \setcounter{secnumdepth}{\value{max@secnumdepth}}%
+ \edef\stack@secnumdepth{\the\c@secnumdepth\relax}%
+ }{%
+ \ifx\stack@secnumdepth\@empty
+ \PackageWarning{tocvsec2}{There is no previous value for secnumdepth}%
+ \else
+ \afterassignment\gobble@secnumdepth
+ \expandafter\c@secnumdepth\expandafter\numexpr\stack@secnumdepth\@nil
+ \fi
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\resettocdepth}
+% \changes{v1.3}{2011/08/07}{New command}
+% The idea the same is as above but because it all happens inside an auxiliary
+% file there's a couple of extra steps.
+% \begin{macrocode}
+\let\stack@tocdepth\@empty
+\protected\def\save@tocdepth{%
+ \edef\stack@tocdepth{\the\c@tocdepth\relax\stack@tocdepth}%
+}
+\def\gobble@tocdepth#1\@nil{\edef\stack@tocdepth{#1}}
+% \end{macrocode}
+% Resetting is done in the \verb|.toc| file:
+% \begin{macrocode}
+\newcommand\resettocdepth{\@ifstar
+ {\addtocontents{toc}{\remax@tocdepth}}
+ {\addtocontents{toc}{\reset@tocdepth}}%
+}
+% \end{macrocode}
+% Reset back to the initial state (and clear the stack):
+% \begin{macrocode}
+\protected\def\remax@tocdepth{%
+ \setcounter{tocdepth}{\value{max@tocdepth}}%
+ \edef\stack@secnumdepth{\the\c@tocdepth\relax}%
+}
+% \end{macrocode}
+% Reset to the previous state on the stack:
+% \begin{macrocode}
+\protected\def\reset@tocdepth{%
+ \ifx\stack@tocdepth\@empty
+ \PackageWarning{tocvsec2}{There is no previous value for tocdepth}%
+ \else
+ \afterassignment\gobble@tocdepth
+ \expandafter\c@tocdepth\expandafter\numexpr\stack@tocdepth\@nil
+ \fi
+}
+% \end{macrocode}
+% Ensure errant commands in the ToC won't cause problems:
+% \begin{macrocode}
+\addtocontents{toc}{%
+ \@ifundefined{save@tocdepth}{%
+ \let\save@tocdepth\relax
+ \let\reset@tocdepth\relax
+ \let\remax@tocdepth\relax
+ }{}%
+}
% \end{macrocode}
% \end{macro}
%