strc-pag.mkxl /size: 19 Kb    last modification: 2023-12-21 09:44
1%D \module
2%D   [       file=strc-pag,
3%D        version=2008.10.20,
4%D          title=\CONTEXT\ Structure Macros,
5%D       subtitle=Pagenumbering,
6%D         author=Hans Hagen,
7%D           date=\currentdate,
8%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9%C
10%C This module is part of the \CONTEXT\ macro||package and is
11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12%C details.
13
14\writestatus{loading}{ConTeXt Structure Macros / Pagenumbering}
15
16\registerctxluafile{strc-pag}{}
17
18\unprotect
19
20\startcontextdefinitioncode
21
22% Allocation:
23
24\ifdefined\realpageno    \else \permanent\countdef\realpageno    \zerocount  \fi \realpageno    \plusone
25\ifdefined\userpageno    \else \permanent\countdef\userpageno    \plusone    \fi \userpageno    \plusone
26\ifdefined\subpageno     \else \permanent\countdef\subpageno     \plustwo    \fi \subpageno     \plusone % was \zerocount but that doesn't work well with bytext
27\ifdefined\arrangeno     \else \permanent\countdef\arrangeno     \plusthree  \fi \arrangeno     \zerocount % !
28\ifdefined\pagenoshift   \else \permanent\countdef\pagenoshift   \plusfour   \fi \pagenoshift   \zerocount % !
29\ifdefined\lastpageno    \else \permanent\countdef\lastpageno    \plusfive   \fi \lastpageno    \zerocount % !
30\ifdefined\lastuserpageno\else \permanent\countdef\lastuserpageno\plussix    \fi \lastuserpageno\zerocount % !
31\ifdefined\lastsubpageno \else \permanent\countdef\lastsubpageno \plusseven  \fi \lastsubpageno \zerocount % !
32
33\ifdefined\pageno \else \aliased\let\pageno\userpageno \fi
34
35\permanent\def\realfolio{\the\realpageno}
36\permanent\def\userfolio{\the\userpageno}
37\permanent\def\subfolio {\the\subpageno }
38\permanent\def\lastfolio{\the\lastpageno}
39
40\newtoks\everyinitializepagecounters
41
42\permanent\protected\def\initializepagecounters
43  {\expand\everyinitializepagecounters}
44
45\appendtoks
46    \initializepagecounters
47\to \everyjob
48
49% Page numbers are kind of independent of each other and therefore they
50% all get their own counter. After all, it's easier to combine them in
51% a pseudo counterset than to deal with a complex set itself.
52
53% \defineprefixset   [mine][section-1,section-2]
54% \defineseparatorset[mine][:]
55%
56% \setupuserpagenumber
57%   [way=bypart,
58%    prefix=yes,
59%    prefixset=mine,
60%    prefixseparatorset=mine]
61
62% \defineconversionset[frontpart:pagenumber][][romannumerals]
63% \defineconversionset[bodypart:pagenumber] [][numbers]
64%
65% \setupuserpagenumber[way=byblock]
66% \setupuserpagenumber[way=bychapter]
67% \setupuserpagenumber[numberconversionset=pagenumber]
68%
69% \starttext
70%     \startfrontmatter
71%         \completecontent[criterium=all]
72%         \chapter{tufte} \section{one} \input tufte \page \section{two} \input tufte \page
73%         \chapter{tufte} \section{one} \input tufte \page \section{two} \input tufte \page
74%     \stopfrontmatter
75%     \startbodymatter
76%         \chapter{knuth} \section{one} \input knuth \page \section{two} \input knuth \page \section{three} \input knuth \page
77%         \chapter{knuth} \section{one} \input knuth \page \section{two} \input knuth \page \section{three} \input knuth \page
78%     \stopbodymatter
79% \stoptext
80
81\definecounter[\s!realpage][\c!prefix=\v!no,\c!start=\plusone,\c!prefixsegments=,\s!counter=realpageno,\c!method=\v!page]
82\definecounter[\s!userpage][\c!prefix=\v!no,\c!start=\plusone,\c!prefixsegments=,\s!counter=userpageno,\c!method=\v!page]
83\definecounter[\s!subpage] [\c!prefix=\v!no,\c!start=\plusone,\c!prefixsegments=,\s!counter=subpageno, \c!method=\v!page]
84
85\newtoks\everysetuprealpagenumber % todo: set state: none, start, stop, reset
86\newtoks\everysetupuserpagenumber % todo: set state: none, start, stop, reset
87\newtoks\everysetupsubpagenumber  % todo: set state: none, start, stop, reset
88
89\let\m_strc_pagenumbers_state_old\zerocount
90\let\m_strc_pagenumbers_state_new\zerocount
91
92\def\strc_pagenumbers_save_state#1{\edef\m_strc_pagenumbers_state_old{\namedcounterparameter#1\c!state}}
93
94\permanent\tolerant\protected\def\setuprealpagenumber[#S#1]{\strc_pagenumbers_save_state\s!realpage\setupcounter[\s!realpage][#1]\expand\everysetuprealpagenumber}
95\permanent\tolerant\protected\def\setupuserpagenumber[#S#1]{\strc_pagenumbers_save_state\s!userpage\setupcounter[\s!userpage][#1]\expand\everysetupuserpagenumber}
96\permanent\tolerant\protected\def\setupsubpagenumber [#S#1]{\strc_pagenumbers_save_state\s!subpage \setupcounter[\s!subpage ][#1]\expand\everysetupsubpagenumber }
97
98\permanent\protected\def\resetrealpagenumber {} % not permitted
99\permanent\protected\def\resetuserpagenumber {\strc_counters_reset\s!userpage}
100\permanent\protected\def\resetsubpagenumber  {\strc_counters_reset\s!subpage}
101
102\appendtoks
103    \strc_counters_set\s!realpage\realpageno
104    \strc_counters_set\s!userpage\userpageno
105    \strc_counters_set\s!subpage \subpageno
106    \lastpageno    \lastcountervalue[\s!realpage]\relax
107    \lastuserpageno\lastcountervalue[\s!userpage]\relax
108    \lastsubpageno \lastcountervalue[\s!subpage ]\relax
109\to \everyinitializepagecounters
110
111\aliased\let\setuppagenumber\setupuserpagenumber
112\aliased\let\resetpagenumber\resetuserpagenumber
113
114% invisible =
115
116\def\strc_pagenumbers_page_state_save % \normalexpanded?
117  {\clf_savepagedata
118     {
119        prefix        {\namedcounterparameter\s!userpage\c!prefix}
120        separatorset  {\namedcounterparameter\s!userpage\c!prefixseparatorset}
121        conversion    {\namedcounterparameter\s!userpage\c!prefixconversion}
122        conversionset {\namedcounterparameter\s!userpage\c!prefixconversionset}
123        set           {\namedcounterparameter\s!userpage\c!prefixset}
124        segments      {\namedcounterparameter\s!userpage\c!prefixsegments}
125        connector     {\namedcounterparameter\s!userpage\c!prefixconnector}
126     }{
127        conversion    {\namedcounterparameter\s!userpage\c!numberconversion}
128        conversionset {\namedcounterparameter\s!userpage\c!numberconversionset}
129        starter       {\namedcounterparameter\s!userpage\c!numberstarter}
130        stopper       {\namedcounterparameter\s!userpage\c!numberstopper}
131     }{
132        viewerprefix  {\namedcounterparameter\s!userpage\c!viewerprefix}
133        state         {\namedcounterparameter\s!userpage\c!state}
134     }%
135   \relax}
136
137\prependtoks
138    \strc_pagenumbers_page_state_save
139\to \everyshipout
140
141\installcorenamespace{pagestatestack} % no level yet
142
143\protected\def\strc_pagenumbers_page_state_push{\xdefcsname\??pagestatestack\c!state\endcsname{\namedcounterparameter\s!userpage\c!state}}
144\protected\def\strc_pagenumbers_page_state_pop {\normalexpanded{\setuppagenumber[\c!state=\csname\??pagestatestack\c!state\endcsname]}}
145
146\setuppagenumber
147  [\c!way=\v!by\v!text,
148   \c!prefix=\v!no,
149   \c!prefixset=\v!part,
150   \c!prefixconnector=\endash,
151   \c!state=\v!start]
152
153\setupsubpagenumber
154  [\c!way=\v!by\v!part,
155   \c!state=\v!start] % was stop but start looks better in logging
156
157% Counters
158
159%permanent\def\firstrealpagenumber{\convertedcounter[\s!realpage][\c!type=\v!first]}
160%permanent\def\firstuserpagenumber{\convertedcounter[\s!userpage][\c!type=\v!first]}
161%permanent\def\firstsubpagenumber {\convertedcounter[\s!subpage ][\c!type=\v!first]}
162
163%permanent\def\lastrealpagenumber {\convertedcounter[\s!realpage][\c!type=\v!last]}
164%permanent\def\lastuserpagenumber {\convertedcounter[\s!userpage][\c!type=\v!last]}
165%permanent\def\lastsubpagenumber  {\convertedcounter[\s!subpage ][\c!type=\v!last]}
166
167%permanent\def\prevrealpagenumber {\convertedcounter[\s!realpage][\c!type=\v!previous]}
168%permanent\def\prevuserpagenumber {\convertedcounter[\s!userpage][\c!type=\v!previous]}
169%permanent\def\prevsubpagenumber  {\convertedcounter[\s!subpage ][\c!type=\v!previous]}
170
171%permanent\def\nextrealpagenumber {\convertedcounter[\s!realpage][\c!type=\v!next]}
172%permanent\def\nextuserpagenumber {\convertedcounter[\s!userpage][\c!type=\v!next]}
173%permanent\def\nextsubpagenumber  {\convertedcounter[\s!subpage ][\c!type=\v!next]}
174
175\permanent\def\firstrealpage{\strc_counters_first\s!realpage}
176\permanent\def\firstuserpage{\strc_counters_first\s!userpage}
177\permanent\def\firstsubpage {\strc_counters_first\s!subpage }
178
179\permanent\def\prevrealpage {\strc_counters_prev \s!realpage}
180\permanent\def\prevuserpage {\strc_counters_prev \s!userpage}
181\permanent\def\prevsubpage  {\strc_counters_prev \s!subpage }
182
183\permanent\def\nextrealpage {\strc_counters_next \s!realpage}
184\permanent\def\nextuserpage {\strc_counters_next \s!userpage}
185\permanent\def\nextsubpage  {\strc_counters_next \s!subpage }
186
187\permanent\def\lastrealpage {\strc_counters_last \s!realpage}
188\permanent\def\lastuserpage {\strc_counters_last \s!userpage}
189\permanent\def\lastsubpage  {\strc_counters_last \s!subpage }
190
191\aliased\let\firstpage\firstrealpage
192\aliased\let\prevpage \prevrealpage
193\aliased\let\nextpage \nextrealpage
194\aliased\let\lastpage \lastrealpage
195
196% Compatibility counters:
197
198\permanent\def\nofrealpages {\lastrealpage} \permanent\def\totalnumberofpages{\lastrealpage}
199\permanent\def\nofuserpages {\lastuserpage} \permanent\def\lastpagenumber    {\lastuserpage}
200\permanent\def\nofsubpages  {\lastsubpage }
201
202% Renderers:
203
204\permanent\def\pagenumber         {\strc_counters_raw\s!userpage}
205\permanent\def\prefixedpagenumber {\directconvertedcounter\s!userpage\empty} % \userpagenumber
206
207\permanent\def\realpagenumber     {\directconvertedcounter\s!realpage\empty}
208\permanent\def\userpagenumber     {\directconvertedcounter\s!userpage\empty}
209\permanent\def\subpagenumber      {\directconvertedcounter\s!subpage \empty}
210
211\permanent\def\firstrealpagenumber{\directconvertedcounter\s!realpage\v!first}
212\permanent\def\firstuserpagenumber{\directconvertedcounter\s!userpage\v!first}
213\permanent\def\firstsubpagenumber {\directconvertedcounter\s!subpage \v!first}
214
215\permanent\def\lastrealpagenumber {\directconvertedcounter\s!realpage\v!last}
216\permanent\def\lastuserpagenumber {\directconvertedcounter\s!userpage\v!last}
217\permanent\def\lastsubpagenumber  {\directconvertedcounter\s!subpage \v!last}
218
219\permanent\def\prevrealpagenumber {\directconvertedcounter\s!realpage\v!previous}
220\permanent\def\prevuserpagenumber {\directconvertedcounter\s!userpage\v!previous}
221\permanent\def\prevsubpagenumber  {\directconvertedcounter\s!subpage \v!previous}
222
223\permanent\def\nextrealpagenumber {\directconvertedcounter\s!realpage\v!next}
224\permanent\def\nextuserpagenumber {\directconvertedcounter\s!userpage\v!next}
225\permanent\def\nextsubpagenumber  {\directconvertedcounter\s!subpage \v!next}
226
227\protected\def\strc_pagenumbers_decrement_counters % only at the end
228   {\strc_counters_decrement\s!realpage
229    \strc_counters_decrement\s!userpage
230    \strc_counters_decrement\s!subpage}
231
232\protected\def\strc_pagenumbers_increment_counters
233  {\incrementpagenumber
234   \incrementsubpagenumber}
235
236\appendtoks
237    \strc_pagenumbers_decrement_counters
238\to \everygoodbye
239
240\newinteger\c_strc_subpage_first_real \c_strc_subpage_first_real\plusone
241
242\appendtoks
243   \ifcase\subpageno\relax
244     \global\c_strc_subpage_first_real\realpageno
245   \or
246     \global\c_strc_subpage_first_real\realpageno
247   \fi
248\to \everybeforepagebody
249
250\permanent\def\therealsubpageno#1% new helper
251  {\the\numexpr\c_strc_subpage_first_real+#1+\minusone\relax}
252
253% Equivalents (compatibility):
254%
255% todo: maybe leave lastpage etc lua calls
256
257\permanent\def\realpage{\the\realpageno}
258\permanent\def\userpage{\the\userpageno}
259\permanent\def\subpage {\the\subpageno}
260
261% Hooks:
262
263\permanent\def\currentpage{\the\realpageno}% rather useless
264
265\appendtoks
266    \ifnum\realpageno>\lastpage \enforced\glet\lastpage\lastrealpage \fi
267\to \everyinitializepagecounters
268
269% States:
270
271\newconditional\layoutisdoublesided % already defined: \newif\ifdoublesided
272\newconditional\layoutissinglesided % already defined: \newif\ifsinglesided
273
274% Realpage and subpage numbers:
275
276\permanent\protected\def\setnextrealpageno{\global\realpageno\strc_counters_incremented\s!realpage\relax}
277\permanent\protected\def\setnextsubpageno {\global\subpageno \strc_counters_incremented\s!subpage \relax}
278
279% Page numbers: (can move to lua) ... inconsistent names
280
281\installcorenamespace{pagenumberinc}
282\installcorenamespace{pagenumberdec}
283
284\protected\def\strc_pagenumbers_decrement_userpage{\global\userpageno\strc_counters_decremented\s!userpage\relax}
285\protected\def\strc_pagenumbers_increment_userpage{\global\userpageno\strc_counters_incremented\s!userpage\relax}
286
287\permanent\protected\def\decrementsubpagenumber{\global\subpageno \strc_counters_decremented\s!subpage \relax}
288\permanent\protected\def\incrementsubpagenumber{\global\subpageno \strc_counters_incremented\s!subpage \relax}
289
290\protected\def\strc_pagenumbers_synchronize_userpage{\global\c_strc_pagenumbers_state_userpage\plustwo} % start and visible
291
292\permanent\protected\def\decrementpagenumber{\csname\??pagenumberdec\namedcounterparameter\s!userpage\c!state\endcsname}
293\permanent\protected\def\incrementpagenumber{\csname\??pagenumberinc\namedcounterparameter\s!userpage\c!state\endcsname}
294
295\letcsname\??pagenumberdec\v!start\endcsname\strc_pagenumbers_decrement_userpage
296\letcsname\??pagenumberdec\v!none \endcsname\strc_pagenumbers_decrement_userpage
297\letcsname\??pagenumberdec\v!empty\endcsname\strc_pagenumbers_decrement_userpage
298
299\letcsname\??pagenumberinc\v!start\endcsname\strc_pagenumbers_increment_userpage
300\letcsname\??pagenumberinc\v!none \endcsname\strc_pagenumbers_increment_userpage
301\defcsname\??pagenumberinc\v!empty\endcsname{\strc_pagenumbers_increment_userpage\strc_pagenumbers_synchronize_userpage}
302\letcsname\??pagenumberinc\v!keep \endcsname\strc_pagenumbers_synchronize_userpage
303
304% Setup general page numbering
305
306\installcorenamespace{pagenumbering}
307
308\installdirectcommandhandler \??pagenumbering {pagenumbering}
309
310% some day ifsinglesided and ifdoublesided will become obsolete
311
312\newtoks\everysidedswitch
313
314\appendtoks
315   \singlesidedfalse \layoutisdoublesided\conditionalfalse
316   \doublesidedfalse \layoutissinglesided\conditionalfalse
317   \resetsystemmode\v!singlesided
318   \resetsystemmode\v!doublesided
319   \processallactionsinset
320     [\directpagenumberingparameter\c!alternative]%
321     [ \v!singlesided=>\setsystemmode\v!singlesided\singlesidedtrue\layoutissinglesided\conditionaltrue,
322       \v!doublesided=>\setsystemmode\v!doublesided\doublesidedtrue\layoutisdoublesided\conditionaltrue]%
323   \expand\everysidedswitch
324   \pageduplexmode
325     \ifsinglesided
326       \ifdoublesided\plustwo\else\zerocount\fi
327     \else
328       \ifdoublesided\plusone\else\zerocount\fi
329     \fi
330   \page_backgrounds_recalculate
331   \strc_pagenumbers_set_location
332\to \everysetuppagenumbering
333
334\ifdefined \page_backgrounds_recalculate \else
335    \let\page_backgrounds_recalculate\relax
336\fi
337
338\ifdefined \strc_pagenumbers_set_location \else
339    \let\strc_pagenumbers_set_location\relax
340\fi
341
342% \protected\def\strc_pagenumbers_flush_final_page
343%   {\edef\p_strc_pagenumbers_page{\directpagenumberingparameter\c!page}%
344%    \ifempty\p_strc_pagenumbers_page \else
345%      \ifx\p_strc_pagenumbers_page\v!no \else
346%        \page[\p_strc_pagenumbers_page]%
347%      \fi
348%    \fi}
349
350\protected\def\strc_pagenumbers_flush_final_page
351  {\edef\p_strc_pagenumbers_page{\directpagenumberingparameter\c!page}%
352   \ifempty\p_strc_pagenumbers_page
353     % nothing
354   \orelse\ifx\p_strc_pagenumbers_page\v!no
355     % nothing
356   \else
357     \page[\p_strc_pagenumbers_page]%
358   \fi}
359
360% The numbered location handler is there because we need to be downward
361% compatible. So, in fact there can be multiple handlers active at the
362% same time, but only the current one does something.
363
364% Rendering:
365
366\protected\def\strc_pagenumbers_place_location
367  {\ifnum\c_strc_pagenumbers_state_userpage=\plustwo
368     \ifnum\c_strc_pagenumbers_state=\plusone
369        \ifcstok{\directpagenumberingparameter\c!strut}\v!yes
370          \strut
371        \fi
372        \begingroup
373        \usepagenumberingstyleandcolor\c!style\c!color
374        \directpagenumberingparameter\c!command
375          {\directpagenumberingparameter\c!left
376           \labeltexts\v!pagenumber\prefixedpagenumber
377           \directpagenumberingparameter\c!right}%
378        \endgroup
379     \fi
380   \fi}
381
382\permanent\protected\def\completepagenumber
383  {\ifnum\c_strc_pagenumbers_state_userpage=\plustwo
384     \ifnum\c_strc_pagenumbers_state=\plusone
385        \directpagenumberingparameter\c!left
386        \labeltexts\v!pagenumber\prefixedpagenumber
387        \directpagenumberingparameter\c!right
388     \fi
389   \fi}
390
391\permanent\protected\def\placepagenumber
392  {\ifnum\c_strc_pagenumbers_state_userpage=\plustwo
393     \ifnum\c_strc_pagenumbers_state=\plusone
394        \labeltexts\v!pagenumber\pagenumber
395     \fi
396   \fi}
397
398\permanent\protected\def\referencepagenumber[#1]%
399  {\ifempty{#1}?\fi}
400
401% The numbered location handler is there because we need to be downward
402% compatible. So, in fact there can be multiple handlers active at the
403% same time, but only the current one does something.
404
405\setnewconstant\c_strc_pagenumbers_state_realpage\plustwo % counter state : 0=stop, 1=start, 2=start and visible
406\setnewconstant\c_strc_pagenumbers_state_userpage\plustwo % counter state : 0=stop, 1=start, 2=start and visible
407\setnewconstant\c_strc_pagenumbers_state_subpage \plustwo % counter state : 0=stop, 1=start, 2=start and visible
408\setnewconstant\c_strc_pagenumbers_state         \plusone % general number: 0=invisible, 1=visible
409
410\protected\def\strc_pagenumbers_check_state_change#1#2%
411  {\edef\m_strc_pagenumbers_state_new{\namedcounterparameter#1\c!state}%
412   \ifx\m_strc_pagenumbers_state_new\m_strc_pagenumbers_state_old \else
413     #2\ifx\m_strc_pagenumbers_state_new\v!start\plustwo\else\zerocount\fi
414   \fi}
415
416\appendtoks % todo: set state: none, start, stop, reset
417    \strc_pagenumbers_check_state_change\s!realpage\c_strc_pagenumbers_state_realpage
418\to \everysetuprealpagenumber
419
420\appendtoks % todo: set state: none, start, stop, reset
421    \strc_pagenumbers_check_state_change\s!userpage\c_strc_pagenumbers_state_userpage
422\to \everysetupuserpagenumber
423
424\appendtoks % todo: set state: none, start, stop, reset
425    \strc_pagenumbers_check_state_change\s!subpage\c_strc_pagenumbers_state_subpage
426\to \everysetupsubpagenumber
427
428\appendtoks % todo: set state: none, start, stop, reset
429    \ifcstok{\directpagenumberingparameter\c!state}\v!start
430      \c_strc_pagenumbers_state\plusone
431    \else
432      \c_strc_pagenumbers_state\zerocount
433    \fi
434\to \everysetuppagenumbering
435
436% Done
437
438% \c!way=\v!by\v!part
439% \c!text=
440% \v!chapter\v!number=\v!no
441% \v!part\v!number=\v!yes
442% \c!numberseparator=--
443% \c!conversion=\v!numbers
444
445\setuppagenumbering
446  [\c!alternative=\v!singlesided,
447   \c!location={\v!header,\v!middle},
448   \c!width=, % in geval van \v!marginedge
449   \c!left=,
450   \c!right=,
451   \c!page=\v!last,
452   \c!textseparator=\tfskip,
453   \c!state=\v!start,
454   \c!command=,
455   \c!strut=\v!yes,
456   \c!style=, % empty, otherwise conflict
457   \c!color=]
458
459% just for downward compatbility
460
461\appendtoks
462    \edef\scratchstringone{\namedcounterparameter\s!userpage\c!number}%
463    \ifempty\scratchstringone \else
464      \normalexpanded{\setuppagenumber[\c!start=\scratchstringone,\c!number=]}%
465      \userpageno\strc_counters_raw\s!userpage
466    \fi
467\to \everysetupuserpagenumber % todo: set state: none, start, stop, reset
468
469\appendtoks
470    \edef\scratchstringone{\namedcounterparameter\s!subpage\c!number}%
471    \ifempty\scratchstringone \else
472      \normalexpanded{\setupsubpagenumber[\c!start=\scratchstringone,\c!number=]}%
473      \subpageno\strc_counters_raw\s!subpage\relax
474    \fi
475\to \everysetupsubpagenumber % todo: set state: none, start, stop, reset
476
477% \setuplayout[width=300pt,backspace=4cm]
478% \setuppagenumbering [alternative=doublesided]
479% \setupuserpagenumber[start=2]
480% \starttext \dorecurse{20}{\input knuth \par} \stoptext
481
482\protected\def\strc_pagenumbers_check_change_shift
483  {\userpageno\strc_counters_raw\s!userpage\relax
484   \ifnum\realpageno=\plusone
485     \ifodd\userpageno
486     \else
487       \global\pagenoshift\plusone
488     \fi
489   \fi}
490
491\appendtoks % todo: set state: none, start, stop, reset
492    % this makes starting at an even page possible
493    \strc_pagenumbers_check_change_shift
494\to \everysetupuserpagenumber
495
496\appendtoks % todo: set state: none, start, stop, reset
497    % this makes starting at an even page possible
498    \strc_pagenumbers_check_change_shift
499\to \everysetuppagenumbering
500
501\initializepagecounters
502
503\stopcontextdefinitioncode
504
505\protect \endinput
506