Mercurial > repos > galaxyp > mqppep_preproc
comparison perpage.tex @ 1:b76c75521d91 draft
planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/mqppep commit 43e7a43b545c24b2dc33d039198551c032aa79be
author | galaxyp |
---|---|
date | Fri, 28 Oct 2022 18:26:42 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:8dfd5d2b5903 | 1:b76c75521d91 |
---|---|
1 % \iffalse | |
2 %% | |
3 %% perpage is part of the bigfoot bundle for critical typesetting | |
4 %% Copyright 2002--2014 David Kastrup <dak@gnu.org> | |
5 %% | |
6 %% The license notice and corresponding source code for this file are | |
7 %% contained in perpage.dtx. | |
8 %% | |
9 % This program is free software; you can redistribute it and/or modify | |
10 % it under the terms of the GNU General Public License as published by | |
11 % the Free Software Foundation; either version 2 of the License, or | |
12 % (at your option) any later version. | |
13 % | |
14 % This program is distributed in the hope that it will be useful, | |
15 % but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 % GNU General Public License for more details. | |
18 % | |
19 % You should have received a copy of the GNU General Public License | |
20 % along with this program; if not, write to the Free Software | |
21 % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
22 % \fi | |
23 % \CheckSum{396} | |
24 % \GetFileInfo{perpage.sty} | |
25 % \date{\filedate} | |
26 % \author{David Kastrup\thanks{\texttt{dak@gnu.org}}} | |
27 % \title{The \texttt{perpage} package\\Version \fileversion} | |
28 % \maketitle | |
29 % \section{Description} | |
30 % | |
31 % The \texttt{perpage} package adds the ability to reset counters per | |
32 % page and/or keep their occurences sorted in order of appearance on | |
33 % the page. | |
34 % | |
35 % It works by attaching itself to the code for \cmd{\stepcounter} and | |
36 % will then modify the given counter according to information written | |
37 % to the |.aux| file, which means that multiple passes may be needed. | |
38 % Since it uses the internals of the \cmd{\label} mechanism, the need | |
39 % for additional passes will get announced by \LaTeX\ as ``labels may | |
40 % have changed''. | |
41 % | |
42 % \DescribeMacro{\MakePerPage} | |
43 % \begin{quote} | |
44 % |\MakePerPage[2]{footnote}| | |
45 % \end{quote} | |
46 % will start footnote numbers with~2 on each page (the optional | |
47 % argument defaults to~1). 2~might be a strange number, unless you | |
48 % have used something like | |
49 % \begin{quote} | |
50 % |\renewcommand\thefootnote{\fnsymbol{footnote}}| | |
51 % \end{quote} | |
52 % and want to start off with a dagger. The starting value must not be | |
53 % less than~1 so that the counter logic can detect the reset of a | |
54 % counter | |
55 % reliably.\footnote{This unfortunately means that you can't just use | |
56 % \cmd{\alph} in order to get figures on page~10 numbered as ``10'', | |
57 % ``10a'', ``10b''.} | |
58 % It could be a good idea to redefine |\@cnterr| if you use a format | |
59 % with limited range: at the first pass, footnotes are not reset | |
60 % across pages and things like |\fnsymbol| will quickly run out of | |
61 % characters to use. | |
62 % | |
63 % \DescribeMacro{\theperpage} | |
64 % If you want to label things also on a per page base, for example | |
65 % with | |
66 % \begin{quote} | |
67 % |\renewcommand{\thefigure}{\thepage-\arabic{figure}}| | |
68 % \end{quote} | |
69 % you'll have the problem that \cmd{\thepage} is updated | |
70 % asynchronously with the real page, since \TeX\ does not know which | |
71 % page the figure will end up. If you have used the |perpage| package | |
72 % for modifying the figure counter, however, at the point where the | |
73 % counter is incremented, the macro \cmd{\theperpage} will be set to | |
74 % the correct value corresponding to the actual page location. Note | |
75 % that this macro is shared between all counters, so advancing a | |
76 % different counter under control of |perpage| will render | |
77 % \cmd{\thefigure} incorrect. | |
78 % | |
79 % \DescribeMacro{\MakeSorted} | |
80 % \begin{quote} | |
81 % |\MakeSorted{figure}| | |
82 % \end{quote} | |
83 % will make the |figure| counter get `sorted': this means that counter | |
84 % values will be assigned in order of appearance in the output, not in | |
85 % order of appearance in the source code. For example, the order of | |
86 % interspersed one- and two-column figures might get mixed up by | |
87 % \LaTeX\ in the output. Making the counter sorted will fix the order | |
88 % to match the order of appearance. A similar problem is when | |
89 % ordinary footnotes are present in floating material (this does not | |
90 % work in standard \LaTeX, but might do so when using |manyfoot.sty| | |
91 % or |bigfoot.sty|): this might jumble their order in the output, and | |
92 % making their counter sorted will make things appear fine again. | |
93 % | |
94 % While this would not fix the order in the table of figures, | |
95 % fortunately the respective entries actually get written out in order | |
96 % of appearance in the output anyway, so this indeed fixes the | |
97 % problem. | |
98 % | |
99 % Manually setting the counter does not lead to reliable results in | |
100 % general; as a special case, however, resetting it to zero is | |
101 % recognized (this can also happen automatically when the counter is | |
102 % dependent on some other counter). The point where it is reset in | |
103 % the source code separates `count groups': everything in the source | |
104 % before that point is assigned sorted numbers separately from | |
105 % everything appearing behind it, and the sequence numbers start again | |
106 % with~1 with the first item appearing in the output (not the source) | |
107 % from the new count group. | |
108 % | |
109 % \DescribeMacro{\MakeSortedPerPage} | |
110 % \begin{quote} | |
111 % |\MakeSortedPerPage[2]{table}| | |
112 % \end{quote} | |
113 % will make the table numbers restart at 2 on each page \emph{and} | |
114 % will keep them sorted, to boot. Introducing new count groups by | |
115 % resetting the counter to~0 manually will not work, as it is not | |
116 % clear how to handle count groups scattered between pages. You will | |
117 % usually want to use something like | |
118 % \begin{quote} | |
119 % |\renewcommand{\thefigure}{\theperpage-\arabic{figure}}| | |
120 % \end{quote} | |
121 % to go along with a page-wise figure | |
122 % number.\footnote{Note the use of \cmd{\theperpage} here, see above.} | |
123 % Note that it would be quite silly to start the ranges with~2: this | |
124 % is just an example for the optional argument in case that you ever | |
125 % need it. | |
126 % | |
127 % \DescribeMacro{\AddAbsoluteCounter} | |
128 % \begin{quote} | |
129 % |\AddAbsoluteCounter{equation}| | |
130 % \end{quote} | |
131 % will create a counter |absequation| that will advance together with | |
132 % the counter |equation| but will not get reset along with it. This | |
133 % is not sorted into output order, but just runs along with the | |
134 % sequence in the source file. As a special case, the counter | |
135 % |abspage| is created in this manner and \cmd{\theabspage} is defined | |
136 % as an arabic number that works in the same contexts as \cmd{\page} | |
137 % (namely, gets properly deferred by \cmd{\protected@write}). | |
138 % | |
139 % \StopEventually{} | |
140 % \section{The documentation driver} | |
141 % This is the default driver for typesetting the docs. Running it | |
142 % through as a separate file will include the code section. Running | |
143 % the original |.dtx| file through will omit the code. | |
144 % \begin{macrocode} | |
145 %<*driver> | |
146 %ACE \documentclass{ltxdoc} | |
147 %ACE \usepackage{perpage} | |
148 %ACE \MakePerPage{footnote} | |
149 %ACE \begin{document} | |
150 %ACE \OnlyDescription | |
151 %ACE %<driver> \AlsoImplementation | |
152 %ACE \DocInput{perpage.dtx} | |
153 %ACE \end{document} | |
154 %ACE %</driver> | |
155 %ACE % \end{macrocode} | |
156 %ACE % | |
157 %ACE % \section{The package interfaces} | |
158 %ACE % First identification. | |
159 %ACE % \begin{macrocode} | |
160 %ACE %<*style> | |
161 %ACE \NeedsTeXFormat{LaTeX2e} | |
162 %ACE \ProvidesPackage{perpage}[2014/10/25 2.0 Reset/sort counters per page] | |
163 %ACE % \end{macrocode} | |
164 %ACE % \begin{macro}{\pp@cl@begin} | |
165 %ACE % \begin{macro}{\pp@cl@end} | |
166 %ACE % These macros are considerable tricky. They are called as | |
167 %ACE % artificial `dependent' counters when the counter they are hooked | |
168 %ACE % into is advanced. The way in which those counters are called are | |
169 %ACE % one of the following: | |
170 %ACE % \begin{quote} | |
171 %ACE % \begin{verbatim} | |
172 %ACE % \def\@stpelt#1{\global\csname c@#1\endcsname \z@} | |
173 %ACE % \end{verbatim} | |
174 %ACE % \end{quote} | |
175 %ACE % which is the default way of resetting a subordinate counter used | |
176 %ACE % in \LaTeX, or | |
177 %ACE % \begin{quote} | |
178 %ACE % \begin{verbatim} | |
179 %ACE % \def\@stpelt#1{\global\csname c@#1\endcsname \m@ne\stepcounter{#1}} | |
180 %ACE % \end{verbatim} | |
181 %ACE % \end{quote} | |
182 %ACE % which is a little present from |fixltx2e.sty| as of 2014/05/01, | |
183 %ACE % quite complicating this feat. | |
184 %ACE % | |
185 %ACE % The startup code swallows either |\global \advance| or |\global|. | |
186 % \begin{macrocode} | |
187 \def\pp@cl@begin{\z@\z@ \begingroup} | |
188 % \end{macrocode} | |
189 % The command used for ending our fake counters checks for the | |
190 % |\m@ne| condition. We don't want to bump our auxiliary counters | |
191 % twice, so we remove the following |\stepcounter| command. Things | |
192 % will go haywire if there is none, of course. | |
193 % \begin{macrocode} | |
194 \def\pp@cl@end{\afterassignment\pp@cl@end@ii \count@} | |
195 \def\pp@cl@end@ii{% | |
196 \relax | |
197 \expandafter\endgroup | |
198 \ifnum\count@<\z@ | |
199 \expandafter\pp@cl@end@iii | |
200 \fi} | |
201 \def\pp@cl@end@iii\stepcounter#1{} | |
202 % \end{macrocode} | |
203 % \end{macro} | |
204 % \end{macro} | |
205 % | |
206 % \begin{macro}{\AddAbsoluteCounter} | |
207 % adds a counter with prefix |abs| to a given counter. It typesets | |
208 % as an arabic number and never gets reset. And it is advanced | |
209 % whenever the unprefixed counter gets advanced. | |
210 % \begin{macrocode} | |
211 \newcommand\AddAbsoluteCounter[1] | |
212 {\@ifundefined{c@abs#1}{% | |
213 \expandafter\newcount\csname c@abs#1\endcsname | |
214 \global\value{abs#1}\@ne | |
215 \global\expandafter\let\csname cl@abs#1\endcsname\@empty | |
216 \expandafter\xdef\csname theabs#1\endcsname{% | |
217 \noexpand\number \csname c@abs#1\endcsname}% | |
218 \global\@namedef{c@pabs@#1}{\pp@cl@begin | |
219 \stepcounter{abs#1}% | |
220 \pp@cl@end}% | |
221 \@addtoreset{pabs@#1}{#1}}{}} | |
222 % \end{macrocode} | |
223 % \end{macro} | |
224 % \begin{macro}{\c@perpage} | |
225 % We now create the absolute counter |perpage|: | |
226 % \begin{macrocode} | |
227 %ACE \AddAbsoluteCounter{page} | |
228 % \end{macrocode} | |
229 % \end{macro} | |
230 % \begin{macro}{\theabspage} | |
231 % This has to be specially defined so that it will expand as late as | |
232 % \cmd{\thepage} does. Several commands set the latter temporarily | |
233 % to \cmd{\relax} in order to inhibit expansion, and we will more or | |
234 % less imitate its behavior when found set in that manner. | |
235 % \begin{macrocode} | |
236 \def\theabspage{\ifx\thepage\relax | |
237 \noexpand\theabspage | |
238 \else | |
239 \number\c@abspage | |
240 \fi} | |
241 % \end{macrocode} | |
242 % \end{macro} | |
243 % Here follow the three commands for defining counters per page: | |
244 % \begin{macro}{\MakePerPage} | |
245 % This creates a counter reset per page. An optional second | |
246 % argument specifies the starting point of the sequence. | |
247 % \begin{macrocode} | |
248 \newcommand*\MakePerPage[2][\@ne]{% | |
249 \pp@makeperpage{#2}\c@pchk@{#1}} | |
250 % \end{macrocode} | |
251 % \end{macro} | |
252 % \begin{macro}{\MakeSorted} | |
253 % This will create a counter sorted in appearance on the page. No | |
254 % optional argument is given: set the counter to a desired starting | |
255 % value manually if you need to. Resetting it to zero will start a | |
256 % new count group, setting it to other values is probably not reliable. | |
257 % \begin{macrocode} | |
258 \newcommand*\MakeSorted[1]{% | |
259 \setcounter{#1}{\z@}% | |
260 \pp@makeperpage{#1}\c@schk@{\@ne}} | |
261 % \end{macrocode} | |
262 % \end{macro} | |
263 % \begin{macro}{\MakeSortedPerPage} | |
264 % This will create output in sorted order, reset on each page. Use | |
265 % an optional argument to specify the starting value per page. This | |
266 % must not be~0, unfortunately. | |
267 % \begin{macrocode} | |
268 \newcommand*\MakeSortedPerPage[2][\@ne]{% | |
269 \pp@makeperpage{#2}\c@spchk@{#1}} | |
270 % \end{macrocode} | |
271 % \end{macro} | |
272 % All of those must only occur in the preamble since we can't do the | |
273 % initialization of the counter values otherwise. | |
274 % \begin{macrocode} | |
275 \@onlypreamble\MakePerPage | |
276 \@onlypreamble\MakeSorted | |
277 \@onlypreamble\MakeSortedPerPage | |
278 % \end{macrocode} | |
279 % \section{Internals} | |
280 % | |
281 % It works in the following manner: The basic work is done through | |
282 % attaching help code to the counter's reset list. Each counter has | |
283 % an associated absolute id that is counted through continuously and | |
284 % is never reset, thus providing a unique frame of reference. Sorted | |
285 % and perpage counters work by writing out information to the | |
286 % |.aux| file. | |
287 % | |
288 % The information we maintain for each counter while processing the | |
289 % source file are: | |
290 % \begin{itemize} | |
291 % \item The absolute counter id. | |
292 % \item The last counter value so that we can check whether the | |
293 % sequence has been interrupted. | |
294 % \item The current scope id. | |
295 % \item Its starting value. | |
296 % \end{itemize} | |
297 % | |
298 % The information written to the file consists of: | |
299 % \begin{itemize} | |
300 % \item The absolute counter id. | |
301 % \item The current scope id. | |
302 % \item The scope's starting value. | |
303 % \item The absolute counter id of a superior counter. | |
304 % \end{itemize} | |
305 % | |
306 % Sorted counters work by writing out the current absolute id and | |
307 % range id into the |.aux| file each time the counter gets incremented. | |
308 % Whenever the counter is changed in a manner different from being | |
309 % incremented, a new counter scope gets started. Each counter scope | |
310 % has its own independently assigned counter numbers and is associated | |
311 % with its absolute id starting value. So as each counter is | |
312 % incremented, we write out the triple of current absolute id, counter | |
313 % scope and initial value for the scope. Scope changes when a value | |
314 % assigned from the file differs from the `natural' value. When the | |
315 % file is read in, counter movements are tracked. Each counter that | |
316 % does not have its `natural' value, is having a counter setting | |
317 % recorded. | |
318 % | |
319 % The stuff works by adding a pseudo-reset counter to the counter's | |
320 % dependent counter list. | |
321 % | |
322 % \begin{macro}{\pp@makeperpage} | |
323 % This does the relevant things for modifying a counter. It defines | |
324 % its reset value, it defines the correspoding absolute counter. | |
325 % The absolute counter serves a double function: it is also used for | |
326 % assigning numbers while reading the |.aux| file. For this purpose | |
327 % it is assigned the initialized values here and in the enddocument | |
328 % hook (which is called before rereading the |.aux| file and | |
329 % checking for changed labels), while the counter is reset to zero | |
330 % at the start of the document. | |
331 % \begin{macrocode} | |
332 \def\pp@makeperpage#1#2#3{% | |
333 \global\expandafter\mathchardef\csname c@pp@r@#1\endcsname=#3\relax | |
334 \global\@namedef{c@pchk@#1}{#2{#1}}% | |
335 \newcounter{pp@a@#1}% | |
336 \setcounter{pp@a@#1}{#3}% | |
337 \addtocounter{pp@a@#1}\m@ne | |
338 \@addtoreset{pchk@#1}{#1}% | |
339 \AtBeginDocument{\setcounter{pp@a@#1}\z@}% | |
340 \edef\next{\noexpand\AtEndDocument | |
341 {\noexpand\setcounter{pp@a@#1}{% | |
342 \number\value{pp@a@#1}}}}\next} | |
343 \@onlypreamble\pp@makeperpage | |
344 % \end{macrocode} | |
345 % \end{macro} | |
346 % \begin{macro}{\pp@chkvlist} | |
347 % Check for an empty vertical list. If we have one, that is worth | |
348 % warning about. | |
349 % \begin{macrocode} | |
350 \def\pp@chkvlist{% | |
351 \ifcase | |
352 \ifvmode | |
353 \ifx\lastnodetype\@undefined | |
354 \ifdim-\@m\p@=\prevdepth\ifdim\lastskip=\z@\ifnum\lastpenalty=\z@ | |
355 \@ne | |
356 \fi\fi\fi | |
357 \else | |
358 \ifnum\lastnodetype=\m@ne \@ne \fi | |
359 \fi | |
360 \fi \z@ | |
361 \or | |
362 \PackageWarning{perpage}{\string\stepcounter\space probably at start of | |
363 vertical list:^^JYou might need to use \string\leavevmode\space | |
364 before it to avoid vertical shifts}% | |
365 \fi} | |
366 % \end{macrocode} | |
367 % \end{macro} | |
368 % \begin{macro}{\pp@fetchctr} | |
369 % \begin{macro}{\theperpage} | |
370 % This fetches the counter information and puts it into | |
371 % \cmd{\pp@label}, \cmd{\pp@page} and (globally) into | |
372 % \cmd{\theperpage}. | |
373 % \begin{macrocode} | |
374 \def\pp@fetchctr#1{\expandafter\expandafter\expandafter\pp@fetchctrii | |
375 \csname pp@r@#1@\number\value{pp@a@#1}\endcsname | |
376 {}{}} | |
377 | |
378 \global\let\theperpage\@empty | |
379 | |
380 \def\pp@fetchctrii#1#2#3{\def\pp@label{#1}% | |
381 \def\pp@page{#2}% | |
382 \gdef\theperpage{#3}} | |
383 % \end{macrocode} | |
384 % \end{macro} | |
385 % \end{macro} | |
386 % Ok, let's put together all the stuff for the simplest case, counters | |
387 % numbered per page without sorting: | |
388 % \begin{macro}{\c@pchk@} | |
389 % This is the code buried into to the reset list. When the reset | |
390 % list is executed in the context of advancing a counter, we call | |
391 % something like | |
392 % \begin{verbatim} | |
393 %\global\c@pchk@{countername}\z@ | |
394 % \end{verbatim} | |
395 % since the reset list expected a counter here instead of some | |
396 % generic command. That is the reason we start off this command by | |
397 % giving \cmd{\global} something to chew on. | |
398 % \begin{macrocode} | |
399 \def\c@pchk@#1{\pp@cl@begin | |
400 % \end{macrocode} | |
401 % Now we fetch the page value corresponding to the not yet adjusted | |
402 % value of the absolute counter to see whether the previous counter | |
403 % advance happened on the same page. | |
404 % \begin{macrocode} | |
405 \pp@fetchctr{#1}\let\next\pp@page | |
406 \addtocounter{pp@a@#1}\@ne | |
407 \pp@fetchctr{#1}% | |
408 % \end{macrocode} | |
409 % We compare the pages for current and last advance of the counter. | |
410 % If they differ, we reset the counter to its starting value. We do | |
411 % the same if the counter has been reset to zero manually, likely by | |
412 % being in the reset list of some other counter. | |
413 % \begin{macrocode} | |
414 \ifcase\ifx\next\pp@page\else\@ne\fi | |
415 \ifnum\value{#1}=\z@\@ne\fi\z@ | |
416 \else | |
417 \setcounter{#1}{\value{pp@r@#1}}% | |
418 \fi | |
419 \pp@writectr\pp@pagectr{#1}{\noexpand\theabspage}} | |
420 % \end{macrocode} | |
421 % \end{macro} | |
422 % \begin{macro}{\pp@writectr} | |
423 % This is the common ending of all pseudo reset counters. It writes | |
424 % out an appropriate command to the |.aux| file with all required | |
425 % information. We try to replicate any sentinel kerns or penalties. | |
426 % \begin{macrocode} | |
427 \def\pp@writectr#1#2#3{\edef\next{% | |
428 \string#1{#2}{\number\value{pp@a@#2}}{#3}{\noexpand\thepage}}% | |
429 \pp@chkvlist | |
430 \dimen@=\lastkern | |
431 \ifdim\dimen@=\z@ \else \unkern\fi | |
432 \count@=\lastpenalty | |
433 \protected@write\@auxout{}{\next}% | |
434 \ifdim\dimen@=\z@ | |
435 \penalty \ifnum\count@<\@M \@M \else \count@ \fi | |
436 \else \kern\dimen@\fi | |
437 \pp@cl@end} | |
438 % \end{macrocode} | |
439 % \end{macro} | |
440 % \begin{macro}{\pp@labeldef} | |
441 % This is a helper macro. | |
442 % \begin{macrocode} | |
443 \def\pp@labeldef#1#2#3#4#5{\@newl@bel{pp@r@#2}{#3}{{#1}{#4}{#5}}} | |
444 % \end{macrocode} | |
445 % \end{macro} | |
446 % | |
447 % \begin{macro}{\pp@pagectr} | |
448 % This is the workhorse for normal per page counters. It is called | |
449 % whenever the |.aux| file is read in and establishes the | |
450 % appropriate information for each counter advancement in a | |
451 % pseudolabel. | |
452 % \begin{macrocode} | |
453 \def\pp@pagectr#1#2#3#4{\@ifundefined{c@pp@a@#1}{}{% | |
454 \addtocounter{pp@a@#1}\@ne | |
455 \expandafter\pp@labeldef\expandafter | |
456 {\number\value{pp@a@#1}}{#1}{#2}{#3}{#4}}} | |
457 % \end{macrocode} | |
458 % \end{macro} | |
459 % \begin{macro}{\c@schk@} | |
460 % This is called for implementing sorted counters. Sorted counters | |
461 % maintain a ``count group'', and the values in each count group are | |
462 % numbered independently from that of other count groups. Whenever | |
463 % a counter is found to have been reset, it will start a new count | |
464 % group. At the end of document, the count group counters need to | |
465 % get reset, too, so that the check for changed |.aux| files will | |
466 % still work. | |
467 % \begin{macrocode} | |
468 \def\c@schk@#1{\pp@cl@begin | |
469 \addtocounter{pp@a@#1}\@ne | |
470 \ifnum\value{#1}=\@ne | |
471 \expandafter\xdef\csname pp@g@#1\endcsname{\number\value{pp@a@#1}}% | |
472 \edef\next{\noexpand\AtEndDocument{\global\let | |
473 \expandafter\noexpand\csname pp@g@#1@\number\value{pp@a@#1}\endcsname | |
474 \relax}}\next | |
475 \fi | |
476 \pp@fetchctr{#1}% | |
477 \ifx\pp@page\@empty | |
478 \else \setcounter{#1}{\pp@label}\fi | |
479 \pp@writectr\pp@spagectr{#1}{\csname pp@g@#1\endcsname}}% | |
480 % \end{macrocode} | |
481 % \end{macro} | |
482 % \begin{macro}{\pp@spagectr} | |
483 % This is the code advancing the respective value of the appropriate | |
484 % count group and assigning the label. | |
485 % \begin{macrocode} | |
486 \def\pp@spagectr#1#2#3#4{\@ifundefined{c@pp@a@#1}{}{% | |
487 \count@0\csname pp@g@#1@#3\endcsname | |
488 \advance\count@\@ne | |
489 \expandafter\xdef\csname pp@g@#1@#3\endcsname{\number\count@}% | |
490 \expandafter\pp@labeldef\expandafter | |
491 {\number\count@}{#1}{#2}{#3}{#4}}} | |
492 % \end{macrocode} | |
493 % \end{macro} | |
494 % \begin{macro}{\c@spchk@} | |
495 % And this finally is the counter advance code for sorted counters | |
496 % per page. Basically, we just use one count group per page. | |
497 % Resetting a counter manually will not introduce a new count group, | |
498 % and it would be hard to decide what to do in case count groups and | |
499 % page positions overlap. | |
500 % \begin{macrocode} | |
501 \def\c@spchk@#1{\pp@cl@begin | |
502 \addtocounter{pp@a@#1}\@ne | |
503 \pp@fetchctr{#1}% | |
504 \ifx\pp@page\@empty | |
505 \else \setcounter{#1}{\pp@label}\fi | |
506 \pp@writectr\pp@ppagectr{#1}{\noexpand\theabspage}} | |
507 % \end{macrocode} | |
508 % \end{macro} | |
509 % \begin{macro}{\pp@ppagectr} | |
510 % \begin{macrocode} | |
511 \def\pp@ppagectr#1#2#3#4{\@ifundefined{c@pp@a@#1}{}{% | |
512 \def\next{#3}% | |
513 \expandafter\ifx\csname pp@page@#1\endcsname\next | |
514 \addtocounter{pp@a@#1}\@ne | |
515 \else | |
516 \setcounter{pp@a@#1}{\value{pp@r@#1}}% | |
517 \fi | |
518 \global\expandafter\let\csname pp@page@#1\endcsname\next | |
519 \expandafter\pp@labeldef\expandafter | |
520 {\number\value{pp@a@#1}}{#1}{#2}{#3}{#4}}} | |
521 % \end{macrocode} | |
522 % \end{macro} | |
523 % \begin{macro}{\@testdef} | |
524 % \LaTeX's current (2007) definition of this macro causes save stack | |
525 % overflow. We fix this by an additional grouping. Delay to the | |
526 % beginning of document to keep Babel happy. | |
527 % \begin{macrocode} | |
528 \AtBeginDocument{% | |
529 \begingroup | |
530 \@testdef{}{undefined}{}% | |
531 \expandafter | |
532 \endgroup | |
533 \ifx\@undefined\relax | |
534 \let\pp@@testdef\@testdef | |
535 \def\@testdef#1#2#3{{\pp@@testdef{#1}{#2}{#3}% | |
536 \if@tempswa\aftergroup\@tempswatrue\fi}}% | |
537 \fi} | |
538 %</style> | |
539 % \end{macrocode} | |
540 % \end{macro} | |
541 % | |
542 % \Finale | |
543 % \endinput | |
544 % Local Variables: | |
545 % mode: doctex | |
546 % TeX-master: "perpage.drv" | |
547 % End: |