diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/page-num.tex')
-rw-r--r-- | Master/texmf-dist/tex/context/base/page-num.tex | 558 |
1 files changed, 558 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/page-num.tex b/Master/texmf-dist/tex/context/base/page-num.tex new file mode 100644 index 00000000000..358a30275fa --- /dev/null +++ b/Master/texmf-dist/tex/context/base/page-num.tex @@ -0,0 +1,558 @@ +%D \module +%D [ file=page-num, % moved here from main-001 +%D version=1997.03.31, +%D title=\CONTEXT\ Core Macros, +%D subtitle=Numbering, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\writestatus{loading}{Context Core Macros / Numbering} + +% todo: {}{}{} ipv ...--...-...-...--... in pag ref + +\unprotect + +% \gotonextsubpage : voor de pagebody +% \subpaginanummer : alleen in de voet/kopregels +% \aantalsubpaginas : alleen in de voet/kopregels + +% \firstsubpage : eerste \realpageno, voor interne doeleinden +% \prevsubpage : vorige \realpageno, voor interne doeleinden +% \nextsubpage : volgende \realpageno, voor interne doeleinden +% \lastsubpage : laatste \realpageno, voor interne doeleinden +% \nofsubpages : laatste subpage (in berekeningen) +% \subpageno : huidige subpage (in berekeningen) + +\newif\ifsubpaging +\newif\ifshowingsubpage + +\definenumber + [\s!subpage] + +\setupnumber + [\s!subpage] + [\c!way=\@@snway] + +% hard to sync +% +% \def\resetsubpagenumber +% {\resetnumber[\s!subpage]% +% \global\subpageno=\rawnumber[\s!subpage]} +% +% better sync + +\newif\ifresettingsubpagenumber + +\def\resetsubpagenumber + {\global\resettingsubpagenumbertrue} + +% so far for sync, see \gotonext... + +\def\dosetupsubpagenumber[#1]% + {\doifelse{#1}\v!reset + \resetsubpagenumber % \resetnumber[\s!subpage] + {\getparameters[\??sn][#1]% + \processaction + [\@@snstate] + [ \v!stop=>\ifsubpaging + \resetsubpagenumber % new, see sync + \else + \subpagingfalse + \fi + \showingsubpagefalse, + \v!start=>\subpagingtrue + \showingsubpagetrue, + \v!none=>\subpagingtrue + \showingsubpagefalse]}} + +\def\numberofsubpages + {\ifshowingsubpage\nofsubpages\else0\fi} + +\def\subpagenumber + {\ifshowingsubpage\the\subpageno\else0\fi} + +\def\setupsubpagenumber + {\dosingleargument\dosetupsubpagenumber} + +\def\newnofsubpages{0} +\def\nofsubpages {0} +\def\firstsubpage {1} +\def\prevsubpage {1} +\def\nextsubpage {1} +\def\lastsubpage {1} + +\def\nextpage {1} +\def\prevpage {1} + +\definetwopasslist\s!subpage + +\def\savenofsubpages + {\ifsubpaging + \showmessage\m!layouts6{\newnofsubpages,\the\subpageno}% + \immediatewriteutilitycommand{\twopassentry{\s!subpage}{\newnofsubpages}{\the\subpageno}}% + \fi} + +\def\setsubpagenumbers + {\iftwopassdatafound + \bgroup + \xdef \nofsubpages {\twopassdata}% + \xdef \firstsubpage {\realfolio}% + \advance\realpageno \nofsubpages + \advance\realpageno \minusone + \xdef \lastsubpage {\realfolio}% + \egroup + \else + \xdef \nofsubpages{0}% + \fi} + +\def\gotonextsubpage % overlapt behoorlijk met realpage macro + {\global\let\checksubpages\relax + \ifresettingsubpagenumber + \resetnumber[\s!subpage]% + \global\resettingsubpagenumberfalse + \fi + \ifsubpaging + \edef\oldsubpage{\the\subpageno}% + \incrementnumber[\s!subpage]% + \global\subpageno\rawnumber[\s!subpage]\relax + \ifnum\subpageno=\plusone + \gettwopassdata\s!subpage + \setsubpagenumbers + \ifnum\oldsubpage>\zerocount + \showmessage\m!layouts6{\newnofsubpages,\oldsubpage}% + \edef\next % \expanded + {\writeutilitycommand% + {\twopassentry% + {\s!subpage}% + {\newnofsubpages}% + {\oldsubpage}}}% + \next + \fi + \doglobal\increment\newnofsubpages\relax + \fi + \setglobalsystemreference\rt!page\v!firstsubpage\firstsubpage + \setglobalsystemreference\rt!page\v!lastsubpage\lastsubpage + \bgroup + \ifnum\realpageno=\firstsubpage\relax + \global\let\prevsubpage\firstsubpage + \setglobalsystemreference\rt!page\v!subbackward\lastsubpage + \else + \xdef\prevsubpage{\realfolio}% + \doglobal\decrement\prevsubpage + \setglobalsystemreference\rt!page\v!subbackward\prevsubpage + \fi + \setglobalsystemreference\rt!page\v!previoussubpage\prevsubpage + \ifnum\realpageno=\lastsubpage\relax + \global\let\nextsubpage\lastsubpage + \setglobalsystemreference\rt!page\v!subforward\firstsubpage + \else + \xdef\nextsubpage{\realfolio}% + \doglobal\increment\nextsubpage + \setglobalsystemreference\rt!page\v!subforward\nextsubpage + \fi + \setglobalsystemreference\rt!page\v!nextsubpage\nextsubpage + \egroup + \fi} + +\def\checksubpages + {\getfromtwopassdata\s!subpage1% + \setsubpagenumbers + \global\let\checksubpages\relax} + +% Omdat \gotonextrealpage gebruik maakt van de hulpfile, +% moet het initialiseren van \realpageno plaatsvinden in +% een later stadium, namelijk zodra referenties worden +% gebruikt (anders gaat het mis op nog niet gedefinieerde +% lijstcommando's e.d.). De eerst aanroep vindt dan ook +% plaats vlak nadat de hulpfile voor de eerste maal is +% ingelezen. + +\countdef\realpageno = 0 \realpageno = 1 +\countdef\userpageno = 1 \userpageno = 1 +\countdef\subpageno = 2 \subpageno = 0 % !! +\countdef\arrangeno = 3 \arrangeno = 0 % !! + +% we don't want conflicts when \pageno is used by other +% packages, like CWEB, so we redefine \pageno + +\newcount\pageno \pageno = 1 + +\def\setuserpageno#1% + {\global\userpageno#1\relax + \global\pageno\userpageno} + +\def\realfolio {\the\realpageno} +\def\folio {\the\userpageno} +\def\firstpage {1} +\def\lastpage {1} +\def\currentpage {\the\realpageno} +\def\lastpagenumber{1} + +\def\gotonextrealpage + {\global\advance\realpageno \plusone\relax + \ifnum\realpageno>\lastpage + \xdef\lastpage{\realfolio}% + \fi + \setglobalsystemreference\rt!page\v!firstpage \firstpage + \setglobalsystemreference\rt!page\v!lastpage\lastpage + \bgroup + \ifnum\realpageno>\plusone + \advance\realpageno \minusone + \xdef\prevpage{\realfolio}% + \setglobalsystemreference\rt!page\v!backward\prevpage + \else + \global\let\prevpage\firstpage + \setglobalsystemreference\rt!page\v!backward\lastpage + \fi + \setglobalsystemreference\rt!page\v!previouspage\prevpage + \egroup + \bgroup + \ifnum\realpageno<\lastpage\relax + \advance\realpageno \plusone + \xdef\nextpage{\realfolio}% + \setglobalsystemreference\rt!page\v!page\nextpage + \setglobalsystemreference\rt!page\v!forward\nextpage + \bgroup + \xdef\nextnextpage{\realfolio}% + \ifodd\realpageno + \setglobalsystemreference\rt!page\v!nextoddpage\nextnextpage + \else + \setglobalsystemreference\rt!page\v!nextevenpage\nextnextpage + \fi + \advance\realpageno \plusone + \xdef\nextnextpage{\realfolio}% + \ifnum\realpageno>\lastpage\relax + %\ifodd\realpageno + % \setglobalsystemreference\rt!page\v!nextoddpage\lastpage + %\else + % \setglobalsystemreference\rt!page\v!nextevenpage\lastpage + %\fi + \else + \ifodd\realpageno + \setglobalsystemreference\rt!page\v!nextoddpage\nextnextpage + \else + \setglobalsystemreference\rt!page\v!nextevenpage\nextnextpage + \fi + \fi + \egroup + \else + \global\let\nextpage\lastpage + \setglobalsystemreference\rt!page\v!page\firstpage + \setglobalsystemreference\rt!page\v!forward\firstpage + \setglobalsystemreference\rt!page\v!nextoddpage\lastpage + \setglobalsystemreference\rt!page\v!nextevenpage\lastpage + \fi + \setglobalsystemreference\rt!page\v!nextpage\realfolio + \egroup} + +\def\checkrealpage + {\global\realpageno\zerocount + \gotonextrealpage + \global\let\checkrealpage\relax} + +\def\savenofpages + {\bgroup + \advance\realpageno \minusone + \savecurrentvalue\lastpage\realfolio + \advance\userpageno \minusone + \savecurrentvalue\lastpagenumber\folio + \egroup} + +\def\totalnumberofpages + {\lastpage} + +\def\setpagecounters + {\setuserpageno{\rawnumber[\s!page]}% + \doifelse\@@snstate\v!stop + {\global\subpageno\zerocount} + {\global\subpageno\rawnumber[\s!subpage]}\relax} + +% Standaard is \count0 in Plain TeX de paginateller. Omwille +% van de afhandeling van lokaal nummeren, definieren we +% echter een eigen nummer. + +\definenumber + [\s!page] + [\c!conversion=\@@nmconversion, + \c!way=\@@nmway, + \c!state=\@@nmstate, + \c!start=1] + +% \@@pnstatus global, but \@@nmstatus local and only start/stop + +\global\let\@@pnstate\@@pnstate + +\def\dosetuppagenumber[#1]% + {\getparameters[\??pn][\c!number=,#1]% + \global\let\@@pnstate\@@pnstate + \doifsomething\@@pnnumber + {\setnumber[\s!page]{\@@pnnumber}% + \setuserpageno{\rawnumber[\s!page]}}% + % this makes starting at an even page possible + \ifnum\realpageno=1 \ifodd\pageno \else + \global\shiftedrealpagenotrue + \fi \fi} + +\def\setuppagenumber + {\dosingleargument\dosetuppagenumber} + +% long time used alternative +% +% \def\verlaagpaginanummer +% {\doifinset{\@@pnstatus}{\v!start,\v!leeg,\v!geen} +% {\decrementnumber[\s!page]% +% \setuserpageno{\rawnumber[\s!page]}}} +% +% \def\verhoogpaginanummer +% {\doifinset{\@@pnstatus}{\v!start,\v!leeg,\v!geen} +% {\incrementnumber[\s!page]% +% \setuserpageno{\rawnumber[\s!page]}}% +% \doifinset{\@@pnstatus}{\v!handhaaf,\v!leeg} +% {\global\let\@@pnstatus\v!start}} +% +% alternative, saves some 3 sec on 10K pages on a 1G machine +% (needed during a test / prelude to installable methods) + +\def\dodecrementpagenumber + {\decrementnumber[\s!page]\setuserpageno{\rawnumber[\s!page]}} + +\def\doincrementpagenumber + {\incrementnumber[\s!page]\setuserpageno{\rawnumber[\s!page]}} + +\def\dosynchronizepagenumber + {\global\let\@@pnstate\v!start} + +\def\verlaagpaginanummer{\getvalue{\??pn-\@@pnstate}} +\def\verhoogpaginanummer{\getvalue{\??pn+\@@pnstate}} + +\letvalue{\??pn-\v!start }\dodecrementpagenumber +\letvalue{\??pn-\v!none }\dodecrementpagenumber +\letvalue{\??pn-\v!empty }\dodecrementpagenumber + +\letvalue{\??pn+\v!start }\doincrementpagenumber +\letvalue{\??pn+\v!none }\doincrementpagenumber +\setvalue{\??pn+\v!empty }{\doincrementpagenumber + \dosynchronizepagenumber} +\letvalue{\??pn+\v!keep}\dosynchronizepagenumber + +% so far + +\def\checkpagecounter + {\checknummer{\s!page}} + +% \getpagestatus +% \ifrightpage als odd/enkelzijdig + +\newif\ifrightpage \rightpagetrue + +\newcounter \nofpagesets + +\definetwopasslist\s!page + +\def\dopagesetreference + {\doglobal\increment\nofpagesets\relax + \edef\writepagref + {\writeutilitycommand + {\twopassentry + {\s!page}% + {\nofpagesets}% + {\noexpand\realfolio}}}% + \writepagref} + +\def\getpagestatus % hierboven gebruiken + {\ifdubbelzijdig + \gettwopassdata\s!page + \iftwopassdatafound \else + \let\twopassdata\realpageno + \fi + \ifodd\twopassdata + \global\rightpagetrue + \else + \global\rightpagefalse + \fi + \dopagesetreference + \else + \global\rightpagetrue + \fi} + +\def\@@nmin {} % kan vervallen (upward compatibility) +\def\@@nmlocation {} % mag {plaats, in} zijn + +\newcounter\@@pagenumberlocation + +\def\do@@plaatspaginanummer#1% + {\ifnum#1=\@@pagenumberlocation\@@plaatspaginanummer\fi} + +\def\dodosetpagenumberlocation#1% tricky because of ...texts + {\increment\@@pagenumberlocation + \ifx\@@nmlocation\empty\else + \def\dododosetpagenumberlocation##1% + {\donetrue + \setevalue{\??tk#1##1}{\noexpand\do@@plaatspaginanummer{\@@pagenumberlocation}}}% + \donefalse + \ExpandFirstAfter\processallactionsinset + [\@@nmlocation] + [ \v!middle=>\dododosetpagenumberlocation{\v!text\c!middletext}, + \v!left=>\dododosetpagenumberlocation{\v!text\c!lefttext}, + \v!right=>\dododosetpagenumberlocation{\v!text\c!righttext}, + \v!inleft=>\dododosetpagenumberlocation{\v!margin\c!lefttext}, + \v!inright=>\dododosetpagenumberlocation{\v!margin\c!righttext}, + \v!inmargin=>\dododosetpagenumberlocation{\v!margin\ifdubbelzijdig\c!margintext\else\c!righttext\fi}, + \v!margin=>\dododosetpagenumberlocation{\v!margin\ifdubbelzijdig\c!margintext\else\c!righttext\fi}, + \v!atmargin=>\dododosetpagenumberlocation{\v!text\c!marginedgetext}, + \v!marginedge=>\dododosetpagenumberlocation{\v!text\c!marginedgetext}]% + \ifdone \else + \dododosetpagenumberlocation{\v!text\c!middletext}% default + \fi + \fi} + +\def\dosetpagenumberlocation + {\ExpandBothAfter\doifinsetelse\v!header{\@@nmlocation,\@@nmin} + {\dodosetpagenumberlocation\v!header} + {\dodosetpagenumberlocation\v!footer }} + +\def\dosetuppagenumbering[#1]% + {\getparameters[\??nm][#1]% + \preparepageprefix\??nm + \enkelzijdigfalse + \dubbelzijdigfalse + \ExpandFirstAfter\processallactionsinset + [\@@nmalternative] + [ \v!singlesided=>\enkelzijdigtrue, + \v!doublesided=>\dubbelzijdigtrue]% + \ifx\trackingmarginnotestrue\undefined\else + \ifdubbelzijdig + \trackingmarginnotestrue + \else + \trackingmarginnotesfalse + \fi + \fi + \dosetpagenumberlocation + \recalculatebackgrounds + \recalculatelogos} + +\def\setuppagenumbering + {\dosingleempty\dosetuppagenumbering} + +\let\stelnummeringin\setuppagenumbering + +% listig: hangt af van \@@kolijst + +% erg fout +% +% \def\preparepageprefix#1% +% {\def\dopreparepageprefix##1% +% {\doifvalue{#1##1\c!nummer}{\v!ja} +% {\setvalue{#1\getvalue{\??by##1}\c!nummer}{\v!ja}}}% +% \processcommacommand[\@@kolijst]\dopreparepageprefix} +% +% nog fouter +% +% \def\preparepageprefix#1% +% {\def\dopreparepageprefix##1% +% {\doifelsevalue{#1##1\v!nummer}{\v!ja} % v +% {\setvalue{#1\getvalue{\??by##1}\v!nummer}{\v!ja}} % v +% {\setvalue{#1\getvalue{\??by##1}\v!nummer}{\v!nee}}}% % v +% \processcommacommand[\@@kolijst]\dopreparepageprefix} +% +% best, beware, chapter (yes) can be followed by title (no) + +\def\preparepageprefix#1% + {\def\dopreparepageprefix##1% + {\letvalue{#1\getvalue{\??by##1}\v!number}\v!no}% %v + \rawprocesscommalist[\@@kolist]\dopreparepageprefix + \def\dopreparepageprefix##1% + {\doifvalue{#1##1\v!number}\v!yes %v + {\letvalue{#1\getvalue{\??by##1}\v!number}\v!yes}}% + \rawprocesscommalist[\@@kolist]\dopreparepageprefix} + +\def\dodopageprefix#1% uti seperator -- + {\let\normaluchar\uchar \let\uchar\relax % ugly but needed + \doifelsevalue{\pageprefixtype#1\v!number}\v!yes % \v! and no \c! + {\edef\preprefix {\@@filterheadpart[\postprefix]}% + \edef\postprefix{\@@filtertailpart[\postprefix]}% + \let\uchar\normaluchar % ugly but needed + \ifx\preprefix\empty \else + \ifx\preprefix\zerocountervalue\else + \preprefix\@@nmnumberseparator + \fi + \fi} + {\edef\postprefix{\@@filtertailpart[\postprefix]}% + \let\uchar\normaluchar}} % ugly but needed + +\def\dopageprefix#1% + {\dodopageprefix{#1}% + \donexttracklevel{#1}} + +\def\pageprefix#1[#2]% + {\bgroup + \edef\pageprefixtype{#1}% + \edef\postprefix{\@@filternumberpart[#2]}% + \let\donexttrackcommando\dopageprefix + \donexttrackcommando\firstsection + \egroup} + +%D It was Marco Kuhlmann who uncovered the missing strut. This +%D was a pretty old bug kind of covered up by the fact that non +%D oldstyle numbers are about as high as strutheight. Rather +%D interesting that it went unnoticed for so long. + +\unexpanded\def\@@plaatspaginanummer % called in empty tests + {\doif{\@@nmstate\@@pnstate}{\v!start\v!start} + {{\doif\@@nmstrut\v!yes\strut + \@@nmcommand{\doattributes\??nm\c!style\c!color{\completepagenumber}}}}} + +\def\@@plaatspaginascheider% still used ? + {\doif{\@@nmstate\@@pnstate}{\v!start\v!start}\@@nmtextseparator} + +\def\userfolio {\convertednumber[\s!page]} % naast realfolio +\def\pagenumber{\userfolio} + +\def\pageprefixes + {\let\donexttrackcommando\dopageprefixes + \donexttrackcommando\firstsection} + +\def\dopageprefixes#1% + {\doifvalue{\??nm#1\v!number}\v!yes % v + {\ifnum\countervalue{\??se#1}>\zerocount + \getvalue{#1\c!number}\@@nmnumberseparator + \fi}% + \doifsomething\@@nmtext{\@@nmtext\@@nmnumberseparator}% strange option, what was the purpose of text? + \donexttracklevel{#1}} + +\unexpanded\def\completepagenumber + {\doif{\@@nmstate\@@pnstate}{\v!start\v!start} + {\@@nmleft\labeltexts\v!pagenumber{\pageprefixes\pagenumber}\@@nmright}} + +\unexpanded\def\placepagenumber + {\doif{\@@nmstate\@@pnstate}{\v!start\v!start} + {\labeltexts\v!pagenumber{\pagenumber}}} + +% Nog een variant; wat is een goeie naam? + +% \unexpanded\def\placexxpagenumber +% {\@@plaatspaginanummer} + +% \def\translatednumber[#1::#2::#3]{#3} + +\def\translatednumber{\@@filterpagepart} + +\unexpanded\def\referencepagenumber[#1]% + {\doifelsenothing{#1}{?}% + {\preparepageprefix\??rf + \pageprefix\??rf[#1]\translatednumber[#1]}} + +\setuppagenumber + [\c!state=\v!start, + \c!number=1] + +\setupsubpagenumber + [\c!way=\v!by\v!part, + \c!state=\v!stop] + +\protect \endinput |