%D \module %D [ file=strc-des, %D version=1997.03.31, %D title=\CONTEXT\ Structure Macros, %D subtitle=Descriptions, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %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 Structure Macros / Descriptions} %D In order to be more flexible with theorems Aditya Mahajan added %D support for titles and endsymbols. At the same time we some more %D flexible support for inheriting numbers was added. %D \startbuffer %D \defineenumeration[one] %D \defineenumeration[two] [one] %D \defineenumeration[three] [number=one,style=slanted] %D \defineenumeration[four] [three] %D \defineenumeration[five] [three] [number=five] %D %D \startone test test 1 \stopone %D \starttwo test test 2 \stoptwo %D \startthree test test 3 \stopthree %D \startfour test test 4 \stopfour %D \startfive test test 1 \stopfive %D \stopbuffer %D %D \typebuffer \start \getbuffer \stop \unprotect % Dit kan en moet dus anders: % % \start... : \vbox\bgroup % \stop... : \egroup % llap enz. % geen indent! % % enz. enz. % % Op die manier is meer mogelijk en worden \par's geskipt. % % De macro \??dd#1\s!do\c!commando levert de koppeling tussen % \doornummeren en \doordefinieren. Deze constructie is nodig % omdat doornummeren geen argument heeft en omdat subnummers % niet worden genest binnen het hogere niveau. % % herimplementeren met \nextbox en \unhbox\unvbox % list and titles are experiental % % \definedescription[test] [location=left,hang=4,headalign={right},distance=1em,list=test] % \defineenumeration[lemma][title=yes,right=:,textdistance=1em, location=top, titlestyle=\bs,list=lemma] % \defineenumeration[ammel][title=yes,right=:,textdistance=.5em,location=left,titlestyle=\it,width=9em] % % \placelist[enumeration:lemma] % \placelist[description:test][width=0pt] % % \starttest {something something something} \input zapf \stoptest % \startlemma {with a title of a certain length} \input tufte \stoplemma % \startammel {with a title} \input zapf \stopammel % % \defineenumeration[lemma][...] % \defineenumeration[titledlemma][lemma][title=yes,right=:,text=lemma,list=lemma] \newbox\@@descriptionbox \def\descriptionparameter#1{\csname\??dd\currentdescription#1\endcsname} \def\@@descriptionhandler{\descriptionparameter{\s!do\c!command}} % \def\normal@@descriptionhandler[#1]#2#3% % {\doattributes % {\??dd\currentdescription}\c!headstyle\c!headcolor % {\descriptionparameter\c!command{#3}}% NAAR BUITENSTE NIVEAU ! % \rawreference\s!def{#1}{#2}} % brrr moet in #4 \def\normal@@descriptionhandler[#1]#2#3% {\doattributes {\??dd\currentdescription}\c!headstyle\c!headcolor {\descriptionparameter\c!command{#3}}% NAAR BUITENSTE NIVEAU ! \doifsomething{\descriptionparameter\c!list} {\dowritetolist {\descriptionparameter\c!type:\descriptionparameter\c!list} {}{#2}{\currentdescription}}% % beware: with footnotes #2 can be something messy but then #1 is % empty anyway, so we have an extra safeguard \doifsomething{#1}{\rawreference\s!def{#1}{#2}}} % brrr moet in #4 \setvalue{@@description\v!left}% {\@@descriptionhang\@@descriptionleftpure\@@descriptionlefthang} \setvalue{@@description\v!right}% {\@@descriptionhang\@@descriptionrightpure\@@descriptionrighthang} \def\@@descriptionhang#1#2% {\processaction [\descriptionparameter\c!hang] [ \v!none=>\let\next#1,% 0=>\let\next#1,% \s!unknown=>\let\next#2,% \s!default=>\let\next#1]% \next} \def\@@descriptionleftpure[#1]#2% {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}% \noindent\ignorespaces \leftskip\@@leftdescriptionskip \rightskip\@@rightdescriptionskip \advance\leftskip \!!widtha \@@makedescriptionpurebox\raggedright \advance\leftskip \!!widthb \llap {\hbox to \leftskip {\hskip\@@leftdescriptionskip \copy\@@descriptionbox\hss}}% \@@dodescription} \def\@@descriptionrightpure[#1]#2% {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}% \noindent\ignorespaces \leftskip\@@leftdescriptionskip \rightskip\@@rightdescriptionskip \advance\rightskip \!!widtha \@@makedescriptionpurebox\raggedleft \rlap {\hskip\hsize \hskip-\leftskip \hskip-\rightskip \copy\@@descriptionbox \hskip\@@rightdescriptionskip}% \advance\rightskip \!!widthb \@@dodescription} \def\@@makedescriptionpurebox#1% {\setbox\@@descriptionbox\vtop {\dontcomplain \hsize\!!widtha \leftskip\zeropoint \rightskip\zeropoint #1\setupalign[\descriptionparameter\c!align]% \ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox}% \ht\@@descriptionbox\strutht \dp\@@descriptionbox\strutdp} \def\@@descriptionlefthang[#1]#2% {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}% \dontcomplain \advance\!!widtha \!!widthb \hangindent\!!widtha \@@makedescriptionhangbox\raggedright{\advance\rightskip \!!widthb}% \noindent\ignorespaces \llap {\dontshowcomposition \vtop to \zeropoint{\box\@@descriptionbox}}% \@@dodescription} \def\@@descriptionrighthang[#1]#2% {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}% \dontcomplain \advance\!!widtha \!!widthb \hangindent-\!!widtha \@@makedescriptionhangbox\raggedleft{\advance\leftskip \!!widthb}% \noindent\ignorespaces \rlap {\dontcomplain \dontshowcomposition \scratchdimen\hsize \advance\scratchdimen -\leftskip \advance\scratchdimen -\rightskip \hbox to \scratchdimen {\hss\vtop to \zeropoint{\box\@@descriptionbox}}}% \@@dodescription} \def\@@makedescriptionhangbox#1#2% {\setbox\@@descriptionbox\vtop % \vbox gaat fout in hang {\forgetall \dontcomplain \hsize\!!widtha #1\setupalign[\descriptionparameter\c!align]#2% \ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox}% \ht\@@descriptionbox\strutht \dp\@@descriptionbox\strutdp \doifsomething{\descriptionparameter\c!hang} {\doifinsetelse{\descriptionparameter\c!hang}{\v!fit,\v!broad} {\scratchdimen\ht\@@descriptionbox \advance\scratchdimen \dp\@@descriptionbox \doif{\descriptionparameter\c!hang}\v!broad {\advance\scratchdimen .5\strutht}% \getnoflines\scratchdimen \hangafter-\noflines} {\hangafter-\descriptionparameter\c!hang}}} \setvalue{@@description\v!top}[#1]#2% {%\page[\v!preference]% % Weg ermee! %\dosomebreak{\goodbreak}% % Dit is beter en nodig! \dohandlepagebreakX\plusone % En dit moet het maar worden. \@@dostartdescription[#1]{\let\\=\space}{#2}% \noindent\ignorespaces \copy\@@descriptionbox\par \nobreak \descriptionparameter\c!inbetween \nobreak \@@dodescription} \def\do@@description#1[#2]#3% {\@@dostartdescription[#2]{\def\\{\crlf}}{#3}% \noindent\ignorespaces % not needed this ignore #1{\ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox}% \@@dodescription} \setvalue{@@description\v!inmargin }{\do@@description\inmargin} \setvalue{@@description\v!inleft }{\do@@description\inleft } \setvalue{@@description\v!inright }{\do@@description\inright } \setvalue{@@description\v!margin }{\do@@description\inmargin} \setvalue{@@description\v!leftmargin }{\do@@description\inleft } \setvalue{@@description\v!rightmargin }{\do@@description\inright } \setvalue{@@description\v!innermargin }{\do@@description\ininner } \setvalue{@@description\v!outermargin }{\do@@description\inouter } \setvalue{@@description\v!serried\v!fit}[#1]#2% {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}% \noindent\ignorespaces \ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox \hskip\!!widthb % toegevoegd \@@dodescription} \setvalue{@@description\v!serried\v!broad}[#1]#2% {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}% \noindent\ignorespaces \ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox \hskip\!!widthb \!!plus .5\!!widthb \!!minus .25\!!widthb \@@dodescription} \setvalue{@@description\v!serried\v!wide}[#1]#2% {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}% \noindent\ignorespaces \hbox to \!!widtha {\ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox\hss}% \hskip\!!widthb \ignorespaces \@@dodescription} \setvalue{@@description\v!serried}[#1]#2% {\processaction [\descriptionparameter\c!width] [ \v!fit=>\let\next\v!fit, \v!broad=>\let\next\v!broad, \s!unknown=>\let\next\v!wide, \s!default=>\let\next\v!broad]% \getvalue{@@description\v!serried\next}[#1]{#2}} \setvalue{@@description\v!hanging}[#1]#2% {\@@dostartdescription[#1]{\def\\{\crlf}}{#2}% % adds \c!margin to \leftskip \noindent\ignorespaces \advance\leftskip -\leftskipadaption \relax \ifdim\leftskipadaption=\zeropoint \leftskipadaption1.5em % just some default \ifnum\nesteddescriptionstate=\plusone \ifdim\leftskip>\zeropoint \relax \leftskipadaption\leftskip \fi \fi \fi \ifnum\nesteddescriptionstate>\zerocount % was \ifnum\nesteddescriptionstate=\plusone \advance\leftskip \leftskipadaption % but we're already further on \fi \hskip-\leftskipadaption \ifhbox\@@descriptionbox\unhcopy\else\copy\fi\@@descriptionbox \kern\ifdim\!!widthb=\zeropoint .75em\else\!!widthb\fi \ignorespaces \@@dodescription} %D A bonus definition %D %D \starttyping %D \setupfootnotedefinition[location=command,headcommand=\llap] %D \stoptyping \setvalue{@@description\v!command}#1% {\do@@description{\executeifdefined{\??dd#1\c!headcommand}\framed}{#1}} %D A new key 'headalign' in definitions. \def\resetdescriptions % to be used in e.g. footnotes {\chardef\nesteddescriptionstate\zerocount} \resetdescriptions \let\@@leftdescriptionskip \!!zeropoint \let\@@rightdescriptionskip\!!zeropoint \def\@@dostartdescription[#1]#2#3% {\descriptionparameter\c!before \begingroup \doadaptleftskip{\descriptionparameter\c!margin}% \showcomposition \!!widthb\descriptionparameter\c!distance\relax \ifdim\!!widthb=\zeropoint\relax \doif{\descriptionparameter\c!width}\v!broad{\!!widthb=1em}% \fi % temp hack, we need to avoid this kind of preprocessing \setbox\@@descriptionbox\hbox % preroll {\forgetall \trialtypesettingtrue \dontcomplain #2% sets \\ to space or \crlf \@@descriptionhandler[#1]{#3}{\begstrut\descriptionparameter\c!text\ignorespaces#3\endstrut}}% % so far \assignwidth \!!widtha {\descriptionparameter\c!width}% {\doifelsenothing{\descriptionparameter\c!sample}% {% preroll can move here (test first) \ifhbox\@@descriptionbox\unhcopy\else\copy\fi \@@descriptionbox}% {\@@descriptionhandler[#1]{#3}{\descriptionparameter\c!text\descriptionparameter\c!sample}}} \!!widthb \setbox\@@descriptionbox\hbox {\forgetall \dontcomplain #2% sets \\ to space or \crlf \doifelse{\descriptionparameter\c!location}\v!serried {\@@descriptionhandler[#1]{#3}{\begstrut\descriptionparameter\c!text#3\endstrut}} {\@@descriptionhandler[#1]{#3}{\vtop{\hsize\!!widtha\advance\hsize-\!!widthb \begstrut\descriptionparameter\c!text\ignorespaces#3\endstrut}}}}% \doifelse{\descriptionparameter\c!aligntitle}\v!no {\edef\@@leftdescriptionskip {\the\leftskip }% \edef\@@rightdescriptionskip{\the\rightskip}} {\ifcase\nesteddescriptionstate \edef\@@leftdescriptionskip {\the\leftskip }% \edef\@@rightdescriptionskip{\the\rightskip}% \fi}% \expanded{\indenting[\descriptionparameter\c!indenting]}% % better a system mode \ifcase\nesteddescriptionstate \chardef\nesteddescriptionstate\plusone \or \chardef\nesteddescriptionstate\plustwo \fi% now happens elsewhere : \noindent\ignorespaces \@@resetdescriptionclosesymbol} \def\@@stopdescription#1% {\def\currentdescription{#1}% \@@placedescriptionclosesymbol % was \par \dostopattributes % here, else problems with interlinespace and font change \dostopparbasedattributes % == \settrue\parbasedattributes \dostopattributes \endgroup \descriptionparameter\c!after %hm, which currentdescription? \egroup % temporary hack \def\currentdescription{#1}% \dochecknextindentation{\??dd\currentdescription}% \dorechecknextindentation} \def\@@dodescription {\dostartattributes{\??dd\currentdescription}\c!style\c!color\empty \ignorespaces} % starters: \def\@@startdescription[#1][#2]% {\def\currentdescription{#1}% \doifelse{\descriptionparameter\c!title}\v!yes % {\dowithwargument{\@@startsomedescription{#1}[#2]}} % patched for theorems {\permitspacesbetweengroups \dodoublegroupempty{\@@startsomedescription{#1}[#2]}} {\@@startsomedescription{#1}[#2]{}}} \def\@@description[#1][#2]% {\def\currentdescription{#1}% \doifelse{\descriptionparameter\c!title}\v!yes % {\dowithwargument{\@@somedescription{#1}[#2]}} % patched for theorems {\permitspacesbetweengroups \dodoublegroupempty{\@@somedescription{#1}[#2]}} {\@@somedescription{#1}[#2]{}}} % these call: \def\@@somedescription#1[#2]#3% {\dowithpar {\bgroup\@@makedescription{#1}[#2]{#3}}% {\@@stopdescription{#1}}} \def\@@startsomedescription#1[#2]#3% {\bgroup % temporary hack \BeforePar{\@@makedescription{#1}[#2]{#3}}% \GotoPar} % which calls: \def\@@makedescription#1% {\postponenotes % new, assumes grouping \def\currentdescription{#1}% \executeifdefined {@@description\descriptionparameter\c!location} {\getvalue{@@description\v!left}}} % \def\@@makedescription#1% % {\def\currentdescription{#1}% % \ifundefined{@@description\descriptionparameter\c!location}% % \letvalue{\??dd#1\c!location}\v!left % \fi % \getvalue{@@description\descriptionparameter\c!location}} % definitions \def\setupdescriptions {\dodoubleempty\dosetupdescriptions} \def\dosetupdescriptions[#1][#2]% % beter: \iffirstargument {\ConvertToConstant\doifelse{#2}{} {\dodosetupdescriptions[][#1]} {\dodoubleargumentwithset\dodosetupdescriptions[#1][#2]}} \def\dodosetupdescriptions[#1]% [#2]% {\getparameters[\??dd#1]} % [#2]} \def\dodefinedescription[#1][#2]% {\copyparameters[\??dd#1][\??dd] [\c!location,\c!headstyle,\c!style,\c!color,\c!headcolor,\c!title, \c!width,\c!hang,\c!sample,\c!before,\c!inbetween,\c!after,\c!margin, \c!indenting,\c!indentnext,\c!align,\c!text,\c!distance,\c!titledistance,\c!command, \c!titleleft,\c!titleright,\c!titlecommand,\c!closesymbol,\c!closecommand]% \getparameters[\??dd#1] [\c!title=\v!yes,\s!do\c!command=\normal@@descriptionhandler, \c!type=\v!description,\c!list=,\c!listtext=, \c!level=,#2]%AM?? Why do we have title=yes here? %\doifvalue{\??dd#1\c!location}\v!top{\doassign[\??dd#1][\c!inbetween=\blank]}% \doifvalue{\??dd#1\c!location}\v!top % we actually need more granularity {\doifnotvalue{\??dd#1\c!inbetween}{\doassign[\??dd#1][\c!inbetween=\blank]}}% \doifvaluesomething{\??dd#1\c!list} {\definelist[\getvalue{\??dd#1\c!type}:\getvalue{\??dd#1\c!list}]}% new \setvalue {#1}{\dodoubleempty\@@description[#1]}% \setvalue{\e!start#1}{\dodoubleempty\@@startdescription[#1]}% \setvalue{\e!stop #1}{\@@stopdescription{#1}}} \def\definedescription {\dodoubleemptywithset\dodefinedescription} \def\currentdescriptionnumber {\csname\??dd\currentdescription\??dd\c!number\endcsname} \def\directcurrentdescriptionnumber#1{\csname\??dd #1\??dd\c!number\endcsname} \ifx\preparednumber\undefined \let\preparednumber\empty \fi \def\special@@descriptionhandler[#1]#2#3% {\strut \doifelse{\descriptionparameter\c!number}\v!no \!!doneafalse{\doifelse{#1}{-}\!!doneafalse\!!doneatrue}% \chardef\descriptioncoupling\zerocount \iflocation \doifsomething{\descriptionparameter\c!coupling} {\processaction % genereert > of < [\descriptionparameter\c!couplingway] [ \v!local=>\chardef\descriptioncoupling\plusone, % old: default \v!global=>\chardef\descriptioncoupling\plustwo]}% new: global crosslinking \fi \setupnumber % the number is called indirectly [\currentdescriptionnumber] [\c!sectionnumber=\descriptionparameter\c!sectionnumber]% \if!!donea \makeprecedingsectionnumber[\currentdescriptionnumber]% \prepareprefixnumber{\??dd\currentdescription}\precedingsectionnumber\preparednumber \iftrialtypesetting\startlocal\fi \getvalue{\e!next\currentdescription}% tricky but we need the preroll \iftrialtypesetting\stoplocal\fi % \getvalue{\e!next#2#1}% \iflocation \bgroup \letvalue{\??dd\currentdescription\c!sectionnumber}\v!yes \protectconversion \makeprecedingsectionnumber[\currentdescriptionnumber]% \prepareprefixnumber{\??dd\currentdescription}\precedingsectionnumber\preparednumber \ifcase\descriptioncoupling \or \xdef\@@internalenumber{\doshowdnnumber}% \rawreference\s!num{#1:\@@internalenumber}{}% \or \xdef\@@internalenumber{\countervalue{\??dd\c!coupling\currentdescription}}% \rawreference\s!num{\currentdescription:\@@internalenumber}{}% \fi \egroup \fi %\makeprecedingsectionnumber[\currentdescriptionnumber]% %\prepareprefixnumber{\??dd\currentdescription}\precedingsectionnumber\preparednumber \disablepseudocaps % sorry, uppercase causes troubles \doattributes % \nocase primitive needed {\??dd\currentdescription}\c!headstyle\c!headcolor % todo: sub as well {\descriptionparameter\c!command {\showdntext \descriptionparameter\c!left \strut\doshowdnnumber \showdntitle{#2}% \descriptionparameter\c!stopper \descriptionparameter\c!right}}% \doifsomething{\descriptionparameter\c!list} {\dowritetolist {\descriptionparameter\c!type:\descriptionparameter\c!list} {\showdnlisttext\doshowdnnumber}{#2}{\currentdescription}}% \iflocation\ifcase\descriptioncoupling \else \edef\localconnection{\descriptionparameter\c!coupling:\@@internalenumber}% \doifreferencefoundelse\localconnection {\in[\localconnection]}\donothing % genereert > of < \fi\fi \doifnot{#1}{-}{\rawreference\s!num{#1}{{\doshowdnnumber}{#2}}}% \else \doattributes{\??dd\currentdescription}\c!headstyle\c!headcolor {\descriptionparameter\c!command {\showdnpuretext \descriptionparameter\c!left \showdntitle{#2}% \descriptionparameter\c!stopper \descriptionparameter\c!right}}% \doifnot{#1}{-}{\rawreference\s!num{#1}{{}{#2}}}% \fi} \def\showdntitle#1% {\doif{\descriptionparameter\c!title}\v!yes % new, for david antos {\doifsomething{#1} {\doattributes{\??dd\currentdescription}\c!titlestyle\c!titlecolor {\hskip\descriptionparameter\c!titledistance \descriptionparameter\c!titlecommand {\descriptionparameter\c!titleleft \begstrut#1\endstrut \descriptionparameter\c!titleright}}}}} \def\showdnpuretext {\strut\descriptionparameter\c!text} % geen spatie \def\showdnlisttext {\descriptionparameter\c!listtext} % space in default \def\showdntext {\doifelsenothing{\descriptionparameter\c!text} {\ignorespaces} {\strut \descriptionparameter\c!text \removeunwantedspaces\fixedspace}} \def\doshowdnnumber {\getvalue{showdn\descriptionparameter\c!level\c!number}} % maybe recursive until end condition undefined \setvalue{showdn\c!number}% {\preparednumber \convertednumber[\currentdescriptionnumber]} \setvalue{showdn\v!sub\c!number}% {\getvalue{showdn\c!number}% \spr{\descriptionparameter\c!separator}% \convertednumber[\v!sub\currentdescriptionnumber]} \setvalue{showdn\v!sub\v!sub\c!number}% {\getvalue{showdn\v!sub\c!number}% \spr{\descriptionparameter\c!separator}% \convertednumber[\v!sub\v!sub\currentdescriptionnumber]} \setvalue{showdn\v!sub\v!sub\v!sub\c!number}% {\getvalue{showdn\v!sub\v!sub\c!number}% \spr{\descriptionparameter\c!separator}% \convertednumber[\v!sub\v!sub\v!sub\currentdescriptionnumber]} \def\domakednnumber {\descriptionparameter\c!left \strut\doshowdnnumber \descriptionparameter\c!stopper \descriptionparameter\c!right} \setvalue{\??dd\s!set\v!sub\s!sub\s!sub\c!number}#1% {\edef\@@descriptionnumber{\directcurrentdescriptionnumber{#1}}% \setnumber[\v!sub\v!sub\v!sub\@@descriptionnumber]} \setvalue{\??dd\s!set\v!sub\s!sub\c!number}#1% {\getvalue{\??dd\s!reset\v!sub\v!sub\v!sub\c!number}{#1}% \setnumber[\v!sub\v!sub\@@descriptionnumber]} \setvalue{\??dd\s!set\v!sub\c!number}#1% {\getvalue{\??dd\s!reset\v!sub\v!sub\c!number}{#1}% \setnumber[\v!sub\@@descriptionnumber]} \setvalue{\??dd\s!set\c!number}#1% {\getvalue{\??dd\s!reset\v!sub\c!number}{#1}% \setnumber[\@@descriptionnumber]} \setvalue{\??dd\s!reset\v!sub\v!sub\v!sub\c!number}#1% {\edef\@@descriptionnumber{\directcurrentdescriptionnumber{#1}}% \resetnumber[\v!sub\v!sub\v!sub\@@descriptionnumber]} \setvalue{\??dd\s!reset\v!sub\v!sub\c!number}#1% {\getvalue{\??dd\s!reset\v!sub\v!sub\v!sub\c!number}{#1}% \resetnumber[\v!sub\v!sub\@@descriptionnumber]} \setvalue{\??dd\s!reset\v!sub\c!number}#1% {\getvalue{\??dd\s!reset\v!sub\v!sub\c!number}{#1}% \resetnumber[\v!sub\@@descriptionnumber]} \setvalue{\??dd\s!reset\c!number}#1% {\getvalue{\??dd\s!reset\v!sub\c!number}{#1}% \resetnumber[\@@descriptionnumber]} \setvalue{\??dd\e!next\v!sub\v!sub\v!sub\c!number}#1#2% {\edef\@@descriptionnumber{\directcurrentdescriptionnumber{#1}}% \incrementnumber[\v!sub\v!sub\v!sub\@@descriptionnumber]% \rawreference\s!num{#2}{\getvalue{showdn\v!sub\v!sub\v!sub\c!number}}}% \setvalue{\??dd\e!next\v!sub\v!sub\c!number}#1#2% {\getvalue{\??dd\s!reset\v!sub\v!sub\v!sub\c!number}{#1}% \incrementnumber[\v!sub\v!sub\@@descriptionnumber]% \rawreference\s!num{#2}{\getvalue{showdn\v!sub\v!sub\c!number}}}% \setvalue{\??dd\e!next\v!sub\c!number}#1#2% {\getvalue{\??dd\s!reset\v!sub\v!sub\c!number}{#1}% \incrementnumber[\v!sub\@@descriptionnumber]% \rawreference\s!num{#2}{\getvalue{showdn\v!sub\c!number}}}% \setvalue{\??dd\e!next\c!number}#1#2% {\getvalue{\??dd\s!reset\v!sub\c!number}{#1}% \incrementnumber[\@@descriptionnumber]% \rawreference\s!num{#2}{\getvalue{showdn\c!number}}}% \def\dodosetupenumerations[#1][#2]% {\getparameters[\??dd#1][#2]% \doifdefined{\??dd#1\c!start} {\setupnumber[#1][\c!start=\getvalue{\??dd#1\c!start}]}% \setupnumber[#1][\c!conversion=\getvalue{\??dd#1\c!conversion}]} \def\dosetupenumerations[#1][#2]% {\ConvertToConstant\doifelse{#2}{} {\getparameters[\??dn][#1]} {\dodoubleargumentwithset\dodosetupenumerations[#1][#2]}} \def\setupenumerations {\dodoubleempty\dosetupenumerations} \def\docheckenumerationnumber#1#2#3% {\processaction [\getvalue{\??dd#2\c!number}] [ \v!yes=>\setvalue{\??dd#2\??dd\c!number}{#3},% \v!no=>\setvalue{\??dd#2\??dd\c!number}{#3},% \v!default=>\setvalue{\??dd#2\??dd\c!number}{#3},% \v!unknown=>\letvalue{\??dd#2\??dd\c!number}\commalistelement]} \def\dododefineenumeration#1#2#3[#4][#5]% {\makecounter{\??dd\c!coupling#1}% new: global cross linking \dodefinedescription[#3#1]% [\c!title=\v!no,\c!level=#3,\c!type=\v!enumeration,\c!list=,% \s!do\c!command=\special@@descriptionhandler]% \copyparameters[\??dd#3#1][\??dn] [\c!location,\c!headstyle,\c!style,\c!color,\c!headcolor, \c!width,\c!number,\c!distance,\c!titledistance,\c!command, \c!sample,\c!hang,\c!align,\c!before,\c!inbetween,\c!after, \c!levels,\c!way,\c!blockway,\c!separator,\c!margin, \c!indenting,\c!indentnext,\c!stopper,\c!sectionnumber, \c!title,\c!titleleft,\c!titleright,\c!titlecommand,\c!closesymbol,\c!closecommand]% \doifassignmentelse{#4} {\getparameters[\??dd#3#1]% [\c!text=#1,\??dd\c!number=#1,\c!conversion=,\c!listtext=#1\space, \c!left=,\c!right=,\c!coupling=,\c!couplingway=\v!local,#4]% \docheckenumerationnumber{#1}{#3#1}{#1}}% {\doifelsenothing{#4} {\getparameters[\??dd#3#1]% [\c!text=#1,\??dd\c!number=#1,\c!conversion=, \c!stopper=, \c!left=,\c!right=,\c!coupling=,\c!couplingway=,#4]% \docheckenumerationnumber{#1}{#3#1}{#1}}% {\copyparameters[\??dd#3#1][\??dd#3#4] [\c!location,\c!headstyle,\c!style,\c!color,\c!headcolor, \c!width,\c!number,\c!distance,\c!titledistance,\c!command,\c!margin, \c!sample,\c!hang,\c!align,\c!before,\c!inbetween,\c!after, \c!stopper,\c!indenting,\c!indentnext,\c!left,\c!right, \c!coupling,\c!couplingway, \c!title,\c!titleleft,\c!titleright,\c!titlecommand,\c!closesymbol,\c!closecommand]% \getparameters[\??dd#3#1] [\c!text=#1,\??dd\c!number=#4,\c!conversion=,#5]% %docheckenumerationnumber{#1}{#3#1}{#4}}}% \docheckenumerationnumber{#1}{#3#1}{\getvalue{\??dd#3#4\??dd\c!number}}}}% \doifvalue{\??dd#3#1\??dd\c!number}{#1} {\definenumber [#3#1] [\c!way=\descriptionparentparameter\c!way, \c!blockway=\descriptionparentparameter\c!blockway, \c!conversion=\descriptionparentparameter\c!conversion, \c!sectionnumber=\descriptionparentparameter\c!sectionnumber]% \doifvalue{\??dd#1\c!levels}{#2}% % for {\doifsomething{\getvalue{\??dd#1\c!conversion}}% % old {\setupnumber[#3#1] % times [\c!conversion=\descriptionparameter\c!conversion]}}}% % sake \doifvaluesomething{\??dd#3#1\c!list} {\definelist[\getvalue{\??dd#3#1\c!type}:\getvalue{\??dd#3#1\c!list}]}% new % should work ... %setvalue{\s!set #3#1}{\dosetenumerationnumber[#1][#3]}% %setvalue{\s!reset#3#1}{\doresetenumerationnumber[#1][#3]}% %setvalue{\e!next #3#1}{\dotripleempty\donextenumerationnumber[#1][#3]}} % but since we use \currentdescription, we need ... \setevalue{\s!set #3#1}{\noexpand \dosetenumerationnumber [#1][#3]}% \setevalue{\s!reset#3#1}{\noexpand \doresetenumerationnumber[#1][#3]}% \setevalue{\e!next #3#1}{\noexpand\dotripleempty\noexpand\donextenumerationnumber [#1][#3]}} \def\descriptionparentparameter#1{\csname\??dd\currentdescriptionnumber#1\endcsname} \def\dodefineenumeration[#1][#2][#3]% {\dododefineenumeration{#1}{1}{}[#2][#3]% \dododefineenumeration{#1}{2}{\v!sub}[#2][#3]% \dododefineenumeration{#1}{3}{\v!sub\v!sub}[#2][#3]% \dododefineenumeration{#1}{4}{\v!sub\v!sub\v!sub}[#2][#3]} \def\defineenumeration {\dotripleemptywithset\dodefineenumeration} \def\doresetenumerationnumber[#1][#2]% name level {\getvalue{\??dd\s!reset#2\c!number}{#1}}% \def\dosetenumerationnumber[#1][#2]% name level {\getvalue{\??dd\s!set#2\c!number}{#1}}% \def\donextenumerationnumber[#1][#2][#3]% name level reference {\pluscounter{\??dd\c!coupling#1}% new: global crosslinking \getvalue{\??dd\e!next#2\c!number}{#1}{#3}}% \def\@@resetdescriptionclosesymbol {\global\@EA\settrue\csname\??dd\currentdescription:mrk\endcsname \let\placeclosesymbol\@@placedescriptionclosesymbol \let\qed \@@placedescriptionclosesymbol} \def\@@placedescriptionclosesymbol {\ifconditional\csname\??dd\currentdescription:mrk\endcsname \global\@EA\setfalse\csname\??dd\currentdescription:mrk\endcsname \doifsomething{\descriptionparameter\c!closesymbol}{\descriptionparameter\c!closecommand{\descriptionparameter\c!closesymbol}}% \fi} % Het default-mechanisme kan mooier: leegtest, enz. % % Werkprocedure buiten description \def\dodosetupindentations[#1][#2]% {\getparameters[\??ds#1][#2]} \def\dosetupindentations[#1][#2]% {\ConvertToConstant\doifelse{#2}{} {\dodosetupindentations[][#1]} {\dodoubleargumentwithset\dodosetupindentations[#1][#2]}} \def\setupindentations {\dodoubleempty\dosetupindentations} % what to do with this \def\startdoorspringen {\whitespace \@@dsbefore \dosomebreak\goodbreak % \page[\v!preference] \begingroup \parskip\zeropoint\relax} \def\stopdoorspringen {\endgroup \@@dsafter} % \def\dododefineindenting#1#2#3% {\par \getvalue{\??ds#1\c!before}% \begingroup \doifvaluenothing{\??ds#1\c!sample} {\setvalue{\??ds#1\c!sample}% {\getvalue{\??ds#1\c!text}}}% \assignwidth {\!!widtha} {\getvalue{\??ds#1\c!width}} {\doattributes {\??ds#1}\c!headstyle\c!headcolor {\getvalue{\??ds#1\c!sample}% \spr{\getvalue{\??ds#1\c!separator}}}} {\getvalue{\??ds#1\c!distance}}% \advance\!!widtha \getvalue{\??ds#1\c!distance}% \setbox2\hbox to \!!widtha {\doattributes {\??ds#1}\c!headstyle\c!headcolor {\strut \getvalue{\??ds#1\c!text}% \hss \spr{\getvalue{\??ds#1\c!separator}}% \hskip\getvalue{\??ds#1\c!distance}}}% \parindent\zeropoint \hskip#2\!!widtha\indent\box2% \hangindent#3\!!widtha \doattributes{\??ds#1}\c!style\c!color\empty \AfterPar{\endgroup\getvalue{\??ds#1\c!after}}% must be redone \GetPar} \def\dodefineindenting[#1][#2]% {\copyparameters[\??ds#1][\??ds] [\c!text,\c!separator,\c!width,\c!style,\c!color, \c!headstyle,\c!sample,\c!before,\c!after,\c!distance]% \getparameters[\??ds#1][#2]% \setvalue {#1}{\dododefineindenting{#1}{0}{1}}% \setvalue {\v!sub#1}{\dododefineindenting{#1}{1}{2}}% \setvalue{\v!sub\v!sub#1}{\dododefineindenting{#1}{2}{3}}} \def\defineindenting {\dodoubleargumentwithset\dodefineindenting} \def\definelabel {\dodoubleargumentwithset\dodefinelabel} \def\dodefinelabel[#1][#2]% {\definenumber [#1] [\c!command=,\c!location=,#2]% % downward compatible \processaction [\numberparameter{#1}\c!location] [ \v!inmargin=>{\setupnumber[#1][\c!command=\inmargin]}, \v!inleft=>{\setupnumber[#1][\c!command=\inleft ]}, \v!inright=>{\setupnumber[#1][\c!command=\inright ]}, \v!margin=>{\setupnumber[#1][\c!command=\inmargin]}]% % generated commands (in addition to the number ones) \setvalue {#1}{\dodoubleempty\do@@label[#1]}% \setvalue{\s!reset #1}{\resetnumber[#1]}% \setvalue{\e!increment#1}{\incrementnumber[#1]}% \setvalue{\e!next #1}{\dodoubleempty\do@@nextlabel[#1]}% \setvalue{\c!current #1}{\currentnumber[#1]}} \def\do@@label[#1][#2]% {\numberparameter{#1}\c!before \numberparameter{#1}\c!command{\doattributes{\@@thenumber{#1}}\c!headstyle\c!headcolor{\getvalue{\e!next#1}[#2]}}% \numberparameter{#1}\c!after}% \def\do@@nextlabel[#1][#2]% {\nextnumber[#1][\s!lab][#2]} \def\currentnumber[#1]% kan tekst hier weg ? {\dotextprefix{\numberparameter{#1}\c!text}\sectionnumberonly[#1]} \def\nextnumber[#1][#2][#3]% {\incrementnumber[#1]% \currentnumber[#1]% \rawreference{#2}{#3}{\composedsectionnumber}} \setupdescriptions [\c!location=\v!left, \c!headstyle=\v!bold, \c!titlestyle=\v!bold, \c!style=\v!normal, \c!color=, \c!headcolor=, \c!titlecolor=, \c!width=8em, \c!distance=0pt, \c!titledistance=0.5em, \c!hang=, \c!sample=, \c!align=, \c!margin=\v!no, \c!before=\blank, \c!inbetween=\blank, \c!after=\blank, \c!indentnext=\v!yes, \c!indenting=\v!never, \c!titleleft=(, \c!titleright=), \c!closesymbol=, \c!closecommand=\wordright, \c!command=, \c!titlecommand=] \setupenumerations [\c!location=\v!top, \c!headstyle=\v!bold, \c!headcolor=, \c!titlestyle=\v!bold, \c!titlecolor=, \c!style=\v!normal, \c!color=, \c!width=8em, \c!distance=0pt, \c!titledistance=0.5em, \c!hang=, \c!sample=, \c!align=, \c!margin=\v!no, \c!before=\blank, \c!inbetween=\blank, \c!after=\blank, \c!indentnext=\v!yes, \c!indenting=\v!never, \c!text=, \c!levels=3, % to be upward compatible \c!conversion=, % to be upward compatible \c!way=\v!by\v!text, \c!sectionnumber=\v!yes, \c!separator=\@@koseparator, % per 2006.06.23, was . \c!stopper=, \c!titleleft=(, \c!titleright=), \c!closesymbol=, \c!closecommand=\wordright, \c!number=, \c!command=, \c!titlecommand=] \setupindentations [\c!style=\v!normal, \c!headstyle=\v!normal, \c!color=, \c!headcolor=, \c!width=\v!fit, \c!text=\unknown, \c!sample=, \c!before=\blank, \c!after=\blank, \c!distance=1em, \c!separator={ :}] \protect \endinput