diff options
author | Karl Berry <karl@freefriends.org> | 2011-08-07 22:51:21 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2011-08-07 22:51:21 +0000 |
commit | b9796f07afb63ea44bdf7109294476668d4d1c5f (patch) | |
tree | e5f4683338fd567cc11ef84f67dbf2fa587a5537 /Master/texmf-dist/source/latex/tocvsec2 | |
parent | bcdd4b5d66feaf11bd0ef448645957cb6f14f372 (diff) |
tocvsec2 1.3 (7aug11)
git-svn-id: svn://tug.org/texlive/trunk@23444 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/tocvsec2')
-rw-r--r-- | Master/texmf-dist/source/latex/tocvsec2/tocvsec2.dtx | 197 |
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} % |