1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
|
%
% S E L E C T P . S T Y - Select pages for output
%
% Version 0.9 (test), Sept 25, 1992 (So much for keeping versions current!)
%
% By Donald Arseneau, asnd@reg.triumf.ca, based on macros in
% TUGBoat, 8:2 (1987), p. 217 written by Don Knuth, and with
% suggestions from Hossein Saiedian.
%
% This style allows selection of individual pages to be output by LaTeX
% or plain TeX by specifying, for example,
%
% \outputonly{1,3, 7-12 16 17}
%
% The list of numbers should be in the order that TeX generates the pages.
% The numbers should be separated by commas or spaces, and may include
% ranges (7-12).
%
% More complete instructions follow \endinput
% First, set catcode of @ in case it isn't a "letter" already
\expandafter\edef\csname SP@catcode\endcsname
{\catcode`\noexpand\@=\the\catcode`\@
\let \csname SP@catcode\endcsname \noexpand\UnDefinedButNoAt}
\catcode`\@=11
% Allow plain TeX to use this style:
\ifx\c@page\Und@Fynd
\let\c@page \pageno
\def\@empty{}% note: \ifx ignores the \global nature of macros for comparison
\let\nofiles\relax
\let\typeout\message
\fi
% Read list of selected pages
\def\outputonly{\begingroup \catcode`\,13 \SP@outonly}
\begingroup \catcode`\,13
\gdef\SP@outonly#1{\edef,{\string,}\typeout{Only pages #1 will be output.}%
\def,{ }\xdef\SP@geS{\SP@geS\space #1}% make commas be spaces
\endgroup
\nofiles % prevent writing partial .aux files
\let\shipout\SP@shipout% replace shipout command
\ifnum\SP@nextpage=-\maxdimen % if first \outputonly command...
\SP@getnextpage \fi % get first page number from list
}\endgroup
\gdef\SP@geS{}
% replace \shipout command with filter to select pages for output
\let\plain@shipout=\shipout
\newcount\SP@nextpage \global\SP@nextpage=-\maxdimen % flag as undefined
\newcount\SP@expectpage \global\SP@expectpage=-\maxdimen
\def\SP@getnextpage{\ifx\SP@geS\@empty \global\SP@nextpage\maxdimen
\else % If more page numbers on list
\afterassignment\SP@updPS \global\SP@nextpage\SP@geS\relax
\fi}
\def\SP@updPS#1\relax{\gdef\SP@geS{#1}}
\def\SP@shipout{\relax %\showthe\c@page%
\ifnum\SP@expectpage=-\maxdimen \global\SP@expectpage\c@page
\else \global\advance\SP@expectpage\@ne
\fi
\ifnum\SP@expectpage=\c@page\else % page number has jumped,
\ifnum\SP@nextpage<\z@ % if in middle of a range --
\ifnum \AbsVal\c@page >\AbsVal\SP@expectpage\else % and jumping backward --
\SP@getnextpage % read next number for sure
\fi\fi
\SP@catchup % Resynchronize
\fi \global\SP@expectpage\c@page
\ifnum\SP@nextpage<\z@ % either a `negative' page, or end of range
\ifnum\c@page<\z@ % preamble pages in plain only match singly
\ifnum\c@page=\SP@nextpage\SP@getnextpage \let\SP@dopage\plain@shipout\fi
\else % look for range match
\ifnum\c@page>-\SP@nextpage \else \let\SP@dopage\plain@shipout \fi
\ifnum\c@page<-\SP@nextpage \else \SP@getnextpage \fi
\fi
\else % look for single match
\ifnum\c@page=\SP@nextpage \SP@getnextpage \let\SP@dopage\plain@shipout \fi
\fi \SP@dopage}
\newbox\SP@garbage
\def\SP@dopage{\deadcycles\z@ \setbox\SP@garbage=}
% read list of desired pages to get resynchronized with actual page numbers.
% \SP@catchup is called whenever the page number has a discontinuity.
%
\def\SP@catchup{%
\ifnum \AbsVal\c@page >\AbsVal\SP@nextpage
\ifx\SP@geS\@empty \def\SP@catchup{\global\SP@nextpage\maxdimen}\fi
\SP@getnextpage
\expandafter \SP@catchup
\fi}
% take absolute value of TeX number or dimension
\def\AbsVal#1{\ifnum#1<\z@-\fi#1}
\SP@catcode % restore @ catcode
\endinput
%
% SELECTP.STY -- Select pages for output
%
% INSTRUCTIONS
%
% This style file defines the command \outputonly which selects specific
% pages for output, much as \includeonly selects certain files for input.
% To use selectp.sty in LaTeX, specify "selectp" as one of the document
% style options and give the command \outputonly{_list_of_page_numbers_}
% before \begin{document}. Only pages given in the list will be output
% to the DVI file. For example
%
% \documentstyle[12pt,selectp,subeqn]{article}
% \outputonly{1,3, 7-12 16 17}
%
% which will allow only pages 1,3,7,8,9,10,11,12,16,17 to be output.
% For plain TeX, use \input{selectp.sty}.
%
% The number list should consist of numbers and number ranges (7-12, e.g.)
% separated by commas or spaces. The order is not random but MUST BE THE
% ORDER THAT THE PAGES ARE PRODUCED; normally this means the numbers must
% always increase. If an invalid page number appears on the list, no pages
% will be output until the list is re-synchronized or the document ends.
%
% Any time the document's page number does not increment normally,
% selectp.sty tries to re-synchronize the page number with the \outputonly
% list of numbers. This is necessary when \includeonly is used.
%
% Pages that are labeled with roman numerals or letters should still be
% listed with a normal arabic number; page xi should be referred to as 6.
%
% In LaTeX, unfortunately, pages i and 1 are both number 1, so it is
% tricky to skip over all the roman-numbered pages and then print
% page 1. If there are 3 roman-numbered pages,
% 1-3 will print pages i,ii,iii; not pages 1,2,3
% 1-3,1-5 will print pages i,ii,iii,1,2,3,4,5
% 1-3,8-12 will print pages i,ii,iii,8,9,10,11,19
% 1,1-5 will print i,1,2,3,4,5
% 1-6 prints pages i,ii,iii only, not pages 4,5,6 !!!
% 0,2-6 prints pages 2,3,4,5,6, since there is no page 0 and the
% outputonly page list is resynchronized when the actual page
% number goes back to 1)
%
% The last example is illuminating. LaTeX looks for page 0, but can't find
% it. It skips pages until the page number goes from 3(iii) to 1, at which
% point it resynchronizes by reading "2" from the list, waiting for page 2
% to be produced, and then writing page 2. Selectp then reads "-6", and
% CONTINUES outputting pages until it has done page 6. As long as the
% numbers of the intervening pages are less than 6 (the end of the range),
% those pages will be printed.
%
% If there are no roman numeral pages, the number list is simple, because
% the numbers must increase monotonically.
%
% LaTeX will not write auxilliary files while selecting output pages, so
% the cross references and citations must be correct on the run BEFORE
% using \outputonly. Unfortunately, this means you must produce the
% full-size DVI file at least once.
%
% If multuple \outputonly commands are given, the lists are concatenated.
%
% In plain TeX, specify roman numeral pages as negative numbers, but do not
% use ranges until getting to the ordinary (arabic) page numbers (e.g.,
% \outputonly{-1,-2,-3,-4, 1-8}). In plain TeX specifying page 1 will NOT
% print page i.
%
% If a page number in the list is not found, generally no more pages will be
% printed. For example, suppose a document has 50 pages, the list 3 5 910 13
% (which perhaps should read "9 10") causes LaTeX to process silently
% through the whole document looking for page 910. Only pages 3 and 5 will
% be printed.
%
% EXCEPT if the number terminating a RANGE is not found {3 5-910 13},
% LaTeX continues outputting pages until the end.
%
% EXCEPT if the actual page number changes discontinuously, then the number
% list MAY be scanned for the next number greater than the new page number.
% (Jumps are usually due to the numbering being changed from roman to arabic
% with the page reset to 1, or because an included file was skipped due to
% an \includeonly command.) The list is scanned if the page number jumps
% backward, or if it jumps forward PAST the current target page. ("Target
% page" = the end of the current range or the next number to be printed out,
% as appropriate.)
%
% Numbers must be integers: 4.3 is illegal, even if some other style file
% is generating page numbers in that format.
%
% Of course non-numbers are illegal. Some plausible mistakes:
% page, xvii, IV, 12--16, 49ff, 49-, 5_7.
% 5_7 could be a typo for the range 5-7.
% To specify page 49 and all following ("49ff" or "49-"), use a range
% ending with a non-existent page: 49-99999.
% The typo 12--16 prints pages 12 and 16, not the range 12 through 16 as
% intended.
%
% EXAMPLES OF USE
%
% Suppose a document has pages i,ii,iii,iv,v,vi,1,2,3,...,33, but pages
% 22...28 are absent due to \includeonly; here are some examples of valid
% uses of \outputonly.
%
% \outputonly{15-20} -- prints only the 6 pages 15...20
% \outputonly{1-3} -- prints pages i,ii,iii (in LaTeX)
% -- plain TeX prints pages 1,2,3
% \outputonly{1,1,2} -- prints pages i,1,2
% \outputonly{0,1,2} -- prints pages 1,2
% \outputonly{1,3-6} -- prints pages i,iii,iv,v,vi
% \outputonly{4,3-6} -- prints pages iv,3,4,5,6
% \outputonly{5,2} -- prints pages v,2
% \outputonly{5-2} -- prints only page v only!
% \outputonly{5-7} -- prints pages v,vi only!
% \outputonly{1-33} -- prints pages i,ii,iii,iv,v,vi only!
% \outputonly{29-99} -- prints pages 29,30,31,32,33
% \outputonly{19-99} -- prints pages 19,20,21,29,30,31,32,33
% \outputonly{24-32} -- prints pages 29,30,31,32
% \outputonly{15-25,32} -- prints pages 15,16,17,18,19,20,21,32
% \outputonly{0,4,23-27,31-99} -- prints pages 4,31,32,33
%
% Version 0.9 (test), Sept 25, 1992:
%
% Send problem reports to asnd@triumfcl.bitnet or asnd@Reg.triumf.ca
%
% test integrity:
% brackets: round, square, curly, angle: () [] {} <>
% backslash, slash, vertical, hat, tilde: \ / | ^ ~
|