%\iffalse meta-comment, etc. %% This is chappg.dtx, and it's -*-LaTeX-*- text % % We use the same body for the \cs{ProvidesFile} as for the % \cs{ProvidesPackage} command. % % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} %<*dtx> \ProvidesFile{chappg.dtx}% % %\ProvidesPackage{chappg}% [2006/05/09 v2.1b page numbering by chapter % number pages by chapter (or other unit)% %<*dtx> chappg package source file% % ]% $Id: chappg.dtx,v 1.4 2006/05/09 07:12:20 rf10 Exp rf10 $ % \end{macrocode} % % Code to enable LaTeX processing of the file without the intervention % of a driver file. % \begin{macrocode} %<*driver> \setcounter{errorcontextlines}{999} \documentclass{ltxdoc} % \end{macrocode} % % we limit the things that we will index % \begin{macrocode} \DoNotIndex{\#,\@MM,\@cclv,\@gobble,\@ifnextchar,\@ifundefined} \DoNotIndex{\|,\advance,\begingroup,\bgroup,\box,\csname} \DoNotIndex{\dagger,\ddagger,\def,\divide,\dp} \DoNotIndex{\edef,\egroup,\ifx,\else,\fi,\endcsname,\endgroup,\end} \DoNotIndex{\endinput,\ensuremath,\expandafter} \DoNotIndex{\gdef,\global,\hbox,\hskip,\hss,\ht} \DoNotIndex{\ifcase,\or,\ifdim,\ifhbox,\ifhmode,\ifnum,\ifvbox, \fi ,\fi ,\fi ,\fi ,\fi ,\fi } \DoNotIndex{\ifvoid,\fi,\kern,\let,\long,\loop} \DoNotIndex{\MessageBreak,\newbox,\newcommand,\newcounter} \DoNotIndex{\newdimen,\newif,\newskip,\newtoks,\noexpand} \DoNotIndex{\P,\p@,\par,\penalty,\protect,\providecommand} \DoNotIndex{\relax,\renewcommand,\S,\setbox,\setcounter} \DoNotIndex{\skip,\space,\the,\typeout,\vbox,\vskip} \DoNotIndex{\wd,\xdef,\@} \GetFileInfo{chappg.dtx} \EnableCrossrefs % to get documented source of the package, comment out the next line, % and uncomment the following one; otherwise, create yourself % (somewhere on your LaTeX input path) a file ltxdoc.cfg that contains % simply \AtBeginDocument{\AlsoImplementation} \OnlyDescription %\AlsoImplementation \setcounter{StandardModuleDepth}{1} \begin{document} \DocInput{chappg.dtx} \end{document} % % \end{macrocode} % \fi % % \CheckSum{201} % % \title{\texttt{chappg} --- a \LaTeX{} package for\\ % numbering pages ``by chapter''\thanks{This file has % version number \fileversion, last revised \filedate}} % \author{Robin Fairbairns\thanks{University of Cambridge Computer % Laboratory, William Gates Building, J.\,J. Thompson Avenue, % Cambridge, CB2 0FD, UK % (\texttt{robin.fairbairnscl.cam.ac.uk})}} % \maketitle % % \section*{Support} % % Some support of this package is available \emph{for unchanged copies % of the package} via email to me at the address given in the % footnote. Support will remain available at least as long as the % address remains valid. I don't guarantee anything, but I will % probably look at any bug reports you may submit, and may correct % problems reported (either in my code or in yours\dots). % % \section*{Copyright statement} % % \noindent Program: \texttt{chappg.dtx}\par % \noindent Copyright 2000, 2003 Robin Fairbairns % % This program may redistributed and/or modified under the terms % of the LaTeX Project Public License in file \texttt{lppl.txt} % (available from CTAN directory \texttt{macros/latex/base}; either % version 1.3 of the License, or (at your option) any later version. % The latest version of this license is in % \texttt{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. % % \section{User interface~--- package options} % % The package provides two options. % % \noindent|\usepackage[auto]{chappg}| causes the package to set % pagenumbering according to its scheme, using the command % |\pagenumbering{bychapter}| % % \smallskip\noindent|\usepackage[noauto]{chappg}| tells the package % not to set pagenumbering; the user is then free to set up % pagenumbering according to her own scheme of things. % % \smallskip\noindent In the absence of any package option, the % package acts as if the user had given the \texttt{auto} option; this % action is compatible with earlier versions of this package. % % \section{User interface~--- commands} % % The purpose of the package is to provide a page-numbering style % ``\texttt{bychapter}'', for use with the \cs{pagenumbering} command. % In simple use, the command % \begin{verbatim} % \pagenumbering{bychapter} % \end{verbatim} % will % \begin{itemize} % \item reset the \texttt{page} counter to \texttt{1}, % \item cause page numbers to display as % ``\meta{chapter}-\meta{page}'', % \item cause page numbers to be reset to 1 at the start of each chapter. % \end{itemize} % Of course, none of this is useful (indeed, an error is provoked) if % the document is not using the standard \textsf{report} or % \textsf{book} class, or some other class that provides % \cs{chapter}-level divisions. % % More complicated use of the package is possible, using the commands % described below. % % The package modifies the \LaTeX{} kernel command \cs{pagenumbering} % so that it has an optional argument; all the kernel-defined % numbering styles ignore the optional argument, but if the numbering % style is \texttt{bychapter}, the argument may be used to specify a % means of numbering pages. Thus, while % \begin{verbatim} % \pagenumbering{bychapter} % \end{verbatim} % gives page numbers in the form ``\meta{chapter}-\meta{page}'', so % pages of chapter 3 will be numbered 3-1, 3-2, etc., and pages of % appendix B will be numbered B-1, B-2, etc. % % With the optional argument form: % \begin{verbatim} % \pagenumbering[Index]{bychapter} % \end{verbatim} % page numbers will appear in the form ``Index-\meta{page}''. One of % the anticipated uses of this facility is just as indicated~--- % providing by-chapter numbering of the pages of chapters that don't % have numbers (as index chapters don't in the standard classes). % % The separator between the chapter and page numbers (hyphen above, % but I can imagine people wanting it to be an en-dash) is % \cs{chappgsep}, which en-dash-lovers may redefine (after loading the % package); for example: %\begin{verbatim} % \renewcommand{\chappgsep}{--}% %\end{verbatim} % Havoc is wreaked with this structure in the LaTeX \cs{frontmatter} % and \cs{mainmatter} commands (which both explicitly use % \cs{pagenumbering} and therefore destroy the changed definition of % \cs{thepage}). % % My design decision, when converting this package for use under % LaTeX~2e was to assume that \cs{frontmatter} is indeed to % be in \cs{pagenumbering}|{roman}|, and to restore the % chapter-numbering in \cs{mainmatter}. Chapters in the frontmatter % can not be numbered `by' their chapters, since the chapters don't % actually have numbers. If the author wishes to have some special % treatment of part of the frontmatter, the analogue of the above is %\begin{verbatim} % \chapter{Preface} % \pagenumbering[Preface]{bychapter} %\end{verbatim} % % The conception breaks down again in \cs{backmatter}; again, the % \cs{chapter} commands don't number the chapters, so that the pages % will all be numbered as if they were `within' the last real chapter. % Therefore, if by-chapter page numbering is still enabled while in % the backmatter, and the user hasn't issued a new % \cs{pagenumbering}|[prefix]{bychapter}| since the \cs{backmatter} command, % the package rewrites the prefix as |{\bf??}|, and produces a warning % at the end of the document. % % \section{User interface --- a caution} % % The \cs{appendix} command can confuse \texttt{bychapter} page % numbering~--- unless you take some precautions, the last page or two % of your last ``real'' chapter will not be be numbered ``by % chapter''. The solution is to issue a \cs{clearpage} (if % \texttt{openany} class option is in effect), or \cs{cleardoublepage} % (if \texttt{openright} class option is in effect). By default, % \textsf{report} class uses the \texttt{openany} option, so you would % write: % \begin{quote} % \begin{verbatim} % ... text at end of chapter. % \clearpage % \appendix % \chapter{Title of first appendix} % \end{verbatim} % \end{quote} % \noindent whereas the \textsf{book} class uses the % \texttt{openright} option by default, so you would write: % \begin{quote} % \begin{verbatim} % ... text at end of chapter. % \cleardoublepage % \appendix % \chapter{Title of first appendix} % \end{verbatim} % \end{quote} % % \StopEventually{} % % \section{Code: Preliminaries} % % \begin{macrocode} %<*package> % \end{macrocode} % % This package was % largely reimplemented for use as a \LaTeXe{} package, taking account % of \cs{mainmatter}, etc., and providing various extra capabilities, % by Robin Fairbairns, from a \LaTeX\,2.09 style file by % Max Hailperin, who first published the style in \texttt{TeXMaG} % Vol. 5, No. 3 (part 1). % % This release provides typeset documentation of the first \LaTeXe{} % version, for \TeX{} catalogue users' convenience. % % \begin{macro}{\if@chappg@auto} % \begin{macro}{\if@chappg@resetting} % Conditionals for control of page number resetting % \begin{macrocode} \newif\if@chappg@auto \@chappg@autofalse \newif\if@chappg@resetting \@chappg@resettingfalse % \end{macrocode} % \end{macro} % \end{macro} % % Deal with package options; we set option \texttt{auto} by default, % for compatibility with the earlier versions of this package % \begin{macrocode} \DeclareOption{auto}{\@chappg@autotrue} \DeclareOption{noauto}{\@chappg@autofalse} \ExecuteOptions{auto} \ProcessOptions % \end{macrocode} % % \begin{macro}{\pagenumbering} % \begin{macro}{\@chappg@prefix} % Replace \cs{pagenumbering} so as to have the optional argument. % \begin{macrocode} \renewcommand\pagenumbering[2][\@chappg@thechapter]{% \global\c@page\@ne \protected@xdef\thepage{% \expandafter\noexpand\csname @#2\endcsname \noexpand\c@page }% \gdef\@chappg@prefix{#1}% % \end{macrocode} % % And now make sure that page numbering resetting is in its right % state % \begin{macrocode} \def\@tempa{#2}% \def\@tempb{bychapter}% \ifx\@tempa\@tempb \@chappg@checkloc \if@chappg@resetting \else \@addtoreset{page}{chapter}% \@chappg@resettingtrue \fi \else \if@chappg@resetting \@removefromreset{page}{chapter}% \@chappg@resettingfalse \fi \fi } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\@bychapter} % This is the command used by \cs{pagenumbering}\marg{bychapter} to % actually create the page number % \begin{macrocode} \newcommand\@bychapter[1]{% \@chappg@prefix\chappgsep\@arabic#1% \ifx\@chappg@prefix\@chappg@surprise \if@chappg@surprised\else \xdef\@chappg@surprise@line{\the\inputlineno}% \global\@chappg@surprisedtrue \fi \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\@chappg@thechapter} % Output a chapter number if there have been any chapters; otherwise % gobble the following thing, which will be \cs{chappgsep} % \begin{macrocode} \def\@chappg@thechapter{% \ifnum\c@chapter=0 \expandafter\@gobble \else \thechapter \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\chappgsep} % Separator in the above % \begin{macrocode} \providecommand\chappgsep{-} % \end{macrocode} % \end{macro} % % \begin{macro}{\mainmatter} % \begin{macro}{\@@mainmatter} % Hack at \cs{mainmatter} so that it restores bychapter numbering if % there's been a \cs{frontmatter} command and it was there in the first place % \begin{macrocode} \let\@@mainmatter\mainmatter \def\mainmatter{\@@mainmatter \if@chappg@auto\pagenumbering{bychapter}\fi } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\backmatter} % \begin{macro}{\@@backmatter} % \begin{macro}{\@chappg@surprise} % \begin{macro}{\if@chappg@surprised} % Hack at \cs{backmatter} so that it warns the user of possibly surprising % results if \cs{pagenumbering}\oarg{whatever}\marg{bychapter} hasn't % been used % \begin{macrocode} \let\@@backmatter\backmatter \def\backmatter{\@@backmatter \let\@chappg@prefix\@chappg@surprise } \def\@chappg@surprise{\textbf{??}} \newif\if@chappg@surprised \@chappg@surprisedfalse % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % Generate a warning at end document if one of those ``surprised'' % things has been executed, or if a \cs{pagenumbering} command was % given in a bad place. % \begin{macrocode} \AtEndDocument{% \if@chappg@badloc \PackageWarningNoLine{chappg}{Bad location for \string\pagestyle{bychapter} command \MessageBreak \string\clearpage\space or \string\cleardoublepage\space \MessageBreak recommended before \string\pagestyle\space on line \@chappg@badloc@line } \fi \if@chappg@surprised \PackageWarningNoLine{chappg}{Possibly surprising page numbering in \string\backmatter \MessageBreak Use \string\pagenumbering[prefix]{bychapter}% \MessageBreak to select alternative before line \@chappg@surprise@line } \fi } % \end{macrocode} % % \begin{macro}{\@chappg@checkloc} % \begin{macro}{\if@chappg@badloc} % Check that the current location is appropriate for a % \texttt{bychapter} change. % \begin{macrocode} \newif\if@chappg@badloc \def\@chappg@checkloc{% \ifx\@onlypreamble\@notprerr \ifhmode \@chappg@badloctrue \xdef\@chappg@badloc@line{\the\inputlineno}% \else \ifdim\pagetotal>1sp \@chappg@badloctrue \xdef\@chappg@badloc@line{\the\inputlineno}% \fi \fi \fi % not in preamble } % \end{macrocode} % \end{macro} % \end{macro} % % % \iffalse % Experimental: work not yet completed % % command to hack at an environment to cause it to behave prettily % \#1$\mapsto$environment name, \#2$\mapsto$prefix for page numbers % \begin{macrocode} %\newcommand\bychapterenv[2]{% % \@ifundefined{@@#1}{% % \expandafter\let\csname @@#1\expandafter\endcsname % \csname#1\endcsname % }{}% % \expandafter\edef\csname#1\endcsname{% % \expandafter\noexpand\csname @@#1\endcsname % \global\let\noexpand\@@bychapter\noexpand\@bychapter % \noexpand\pagenumbering[\noexpand#2]{bychapter}% % }% % \@ifundefined{@@end#1}{% % \expandafter\let\csname @@end#1\expandafter\endcsname % \csname end#1\endcsname % }{}% % \expandafter\edef\csname end#1\endcsname{% % \expandafter\noexpand\csname @@end#1\endcsname % \global\let\noexpand\@bychapter\noexpand\@@bychapter % }% %} % \end{macrocode} % % Specific cases: set up for dealing with bibliography, index, and (if % it's defined) glossary % \begin{macrocode} %\bychapterenv{thebibliography}\bibname %\bychapterenv{theindex}\indexname %\@ifundefined{theglossary}{}{% % \bychapterenv{theglossary}{Glossary}% %} % \end{macrocode} % \fi % % % The next magic makes the page counter be reset to one rather than zero % \begin{macrocode} \renewcommand\@stpelt[1]{% \global\csname c@#1\endcsname \expandafter\ifx \csname c@#1\endcsname \c@page \@ne \else \z@ \fi } % \end{macrocode} % % Finally, we select the bychapter as the default page style if the % user so requires. If the \texttt{noauto} % option was given, the user has opted to execute the command hirself, % but otherwise we behave backwards-compatibly. The selection will be % hacked by \cs{frontmatter}, if the author uses it. % \begin{macrocode} \if@chappg@auto\pagenumbering{bychapter}\fi % \end{macrocode} % % \begin{macro}{\@removefromreset} %% fragment included from\\ %% CTAN macros/latex/contrib/fragments/removefr.tex %% %Date: Sat, 30 Jul 1994 17:58:55 PST\\ %From: Donald Arseneau % % A utility macro:\\ % \cs{@removefromreset}\marg{FOO}\marg{BAR} : Removes counter FOO % from the list of counters \cs{cl@BAR} to be reset when counter BAR is % stepped. The opposite of \cs{@addtoreset}. % \begin{macrocode} \def\@removefromreset#1#2{\let\@tempb\@elt \expandafter\let\expandafter\@tempa\csname c@#1\endcsname \def\@elt##1{\expandafter\ifx\csname c@##1\endcsname\@tempa\else \noexpand\@elt{##1}\fi}% \expandafter\edef\csname cl@#2\endcsname{\csname cl@#2\endcsname}% \let\@elt\@tempb} % \end{macrocode} % \end{macro} % % \begin{macrocode} \endinput % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \Finale % % %% \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 \~}