% \iffalse \NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{count1to} % [2009/05/24 v2.1 Count1to9 Package (MS)] % %<*driver> \ProvidesFile{count1to.drv} [2009/05/24 v2.1 Driver for Count1to9 Package (MS)] \documentclass[a4paper]{ltxdoc} \usepackage[T1]{fontenc} \usepackage{lmodern} \usepackage{microtype} \usepackage{booktabs} \usepackage{url} \usepackage{count1to} \usepackage[toc]{multitoc} \usepackage{svn} \usepackage{hypdoc} \usepackage{geometry} \GetFileInfo{count1to.sty} \setcounter{IndexColumns}{2} % onecolumn glossary \makeatletter \renewenvironment{theglossary}{% \glossary@prologue \setlength\emergencystretch{5em} \GlossaryParms \let\item\@idxitem \ignorespaces}{} \makeatother \EnableCrossrefs \RecordChanges %%\DisableCrossrefs% Say \DisableCrossrefs if index is ready \CodelineIndex % Index code by line number %\OnlyDescription % comment out for implementation details %%\OldMakeIndex % use if your MakeIndex is pre-v2.9 \setcounter{IndexColumns}{2} \setlength{\IndexMin}{30ex} \setlength{\premulticols}{\IndexMin} \addtolength{\oddsidemargin}{1cm} \addtolength{\textwidth}{-1cm} \begin{document} \DocInput{count1to.dtx} \end{document} % %^^A $Id: count1to.dtx 1368 2009-05-24 16:02:57Z oneiros $ % % Copyright (c) 1994..2009 by Martin Schr\"oder. All rights reserved. % % This work 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 2005/12/01 or later. % % This work has the LPPL maintenance status `maintained'. % % The Current Maintainer of this work is Martin Schr\"oder. % % This work consists of the files count1to.dtx and count1to.ins % and the derived file count1to.sty. % % \fi % % \CheckSum{112} % %% \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 \~} %% %% \iffalse meta-comment %% =================================================================== %% @LaTeX-style-file{ %% author = {Martin Schr\"oder}, %% version = "2.1", %% date = "24 May 2009", %% filename = "count1to.sty", %% address = {Martin Schr\"oder %% Barmer Stra\"se 14 %% 44137 Dortmund %% Germany} %% telephone = "+49-231-1206574", %% email = "martin@oneiros.de", % codetable = "ISO/ASCII", % keywords = "LaTeX, pages", % supported = "yes", %% docstring = "LaTeX package which sets count1 to count9, %% which can be used to select certain pages %% with a driver. %% Also provides access to the number of pages %% of the document. %% Uses the everyshi package." %% } %% =================================================================== %% \fi % % \SVN $Rev: 1368 $ % \SVN $Date: 2009-05-24 18:02:57 +0200 (So, 24. Mai 2009) $ % % \changes{v1.00}{1994/12/07}{New} % \changes{v1.01}{1994/12/09}{Documentation improved} % \changes{v1.02}{1996/12/29}{Documentation improved} % \changes{v1.20}{1998/08/09}{Documentation improved} % \changes{v1.22}{1999/06/08}{Moved to LPPL} % \changes{v2.00}{2002/08/31}{Removed \texttt{TotalPages}} % \changes{v2.1}{2009/05/24}{New address} % % \newcommand*{\Count}[1]{\texttt{\symbol{92}count#1}} % \newcommand*{\package}[1]{\textnormal{\sffamily#1}} % \newcommand*{\NEWfeature}[1]{% % \hskip 1sp \marginpar{\small\sffamily\raggedright % New feature\\#1}} % % ^^A ----------------------------- % % \changes{v1.03}{1997-03-09}{Fixed use of \cs{newline} in title.} % \title{\unskip % The \package{count1to} package^^A % \thanks{^^A % The version number of this file is \fileversion, subversion % revision~\#\SVNRev, last revised % \protect\SVNDate.\protect\newline % The name \textsf{count1to} is a tribute to the $8+3$ file-naming % convention of certain ancient ``operating systems''; strictly % speaking it should be \textsf{count1to9}.} % } % \changes{v2.00}{2002/08/31}{Changed e-mail} % \author{Martin Schr\"oder\\[0.5ex] % \normalsize Barmer Stra\ss{}e 14\\ % \normalsize 44137 Dortmund\\ % \normalsize Germany\\ % \normalsize martin@oneiros.de} % \date{\filedate} % \maketitle % % ^^A ----------------------------- % % % \begin{abstract} % This package sets \Count{1} to \Count{8} with the values % of \texttt{page} to \texttt{subparagraph}. % \Count{9} is used to flag odd pages. % The values of these counters are displayed and written in the % \textsf{.dvi} file by \TeX{} and can later be used to select % the pages of certain parts of the document for printing if the % device driver supports this. % \end{abstract} % % \pagestyle{headings} % % ^^A ----------------------------- % % \tableofcontents % % ^^A ----------------------------- % % \section{Introduction to version 2} % ^^A % The main change of this new version is the removal of the code for % the \texttt{TotalPages} label. % This code didn't work with the \package{hyperref} % package\cite{package:hyperref} and better code to achieve the % effect of it is contained in the \package{totpages} % package\cite{package:totpages}. % So old documents using this package will not work when they try to % use the \texttt{TotalPages} label; these documents must be changed % by inserting a \cs{usepackage\{totpages\}} in the preamble and % replacing all occurences of \texttt{TotalPages} by % \texttt{TotPages}. % % ^^A ----------------------------- % % \section{Introduction} % ^^A % Most of the time users want to print only certain parts of a % document; but these can only be selected by using the page numbers % of these parts with most device drivers. % This can be dif\/ficult or impossible if pages in dif\/ferent % parts of the document have the same number---e.\,g. in the % frontmatter and the first text pages (iii vs. 3). % % \TeX{} provides an easy solution to this problem: whenever a page % is completed by the output routine and shipped out via % \cs{shipout}, it displayes the values of \Count{0} to \Count{9} % on the display (e.\,g. \texttt{[1]}) \emph{and writes them to the % \textsf{.dvi} file}. % % \changes{v1.02}{1996/12/29}{fixed typos} % \begin{quote} % ``The first ten \Count{} registers, \Count{0} to \Count{9}, % are reserved for a special purpose: \TeX{} displays these ten % counts on your terminal whenever ouputting a page, and it % transmits them to the output file as an identification of that % page. % The counts are separated by decimal points on your terminal, % with trailing `\texttt{.0}' patterns suppressed. % Thus, for example, if \Count{0=5} and \Count{2=7} when a % page is shipped out to the \texttt{dvi} file, and if the other % counters are zero, \TeX{} will type `\texttt{[5.0.7]}'. % Plain \TeX{} uses \Count{0} for the page number, and it keeps % \Count{1} through~\Count{9} equal to zero; that is why you % see `\texttt{[1]}' when page~1 is being output. % In more complex applications the page numbers can have further % structure; ten counts are shipped out so that there will be % plenty of identification.''\cite[p\@. 119]{KnuthTeXa} % \end{quote} % % \noindent % Surprinsingly, until recently there existed no package for % \LaTeX{} that used these \Count{}ers although some drivers allow % the selection of pages based on other \Count{}s then \Count{0} % (e.\,g. em\TeX). % % This package is the solution: It uses the \package{everyshi} % package\cite{package:everyshi} to set \Count{1} to \Count{9} before % each \cs{shipout} with these values: % % \begin{center} % \begin{tabular}{cl}\toprule % \Count{} & value \\ \midrule % 0 & relative page number (set by \LaTeX)\\ % 1 & absolute page number\\ % 2 & number of current \cs{part} \\ % 3 & number of current \cs{chapter} (0 with article class)\\ % 4 & number of current \cs{section} \\ % 5 & number of current \cs{subsection} \\ % 6 & number of current \cs{subsubsection} \\ % 7 & number of current \cs{paragraph} \\ % 8 & number of current \cs{subparagraph} \\ % 9 & 1 on odd pages, 0 on even pages\footnotemark\\ % \bottomrule % \end{tabular} % \end{center} % \footnotetext{^^A % If you have a better application for \Count{9}, let me know.} % % \noindent % \textsf{count1to} also works with classes that do not define some % or all of the sectioning commands and their counters, like % \textsf{letter}. % Although it is of somewhat little use then \texttt{:-)}. % % A note for users of this package: When you select the pages of % some part of your document with a lower structure than % \cs{chapter}, remember that only \cs{part}s and \cs{chapter}s % start on a new page; if you want to print a complete % \cs{section}, you should also select the first page of the next % \cs{section}. % Also note that \TeX{} ships out the values of the counters instead % of their visual representation (produced with % \cs{the}\emph{counter}), so appendix A sets \Count{4} to 1 in the % article class. % % A note for developers of device drivers: Please add support for % \Count{1} to~\texttt{9} to your programs. % It would also be nice if users could easily select the next % page(s) after a certain count (something like % ``\texttt{*.*.*.*.2+1.*}'' should be possible for selecting all % pages with $\Count{4}\mapsto\mathrm{section}=2$ plus the first % page of section~3). % % ^^A ----------------------------- % % \section{Options} % ^^A % The package has no options. % % % ^^A ----------------------------- % % \section{Required packages} % ^^A % The package requires the \package{everyshi} % package\cite{package:everyshi}. % % % ^^A ----------------------------- % % \StopEventually{^^A % % ^^A ----------------------------- % % \section{Acknowledgements} % ^^A % As usual Rebecca Stiels improved the quality of this documentation. % % % ^^A ----------------------------- % % \begin{thebibliography}{1} % \raggedright % \bibitem{package:lastpage} % Jeff Goldberg. % \newblock The \package{lastpage}-package. % \newblock \url{CTAN: tex-archive/macros/latex/contrib/other/lastpage}. % \newblock \LaTeXe{} package. % \bibitem{KnuthTeXa} % Donald~E.\ Knuth. % \newblock \emph{The {\TeX}Book}, volume~A of \emph{Computers % and Typesetting}. % \newblock Addison-Wes\-ley, 1986. % \newblock Eleventh printing, revised, May 1991. % \bibitem{package:totpages} % Wilhelm M\"uller. % \newblock The \package{totpages} package. % \newblock \url{CTAN: tex-archive/macros/latex/contrib/supported/totpages/}. % \newblock \LaTeXe{} package. % \bibitem{package:hyperref} % Sebastian Rahtz. % \newblock Hypertext marks in \LaTeX. % \newblock \url{CTAN: tex-archive/macros/latex/contrib/supported/hyperref/}. % \bibitem{package:everyshi} % Martin Schr\"oder. % \newblock The \package{everyshi} package. % \newblock \url{CTAN: tex-archive/macros/latex/contrib/supported/ms/everyshi.dtx}. % \newblock \LaTeXe{} package. % \end{thebibliography} % % } % % % ^^A ----------------------------- % % \section{The implementation} % ^^A % \setlength{\parindent}{0pt} % \begin{macrocode} %<*package> % \end{macrocode} % % We need the \package{everyshi} package. % \changes{v1.20}{1998/04/10}{don't require \textsf{ifthen}} % \changes{v1.10}{1997/11/01}{require \textsf{ifthen}} % \begin{macrocode} \RequirePackage{everyshi}[1994/12/09] % \end{macrocode} % % We need various \cs{if}s to check if the used counters % are defined. % \changes{v1.20}{1998/04/10}{\cs{newif} again} % \changes{v1.10}{1997/11/01}{\cs{newboolean}} % \begin{macrocode} \newif\if@have@part \newif\if@have@chapter \newif\if@have@section \newif\if@have@subsection \newif\if@have@subsubsection \newif\if@have@paragraph \newif\if@have@subparagraph % \end{macrocode} % % \begin{macro}{\@countItoIX@ifs} % \cs{@countItoIX@ifs} is used to set all these \cs{if}s at % |\begin{document}|. % It is undefined after use to save some space. % \changes{v2.00}{2002/08/31}{moved code for \cs{AtBeginDocument} to % \cs{@countItoIX@init}} % \changes{v1.20}{1998/04/10}{don't use \textsf{ifthen}} % \changes{v1.10}{1997/11/01}{\cs{setboolean}} % \changes{v1.02}{1996/12/29}{destruct after usage} % \begin{macrocode} \newcommand*{\@countItoIX@ifs}{ \@ifundefined{c@part} {}{\@have@parttrue} \@ifundefined{c@chapter} {}{\@have@chaptertrue} \@ifundefined{c@section} {}{\@have@sectiontrue} \@ifundefined{c@subsection} {}{\@have@subsectiontrue} \@ifundefined{c@subsubsection} {}{\@have@subsubsectiontrue} \@ifundefined{c@paragraph} {}{\@have@paragraphtrue} \@ifundefined{c@subparagraph} {}{\@have@subparagraphtrue} } % \end{macrocode} % \end{macro} % % \begin{macro}{\@countItoIX@bugfix} % The current version of \LaTeX{} has the ``feature'' that only the % first level of counters associated with a counter via the optional % argument of \cs{newcounter} is reset when the counter is stepped; % so when you start a new chapter, the number for the subsection is % not reset. % This is normally no problem, but with this package, it is: If this % bug is not fixed or worked-around, then whenever you use % \cs{subparagraph} or some other lower sectioning command, and % after that a sectioning command that is at least two levels higher % (e.\,g. \cs{subsubsection}), the value of \texttt{subparagraph} % would not be reset and would still be displayed and shipped out. % So we have to associate \emph{all} lower-level sectioning commands % with the higher levels. % This is done via \cs{@addtoreset} at \cs{begin\{document\}}. % \cs{@countItoIX@bugfix} is undefined after use to save some space. % \changes{v2.00}{2002/08/31}{moved code for \cs{AtBeginDocument} to % \cs{@countItoIX@init}} % \changes{v1.20}{1998/04/10}{don't use \textsf{ifthen}} % \changes{v1.10}{1997/11/01}{\cs{ifthenelse}} % \changes{v1.02}{1996/12/29}{destruct after usage} % \begin{macrocode} \newcommand*{\@countItoIX@bugfix}{ \if@have@part \@addtoreset{section} {part} \@addtoreset{subsection} {part} \@addtoreset{subsubsection}{part} \@addtoreset{paragraph} {part} \@addtoreset{subparagraph} {part} \fi \if@have@chapter \@addtoreset{subsection} {chapter} \@addtoreset{subsubsection}{chapter} \@addtoreset{paragraph} {chapter} \@addtoreset{subparagraph} {chapter} \fi \if@have@section \@addtoreset{subsubsection}{section} \@addtoreset{paragraph} {section} \@addtoreset{subparagraph} {section} \fi \if@have@subsection \@addtoreset{paragraph} {subsection} \@addtoreset{subparagraph} {subsection} \fi \if@have@subsubsection \@addtoreset{subparagraph} {subsubsection} \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\@countItoIX@init} % \changes{v2.00}{2002/08/31}{new} % \cs{@countItoIX@init} calls \cs{\@countItoIX@ifs} and % \cs{@countItoIX@bugfix} and then frees their memory. % This is done at \cs{begin\{document\}} via \cs{AtBeginDocument}. % \begin{macrocode} \newcommand*{\@countItoIX@init}{% \message{ABD: Count1to9 initializing macros}% \@countItoIX@ifs\let\@countItoIX@ifs\undefined \@countItoIX@bugfix\let\@countItoIX@bugfix\undefined } \AtBeginDocument{\@countItoIX@init} % \end{macrocode} % \end{macro} % % % \begin{macro}{\@countItoIX@shipout} % \cs{@countItoIX@shipout} is used for setting \Count{1} to % \Count{9} at each \cs{shipout}. % \begin{macrocode} \newcommand*{\@countItoIX@shipout}{ % \end{macrocode} % \Count{1} is the absolute page number, which we have to maintain % by ourselves. % \begin{macrocode} \global\advance \count1 by 1 % \end{macrocode} % \Count{2} to \Count{8} are set with the values of % \cs{part} to \cs{subparagraph}, if these commands are defined.^^A % \footnote{We should probably also check the value of % \texttt{secnumdepth}, but I don't think this is necessary.} % \changes{v1.20}{1998/04/10}{don't use \textsf{ifthen}} % \changes{v1.10}{1997/11/01}{\cs{ifthenelse}} % \begin{macrocode} \if@have@part \count2\value{part} \fi \if@have@chapter \count3\value{chapter} \fi \if@have@section \count4\value{section} \fi \if@have@subsection \count5\value{subsection} \fi \if@have@subsubsection \count6\value{subsubsection} \fi \if@have@paragraph \count7\value{paragraph} \fi \if@have@subparagraph \count8\value{subparagraph} \fi % \end{macrocode} % \Count{9} is set to~1 on odd pages and to~0 on even pages. % \begin{macrocode} \ifodd\count1\count9=1 \else\count9=0 \fi } \EveryShipout{\@countItoIX@shipout} % \end{macrocode} % \end{macro} % % \begin{macrocode} % % \end{macrocode} % % ^^A ----------------------------- % % \Finale % % \PrintIndex\PrintChanges % ^^A Make sure that the index is not printed twice % ^^A (ltxdoc.cfg might have a second \PrintIndex command) % \let\PrintChanges\relax % \let\PrintIndex\relax