diff options
author | Karl Berry <karl@freefriends.org> | 2007-04-29 23:50:16 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2007-04-29 23:50:16 +0000 |
commit | 7a10d350a6025aa6d6e637a883018deee64520c5 (patch) | |
tree | 01cddbb1c122b4a353842357e29fae4ed00a2ce7 /Master/texmf-dist/source/latex/ms/count1to.dtx | |
parent | 3182aaa429e0e1e24f5824de116d90a154166b32 (diff) |
handle ms a la oberdiek (15apr07)
git-svn-id: svn://tug.org/texlive/trunk@4216 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/ms/count1to.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/ms/count1to.dtx | 500 |
1 files changed, 500 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/ms/count1to.dtx b/Master/texmf-dist/source/latex/ms/count1to.dtx new file mode 100644 index 00000000000..077d92f13bd --- /dev/null +++ b/Master/texmf-dist/source/latex/ms/count1to.dtx @@ -0,0 +1,500 @@ +% \iffalse +\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{count1to} +%<package> [1999/06/08 v1.22 Count1to9 Package (MS)] +% +%<*driver> +\ProvidesFile{count1to.drv} + [1999/06/08 v1.22 Driver for Count1to9 Package (MS)] +\documentclass{ltxdoc} +\usepackage{booktabs} +\usepackage{url} +\usepackage{count1to} +\usepackage[toc]{multitoc} +\GetFileInfo{count1to.sty} +\setcounter{IndexColumns}{2} +\EnableCrossrefs +%%\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} +\begin{document} + \DocInput{count1to.dtx} +\end{document} +%</driver> +% +% Copyright (c) [1994..1999] by Martin Schr\"oder. All rights reserved. +% +% This program may be redistributed and/or modified under the terms +% of the LaTeX Project Public License, either version 1.0 of this +% license, or (at your option) any later version. +% The latest version of this license is in +% CTAN:macros/latex/base/lppl.txt. +% +% Happy users are requested to send me a postcard. :-) +% +% For error reports in case of UNCHANGED versions see count1to.ins +% +% \fi +% +% \CheckSum{121} +% +%% \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 = "1.22", +%% date = "8 June 1999", +%% filename = "count1to.sty", +%% address = {Martin Schr\"oder +%% Cr\"usemannallee 3 +%% D-28213 Bremen +%% telephone = "+49-421-2239425", +%% email = "Martin.Schroeder@ACM.org", +%% pgp-Key = "2048 bit / KeyID 292814E5", +%% pgp-fingerprint = "7E86 6EC8 97FA 2995 82C3 FEA5 2719 090E", +% checksum = "17059 511 2330 19695", +% 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. +% +% The checksum field above contains a CRC-16 +% checksum as the first value, followed by +% the equivalent of the standard UNIX wc +% (word count) utility output of lines, +% words, and characters. This is produced +% by Robert Solovay's checksum utility." +%% } +%% =================================================================== +%% \fi +% +% \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} +% +% \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 We need to document a label -- we do this by using the macros for +% ^^A environments and changing the macros for the index entries. +% \makeatletter +% \renewcommand*{\SpecialEnvIndex}[1]{^^A +% \@bsphack\index{\string#1^^A +% \actualchar\string\verb\quotechar*\verbatimchar +% \string#1\verbatimchar +% \encapchar usage}\@esphack} +% \renewcommand*{\SpecialMainEnvIndex}[1]{^^A +% \@bsphack\special@index{\string#1\actualchar +% \string\verb\quotechar*\verbatimchar +% \string#1\verbatimchar\encapchar main}% +% \@esphack} +% \makeatother +% +% ^^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 umber of this file is \fileversion, +% last revised \filedate.\protect\newline +% The name \textsf{count1to} is a tribute to the $8+3$ +% file-naming convention of certain ``operating +% systems''; strictly speaking it should be +% \textsf{count1to9}.} +% \thanks{^^A +% This document has \ref{TotalPages} pages.}^^A +% } +% \author{Martin Schr\"oder\\[0.5ex] +% \normalsize Cr\"usemannallee 3\\ +% \normalsize D-28213 Bremen\\ +% \normalsize Martin.Schroeder@ACM.org\\ +% \scriptsize \texttt{PGP-Key: 2048 bit / KeyID 292814E5}\\[-0.5em] +% \scriptsize \texttt{7E86 6EC8 97FA 2995~~82C3 FEA5 2719 090E}} +% \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. +% +% It also gives access to the total number of pages of the +% document via the label \texttt{TotalPages}. +% \end{abstract} +% +% \pagestyle{headings} +% +% ^^A ----------------------------- +% +% \tableofcontents +% +% ^^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). +% +% \DescribeEnv{TotalPages} +% \NEWfeature{1997/11/01} +% The setting of \Count{1} with the absolute page number makes it +% possible to provide the \emph{total} number of pages of the +% document (as opposed to the ``number'' on the last page provided +% by the \textsf{lastpage} package\cite{package:lastpage}). +% By referencing the label |TotalPages| (e.\,g. by |\ref{TotalPages}|) +% you get the total number of pages the document had at the last run +% of \LaTeX. +% If you want to use this feature, you should load \textsf{count1to} +% as the \emph{last} package in your document because \textsf{count1to} +% executes some code at |\end{document}| and has to be sure that its +% code is the \emph{last} code executed there. +% +% +% ^^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. +% Rolf Niepraschk (\texttt{niepraschk@ptb.de}) provided the idea and +% the first implementation of the \texttt{TotalPages} label. +% +% +% ^^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: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{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} + } +\AtBeginDocument{\@countItoIX@ifs\let\@countItoIX@ifs\undefined} +% \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{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 + } +\AtBeginDocument{\@countItoIX@bugfix\let\@countItoIX@bugfix\undefined} +% \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{environment}{TotalPages} +% The label \texttt{TotalPages} is set on the \emph{absolut} last page +% of the document and holds the \emph{total} number of pages of the +% document, i.\,e. the value of \Count{1}. +% But before we write the value to the auxfile we call a \cs{clearpage} +% to force all pending floats to be output. +% To do this we have to be sure to be the \emph{last} macro called by +% \cs{AtEndDocument}---but this is nearly impossible to assure (see +% the troubles the \package{lastpage} package\cite{package:lastpage} goes +% through to achieve this), so we try to do our very best and set our +% entry for \cs{AtEndDocument} at |\begin{document}| by using +% \cs{AtBeginDocument}. +% \changes{v1.10}{1997/11/01}{new} +% \changes{v1.21}{1998/10/24}{write to \cs{@mainaux} instead of \cs{@auxout}} +% \begin{macrocode} +\AtBeginDocument{% + \AtEndDocument{% + \clearpage + \immediate\write\@mainaux{\string\newlabel{TotalPages}{{\the\count1}{\the\count1}}} + }% + } +% \end{macrocode} +% \end{environment} +% +% \begin{macrocode} +%</package> +% \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 |