diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/page-flt.tex')
-rw-r--r-- | Master/texmf-dist/tex/context/base/page-flt.tex | 1202 |
1 files changed, 693 insertions, 509 deletions
diff --git a/Master/texmf-dist/tex/context/base/page-flt.tex b/Master/texmf-dist/tex/context/base/page-flt.tex index a6c39efec22..98d62bcb5ec 100644 --- a/Master/texmf-dist/tex/context/base/page-flt.tex +++ b/Master/texmf-dist/tex/context/base/page-flt.tex @@ -18,6 +18,8 @@ \unprotect +\ifx\addlocalbackgroundtobox\undefined \def\addlocalbackgroundtobox{\resetglobal\gobbleoneargument} \fi + % naar supp-box.tex \def\voidbox{\box\voidb@x} @@ -181,6 +183,16 @@ 13: there is nothing to split \stopmessages +\def\floatparameter #1{\csname\??fl\currentfloat#1\endcsname} +\def\floatcaptionparameter#1{\csname\??kj\currentfloat#1\endcsname} + +% for the moment we need to define the parameters anyway, first we need to implement a +% proper parent chain (also for framed); no problem now that machines are fast (tests +% show that this may save 20 k or more in the format) +% +% \def\floatparameter #1{\executeifdefined{\??fl\currentfloat#1}{\csname\??fl#1\endcsname}} +% \def\floatcaptionparameter#1{\executeifdefined{\??kj\currentfloat#1}{\csname\??bk#1\endcsname}} + \def\setupfloats {\dodoubleargument\getparameters[\??bk]} @@ -188,22 +200,28 @@ {\dodoubleargument\getparameters[\??kj]} \def\dosetupfloat[#1][#2]% - {\def\docommando##1{\getparameters[\??fl##1][#2]}% - \processcommalist[#1]\docommando} + {\def\docommand##1{\getparameters[\??fl##1][#2]}% + \processcommalist[#1]\docommand} \def\setupfloat {\dodoubleargument\dosetupfloat} \def\dosetupcaption[#1][#2]% - {\def\docommando##1{\getparameters[\??kj##1][#2]}% - \processcommalist[#1]\docommando} + {\def\docommand##1{\getparameters[\??kj##1][#2]}% + \processcommalist[#1]\docommand} \def\setupcaption {\dodoubleargument\dosetupcaption} + \def\doemptyblock#1% {\localframed - [\??fl#1][\c!frame=\v!on]% + [\??fl#1] + [\c!frame=\v!on, + \c!width=\@@bkwidth, + \c!height=\@@bkheight, + \c!location=\v!normal, + \c!offset=\@@bkoffset]% {\getmessage\m!floatblocks{12}\empty}} % A complication is that we may have to handle a pagebreak @@ -212,27 +230,17 @@ % we're realy dealing with the float. Some day I'll root out % the global settings. -% \def\docomplexplacefloat[#1][#2]% [#3]#4% -% {\edef\floattype{#1}% -% \doifelsenothing\floattype -% {\let\floattype\v!figure} -% {\doifundefined{\??fl#1\c!default}{\let\floattype\v!figure}}% -% \doifelsenothing{#2} -% {\edef\floatlocation{\getvalue{\??fl\floattype\c!default}}} -% {\edef\floatlocation{#2}}% -% \expanded{\dodocomplexplacefloat[\floattype][\floatlocation]}} - \def\docomplexplacefloat[#1][#2]% [#3]#4% - {\edef\floattype{#1}% - \doifelsenothing\floattype - {\let\floattype\v!figure} - {\doifundefined{\??fl#1\c!default}{\let\floattype\v!figure}}% + {\edef\currentfloat{#1}% + \doifelsenothing\currentfloat + {\let\currentfloat\v!figure} + {\doifundefined{\??fl#1\c!default}{\let\currentfloat\v!figure}}% \doifelsenothing{#2} - {\edef\floatlocation{\getvalue{\??fl\floattype\c!default}}} + {\edef\floatlocation{\floatparameter\c!default}} {\edef\floatlocation{#2}}% \doifinsetelse\v!split{#2} - {\expanded{\dodocomplexsplitfloat[\floattype][\floatlocation]}} - {\expanded{\dodocomplexplacefloat[\floattype][\floatlocation]}}} + {\expanded{\dodocomplexsplitfloat[\currentfloat][\floatlocation]}} + {\expanded{\dodocomplexplacefloat[\currentfloat][\floatlocation]}}} \def\dodocomplexsplitfloat[#1][#2][#3]#4% {\splitfloat{\dodocomplexplacefloat[#1][#2][#3]{#4}}} @@ -245,43 +253,6 @@ \v!innermargin,\v!outermargin,\v!inneredge,\v!outeredge,% \v!text,\v!opposite}% \v!page -% \def\dodocomplexplacefloat[#1][#2][#3]#4% -% {\flushnotes -% \flushsidefloats % here ! -% \ifsomefloatwaiting -% % this was \checkwaitingfloats spread all over -% \doifinsetelse\v!always{#2} -% {\showmessage\m!floatblocks5\empty} -% {\expanded{\doifcommonelse{#2}{\flushfloatslist}}\doflushfloats\donothing}% -% % but which should be done before using box \floatbox -% \fi -% \ifmargeblokken % waarschijnlijk gebroken ! ! ! ! -% \doifinset\v!margin{#2} -% {\endgraf -% \bgroup\everypar{\egroup\the\everypar}% -% \hsize\@@mbwidth}% -% \fi -% \global\insidefloattrue -% \begingroup % ** -% \the\everyinsidefloat -% \let\@@extrafloat\empty -% \presetmorefloatvariables{#2}% -% \dowithnextboxcontent % better a \the\everyfloattoks -% {\setlocalfloathsize -% \getvalue{\??fl#1\c!inner}% -% \fuzzysnappingfalse -% \postponenotes} % new -% {\xdocompletefloat{#1}{#3}{#1}{#2}{#1}{#4}% ** not yet done -% % we need to carry over the par because of side floats -% \doifnotinset\v!text{#2}{\carryoverpar\endgroup}% -% \global\sidefloatdownshift \zeropoint -% \global\sidefloatextrashift\zeropoint -% \ifparfloat -% \doifinset\v!reset{#2}\forgetsidefloats -% \doinhibitblank -% \fi}% better move this to side floats -% \vbox} - \def\dodocomplexplacefloat[#1][#2][#3]#4% {\flushnotes \flushsidefloats % here ! @@ -305,12 +276,12 @@ \presetmorefloatvariables{#2}% \dowithnextboxcontent % better a \the\everyfloattoks {\setlocalfloathsize - \getvalue{\??fl#1\c!inner}% + \floatparameter\c!inner \fuzzysnappingfalse \postponenotes} % new - {\doifvaluesomething{\??fl#1\c!criterium} - {\ifdim\wd\nextbox>\getvalue{\??fl#1\c!criterium}\relax - \edef\forcedfloatmethod{\executeifdefined{\??fl#1\c!fallback}\v!here}% + {\doifsomething{\floatparameter\c!criterium} + {\ifdim\wd\nextbox>\floatparameter\c!criterium\relax + \edef\forcedfloatmethod{\executeifdefined{\??fl\currentfloat\c!fallback}\v!here}% \fi}% \xdocompletefloat{#1}{#3}{#1}{#2}{#1}{#4}% ** not yet done % we need to carry over the par because of side floats @@ -346,14 +317,14 @@ \fi \global\sidefloatshift\zeropoint \global\sidefloatmaximum\zeropoint - \global\chardef\sidefloatmethod\getvalue{\??fl#1\c!sidemethod}% - \global\chardef\textfloatmethod\getvalue{\??fl#1\c!textmethod}% + \global\chardef\sidefloatmethod\floatparameter\c!sidemethod + \global\chardef\textfloatmethod\floatparameter\c!textmethod \global\chardef\sidefloatalign\zerocount \globallet\floatrotation\!!zerocount \calculatefloatskips{#1}% \ifparfloat \processaction - [\getvalue{\??fl#1\c!sidealign}] + [\floatparameter\c!sidealign] [\v!height=>\global\chardef\sidefloatalign\plusone,% \v!line=>\global\chardef\sidefloatalign\plustwo,% (***) \v!depth=>\global\chardef\sidefloatalign\plusthree,% @@ -382,7 +353,7 @@ \fi \doifinsetelse\v!nonumber{#2} {\global\nofloatnumbertrue} - {\doifelsevalue{\??kj#1\c!number}\v!yes + {\doifelse{\floatcaptionparameter\c!number}\v!yes {\global\nofloatnumberfalse} {\global\nofloatnumbertrue}}% \ConvertToConstant\doifelse{#4}{} @@ -431,17 +402,6 @@ % \fuzzysnappingfalse %\to \everyinsidefloat -%\def\doifrightpagefloatelse % watch out: other default ! ! ! -% {\ifdoublesided -% \ifodd\purenumber\twopassfloatdata\space -% \@EAEAEA\firstoftwoarguments -% \else -% \@EAEAEA\secondoftwoarguments -% \fi -% \else -% \@EA\firstoftwoarguments -% \fi} - \def\doifrightpagefloatelse {\ifdoublesided \ifsinglesided @@ -559,22 +519,22 @@ #4\setbox#3\vbox {\vskip\sidefloatdownshift\nointerlineskip\box#3}% \fi - \doifvaluesomething{\??fl#1\c!minwidth} - {\scratchdimen\getvalue{\??fl#1\c!minwidth}\relax + \doifsomething{\floatparameter\c!minwidth} + {\scratchdimen\floatparameter\c!minwidth\relax \ifdim\wd#3<\scratchdimen #4\setbox#3\hbox to \scratchdimen - {\doifnotvalue{\??fl#1\c!location}\v!left \hss + {\doifnot{\floatparameter\c!location}\v!left \hss \box#3% - \doifnotvalue{\??fl#1\c!location}\v!right\hss}% + \doifnot{\floatparameter\c!location}\v!right\hss}% \fi}% % todo: rand / rug \doifinset\v!hanging{#2} {\doifcommonelse{\v!inleft,\v!leftmargin}{#2} - {\letvalue{\??fl#1\c!maxwidth}\leftmarginwidth}% + {\letvalue{\??fl\currentfloat\c!maxwidth}\leftmarginwidth}% {\doifcommon{\v!inright,\v!rightmargin}{#2} - {\letvalue{\??fl#1\c!maxwidth}\rightmarginwidth}}}% - \doifvaluesomething{\??fl#1\c!maxwidth} - {\scratchdimen\getvalue{\??fl#1\c!maxwidth}\relax + {\letvalue{\??fl\currentfloat\c!maxwidth}\rightmarginwidth}}}% + \doifsomething{\floatparameter\c!maxwidth} + {\scratchdimen\floatparameter\c!maxwidth\relax \ifdim\wd#3>\scratchdimen \doifcommonelse{\v!inright,\v!rightmargin,\v!rightedge \v!inleft,\v!leftmargin,\v!leftedge}{#2} @@ -584,9 +544,9 @@ {\doifnotinset\v!right{#2}\hss \box#3% \doifnotinset\v!left{#2}\hss}% - {\doifnotvalue{\??fl#1\c!location}\v!left\hss + {\doifnot{\floatparameter\c!location}\v!left\hss \box#3% - \doifnotvalue{\??fl#1\c!location}\v!right\hss}}}% + \doifnot{\floatparameter\c!location}\v!right\hss}}}% \fi}% \fi} @@ -617,15 +577,20 @@ % todo: \floatparameter + \currentfloat - saves many hash entries \def\dododefinefloat[#1][#2]% - {\presetlocalframed[\??fl#1]% + {\def\currentfloat{#1}% + \presetlocalframed[\??fl#1]% \setupfloat [#1] - [\c!width=8\lineheight, % 15\bodyfontsize, - \c!height=6\lineheight, % 10\bodyfontsize, + [%\c!width=8\lineheight, % 15\bodyfontsize, + %\c!height=6\lineheight, % 10\bodyfontsize, +\c!offset=\v!overlay, +\c!width=\v!fit, +\c!height=\v!fit, \c!minwidth=, \c!maxwidth=, \c!maxheight=, \c!criterium=, +% inherited \c!sidespacebefore=\@@bksidespacebefore, \c!sidespaceafter=\@@bksidespaceafter, \c!sidealign=\@@bksidealign, % \v!line @@ -646,25 +611,28 @@ \c!rightframe=\@@bkrightframe, \c!frameoffset=\@@bkframeoffset, %\c!local=\@@bklocal, - \c!pageboundaries=, \c!textmethod=\@@bktextmethod, \c!sidemethod=\@@bksidemethod, + \c!pageboundaries=, \c!default=]% \setupcaption [#1] - [\c!location=\@@kjlocation, + [\c!headstyle=\@@kjheadstyle, + \c!headcolor=\@@kjheadcolor, + \c!textstyle=\@@kjtextstyle, + \c!textcolor=\@@kjtextcolor, + \c!style=\@@kjstyle, + \c!color=\@@kjcolor, + \c!location=\@@kjlocation, \c!grid=\@@kjgrid, %\c!before=\@@kjbefore, \c!inbetween=\@@kjinbetween, %\c!after=\@@kjafter, +\c!spacebefore=\@@kjspacebefore, +\c!spaceinbetween=\@@kjspaceinbetween, +\c!spaceafter=\@@kjspaceafter, \c!width=\@@kjwidth, \c!minwidth=\@@kjminwidth, - \c!headstyle=\@@kjheadstyle, - \c!headcolor=\@@kjheadcolor, - \c!textstyle=\@@kjtextstyle, - \c!textcolor=\@@kjtextcolor, - \c!style=\@@kjstyle, - \c!color=\@@kjcolor, \c!align=\@@kjalign, \c!number=\@@kjnumber, \c!way=\@@kjway, @@ -675,17 +643,22 @@ \c!stopper=\@@kjstopper, \c!suffix=\@@kjsuffix, % hook \c!command=\@@kjcommand, - \c!conversion=\@@kjconversion]% + \c!conversion=\@@kjconversion + ]% \definenumber % \definelabel [#1] [\c!text=#1, \c!location=\v!intext, - \c!way=\getvalue{\??kj#1\c!way}, - \c!blockway=\getvalue{\??kj#1\c!blockway}, - \c!sectionnumber=\getvalue{\??kj#1\c!sectionnumber}, - \c!conversion=\getvalue{\??kj#1\c!conversion}]% +% \c!way=\getvalue{\??kj#1\c!way}, +% \c!blockway=\getvalue{\??kj#1\c!blockway}, +% \c!sectionnumber=\getvalue{\??kj#1\c!sectionnumber}, +% \c!conversion=\getvalue{\??kj#1\c!conversion}]% + \c!way=\floatcaptionparameter\c!way, + \c!blockway=\floatcaptionparameter\c!blockway, + \c!sectionnumber=\floatcaptionparameter\c!sectionnumber, + \c!conversion=\floatcaptionparameter\c!conversion]% \presetlabeltext[#1=\Word{#1}~]% - \checkfloatracer{\v!float#1}% + \newnodelocation{\v!float\@@thenumber{#1}}% \dodefinefloatcommands[#1][#2]} \def\dodefinefloatcommands[#1][#2]% @@ -719,6 +692,7 @@ \c!textmethod,\c!sidemethod]% \copyparameters[\??kj#1][\??kj#3] [\c!location,\c!before,\c!inbetween,\c!after, + \c!spacebefore,\c!spaceinbetween,\c!spaceafter, \c!width,\c!headstyle,\c!headcolor,\c!style,\c!color, \c!textstyle,\c!textcolor,\c!minwidth, \c!align,\c!number,\c!way,\c!blockway, @@ -727,11 +701,41 @@ \presetlabeltext[#1=\labeltext{#3}]% \dodefinefloatcommands[#1][#2]} +% todo: ook in localframed een parent chain, then we can inherit without defs + +\def\redodefinefloat[#1][#2][#3]% same label/number + {\presetlocalframed[\??fl#1]% + \copylocalframed[\??fl#1][\??fl#3]% + \copyparameters[\??fl#1][\??fl#3] + [\c!width,\c!height,%\c!local, + \c!maxwidth,\c!maxheight,\c!minwidth, + \c!margin,\c!sidespacebefore,\c!sidespaceafter,\c!sidealign, + \c!leftmargindistance,\c!rightmargindistance,\c!criterium, + \c!frame,\c!radius,\c!corner,\c!location,\c!background,\c!framecolor, + \c!backgroundscreen,\c!backgroundcolor,\c!backgroundoffset, + \c!topframe,\c!bottomframe,\c!leftframe,\c!rightframe, + \c!frameoffset,\c!pageboundaries,\c!default, + \c!textmethod,\c!sidemethod]% + \copyparameters[\??kj#1][\??kj#3] + [\c!location,\c!before,\c!inbetween,\c!after, + \c!spacebefore,\c!spaceinbetween,\c!spaceafter, + \c!width,\c!headstyle,\c!headcolor,\c!style,\c!color, + \c!textstyle,\c!textcolor,\c!minwidth, + \c!align,\c!number,\c!way,\c!blockway, + \c!sectionnumber,\c!separator,\c!stopper,\c!suffix,\c!distance,\c!conversion]% + \definenumber[#1][#3]% + \presetlabeltext[#1=\labeltext{#3}]% + \dodefinefloatcommands[#1][#2]} + + \def\placefloat {\dotripleempty\docomplexplacefloat} -\installinsertion\topins \newdimen\topinserted -\installinsertion\botins \newdimen\botinserted +\installinsertion\topins +\installinsertion\botins + +\newdimen\botinserted +\newdimen\topinserted %D Extra float registers. @@ -769,80 +773,27 @@ \let\twopassfloatdata\realpageno \def\dosavefloatdata % \expanded - {\bgroup - \doglobal\increment\noffloatdata - \edef\dosavefloatdata - {\writeutilitycommand - {\twopassentry - {\s!float\s!data}% - {\noffloatdata}% - {\noffloatpages::\noexpand\realfolio}}}% later {}{}{}{} and \getfirst... - \dosavefloatdata - \egroup} + {\doglobal\increment\noffloatdata + \lazysavetaggedtwopassdata{\s!float\s!data}{\noffloatdata}{\noffloatpages}{\noexpand\realfolio}}% later {}{}{}{} and \getfirst... \def\dogetfloatdata % precedes save ! {\doglobal\increment\noffloatpages - \findtwopassdata{\s!float\s!data}{\noffloatpages::}% + \findtwopassdata{\s!float\s!data}{\noffloatpages}% \iftwopassdatafound \globallet\twopassfloatdata\twopassdata \else \globallet\twopassfloatdata\realpageno % \realfolio \fi} -% Er wordt bij \v!altijd als dat nodig is hernummerd. -% Daarbij wordt gebruik gemaakt van de opgeslagen nummers en -% volgorde. -% -% replaced code: -% -% \definetwopasslist\s!float -% -% \def\dofloatreference#1% -% {\doifnot\@@bknumbering\v!nocheck -% {\doglobal\increment\numberedfloat -% \doifelse\@@bknumbering\v!text % alternative to yes|page -% {\let\next\immediatewriteutilitycommand} -% {\let\next\writeutilitycommand}% -% \expanded{\next -% {\noexpand\twopassentry -% {\s!float}% -% {\numberedfloat}% -% {\composedsectionnumber}}}}} -% -% \def\redofloatorder#1% -% {\doifnot\@@bknumbering\v!nocheck -% {\doglobal\increment\nofplacedfloats\relax -% \gettwopassdata\s!float -% \iftwopassdatafound -% \doifnot\composedsectionnumber\twopassdata -% {\edef\oldcomposedsectionnumber{\composedsectionnumber}% -% \xdef\composedsectionnumber{\twopassdata}% -% \showmessage\m!floatblocks1{\nofplacedfloats,#1 \oldcomposedsectionnumber,\composedsectionnumber}}% -% \fi}} -% -% \def\preparefloatnumber#1% -% {\incrementnumber[#1]% -% \makesectionnumber[#1]} -% -% \def\tracefloatnumber#1% -% {\dofloatreference{#1}% -% \redofloatorder{#1}} -% -% \def\checkfloatracer#1% -% {} - -\def\checkfloatracer#1% - {\newnodelocation{#1}} - \def\tracefloatnumber#1% - {\doifnot\@@bknumbering\v!nocheck - {\checkfloatracer{\v!float#1}% will go - \tagnodelocation{\v!float#1}}} + {\doifnot\@@bknumbering\v!nocheck{\tagnodelocation{\v!float\@@thenumber{#1}}}} \newconditional\retainfloatnumber \def\preparefloatnumber#1% {\xdef\floatcaptionnumber{#1}% + \doifelsenodelocation{\v!float\@@thenumber{#1}} + \donothing {\chardef\nodelocationmode\zerocount}% \doifelse\@@bknumbering\v!nocheck {\incrementnumber[#1]% \makesectionnumber[#1]% @@ -863,10 +814,9 @@ \incrementnumber[#1]% \savenumber[#1]% % the real work is done here - \checkfloatracer{\v!float#1}% will go - \nextnodelocation{\v!float#1}% better \nextfloatnumber - \analyzenodelocation{\v!float#1}% - \scratchcounter\getnodelocationo{\v!float#1}% + \nextnodelocation{\v!float\@@thenumber{#1}}% better \nextfloatnumber + \analyzenodelocation{\v!float\@@thenumber{#1}}% + \scratchcounter\getnodelocationo{\v!float\@@thenumber{#1}}% \advance\scratchcounter\minusone % here we correct for 'per whatever handling' \advance\scratchcounter-\accumulatednumber[#1]% @@ -928,6 +878,12 @@ % \setbox\floatbox\hbox to \hsize{\hss\box\globalscratchbox\hss}% % \else % \setbox\floatbox\box\globalscratchbox % local ! +% % retain special alignments +% \ifinsidecolumns +% \ifdim\wd\floatbox>\makeupwidth +% \wd\floatbox\makeupwidth +% \fi +% \fi % \fi % \else % \setbox\floatbox\box\globalscratchbox % local ! @@ -1261,19 +1217,6 @@ \def\floatautofactor{.5} -% \def\sometopbottomfloat[#1]% -% {\doifinsetelse\v!auto{#1} -% {\ifdim\pagetotal<\floatautofactor\pagegoal % when empty page, maxdimen -% \placesometopsfloat[#1]% -% \else -% \placesomebotsfloat[#1]% -% \fi} -% {\doifinsetelse\v!top{#1} -% {\placesometopsfloat[#1]} -% {\doifinsetelse\v!bottom{#1} -% {\placesomebotsfloat[#1]} -% {\placesomeherefloat[#1]}}}} - \def\sometopbottomfloat[#1]% {\doifelse\floatmethod\v!auto {\ifdim\pagetotal<\floatautofactor\pagegoal % when empty page, maxdimen @@ -1299,10 +1242,6 @@ % \box\floatbox inhoud+referentie % % \do???float#1 #1 = boxnummer -% -% \ifinsidefloat wordt \true gezet voor \docompletefloat en \false -% na float plaatsen; kan worden gebruikt om in -% andere commando's witruimte te onderdrukken \newdimen\floatsideskip \floatsideskip =12pt \newdimen\floattopskip \floattopskip =\floattopskip @@ -1329,39 +1268,23 @@ {\global#1\zeropoint} {\doifelse{#2}\v!none {\global#1\zeropoint} - {\setbox0\vbox{\whitespace\@EA\blank\@EA[#2]}% + {\setbox0\vbox{\whitespace\expanded{\blank[#2]}}% \global#1\ht0}}} -\def\calculatefloatskips#1% +\def\calculatefloatskips#1% todo floatparam {{\docalculatefloatskip\floattopskip \@@bkspacebefore \docalculatefloatskip\floatbottomskip \@@bkspaceafter \docalculatefloatskip\sidefloattopskip {\getvalue{\??fl#1\c!sidespacebefore}}% \@@bksidespacebefore \docalculatefloatskip\sidefloatbottomskip{\getvalue{\??fl#1\c!sidespaceafter}}% \@@bksidespaceafter \gdef\sidefloattopoffset{\openstrutdepth}% was \def - \global\floatsideskip\getvalue{\??fl#1\c!margin}% + \global\floatsideskip \getvalue{\??fl#1\c!margin}% \global\sidefloatleftshift \getvalue{\??fl#1\c!leftmargindistance}% \global\sidefloatrightshift\getvalue{\??fl#1\c!rightmargindistance}% - \global\noftopfloats \@@bkntop\relax - \global\nofbotfloats \@@bknbottom\relax}} - -\newif\ifinsidefloat + \global\noftopfloats\@@bkntop \relax + \global\nofbotfloats\@@bknbottom\relax}} \let\floatcaptionsuffix\empty % an optional suffix \let\floatcaptionnumber\empty % a logical counter - -% obsolete ? -% -% \def\dosetfloatcaption#1#2#3% name will change -% {\def\dofloattekst% -% {{\doattributes{\??kj#1}\c!sttle\c!color{#3}}}% -% \doifelsevalue{\??kj#1\c!number}\v!yes -% {\def\dofloatnummer% -% {{\xdef\floatcaptionnumber{#1}% -% \hbox{\doattributes{\??kj#1}\c!headstyle\c!headcolor -% {\strut#2\floatcaptionsuffix}}}% -% \ConvertToConstant\doifnot{#3}{} -% {\tfskip\emergencystretch=.5em}}} -% {\let\dofloatnummer\empty}} % Quite experimental ! @@ -1403,7 +1326,7 @@ {\doattributes{\??kj#1}\c!headstyle\c!headcolor {\labeltexts{#1}{\preparednumber}}% \doattributes{\??kj#1}\c!textstyle\c!textcolor - {\dotfskip{\getvalue{\??kj#1\c!distance}}#3}}}% + {\dotfskip{\floatcaptionparameter\c!distance}#3}}}% \fi} \def\placefloatcaptiontext [#1]{\getvalue{@fl@t@#1}} @@ -1417,34 +1340,24 @@ \let\placefloatlabelreference \placefloatcaptionreference \def\borderedfloatbox#1% - {\localframed - [\??fl#1] - [\c!width=\@@bkwidth, - \c!height=\@@bkheight, - \c!location=\v!normal, - \c!offset=\@@bkoffset]% - {\box\floatbox}} + {\localframed[\??fl#1][\c!location=\v!normal]{\box\floatbox}} \newbox\captionbox -% \floatparameter - -\def\putcompletecaption#1#2#3#4% - {\noindent -% \xdef\lastcaptiontag{\strut#2\floatcaptionsuffix}% +\def\putcompletecaption#1#2#3% + {\doifsomething{\floatcaptionparameter\c!spacebefore}{\blank[\floatcaptionparameter\c!spacebefore]}% +% \floatcaptionparameter\c!before % test for side effects first + \noindent \xdef\lastcaptiontag{\strut#2}% -% \xdef\floatcaptionnumber{#1}% \dostartattributes{\??kj#1}\c!style\c!color\empty \ifnofloatnumber \else \hbox{\doattributes{\??kj#1}\c!headstyle\c!headcolor{\strut#2}}% \ifnofloatcaption \else \ifemptyfloatcaption \else - \ifcase#4\relax - \scratchskip\@@kjkjdistance\relax - \dotfskip\scratchskip\emergencystretch.5\scratchskip - \else - \ifx\@@kjkjinbetween\empty\else\unskip\@@kjkjinbetween\fi - \fi + \doifelsenothing{\floatcaptionparameter\c!spaceinbetween} + {\scratchskip\floatcaptionparameter\c!distance\relax + \dotfskip\scratchskip\emergencystretch.5\scratchskip} + {\blank[\floatcaptionparameter\c!spaceinbetween]}% \fi \fi \fi \ifnofloatcaption @@ -1456,7 +1369,9 @@ \xdef\lastcaptiondp{\strutdepth}% \begstrut#3\endstrut\endgraf}% \fi - \dostopattributes} + \dostopattributes +% \floatcaptionparameter\c!after % test for side effects first + \doifsomething{\floatcaptionparameter\c!spaceafter}{\blank[\floatcaptionparameter\c!spaceafter]}} \let\lastcaptionht\!!zeropoint \let\lastcaptiondp\!!zeropoint @@ -1466,6 +1381,11 @@ \newbox\tempfloatbox \newbox\tempcaptionbox +\newif\iftracecaptions + +\def\settracedcaptionbox + {\iftracecaptions\setbox\tempcaptionbox\ruledhbox{\box\tempcaptionbox}\fi} + %\stelblokkopjesin[\c!width=5cm] %\stelblokkopjesin[\c!align=\v!left] %\stelblokkopjesin[\c!align=\v!right] @@ -1473,7 +1393,7 @@ \def\docheckcaptioncontent#1#2#3#4% {\ifnofloatcaption \else \setbox\tempcaptionbox\hbox - {\trialtypesettingtrue\notesenabledfalse\putcompletecaption{#4}{#2}{#3}{0}}% + {\trialtypesettingtrue\notesenabledfalse\putcompletecaption{#4}{#2}{#3}}% % new, \placefigure{\XMLflush{somecaption}}{} passes earlier empty check % so here we misuse the scratch box; actually this means that the previous % test can go away (some day, when i redo this module) @@ -1489,19 +1409,68 @@ \ifx\moveboxontogrid\undefined \let\movecaptionontogrid\gobblethreearguments \fi +% \def\dosetpagfloat#1#2#3#4% \copy wegwerken +% {\bgroup +% \setlocalfloathsize +% \ifnum\floatrotation>0 +% \swapdimens\hsize\vsize +% \fi +% \forgetall +% \postponenotes +% \dontcomplain +% \setbox\tempfloatbox\vbox{\borderedfloatbox{#4}}% +% \def\locatefloat +% {\chardef\alignstrutmode\zerocount +% \alignedline{\floatparameter\c!location}\v!middle}% +% \docheckcaptioncontent{#1}{#2}{#3}{#4}% +% \ifnofloatcaption +% \dopreparenocaption{#1}{#2}{#3}{#4}% +% \edef\width{\the\wd\floatbox}% +% \doglobal\addlocalbackgroundtobox\floatbox +% \else +% % todo: installable maken, variant/method=auto vs macro +% \doifinsetelse{\floatcaptionparameter\c!location}{\v!high,\v!middle,\v!low} +% {\dopreparesidecaption{#1}{#2}{#3}{#4}} +% {\doifelse{\floatcaptionparameter\c!minwidth}\v!fit +% {\doifelse{\floatcaptionparameter\c!width}\v!max +% {\dopreparestackcaptionmax{#1}{#2}{#3}{#4}} +% {\ifdim\wd\tempcaptionbox>\wd\tempfloatbox % wider caption +% \doifelse{\floatcaptionparameter\c!width}\v!fit +% {\dopreparestackcaptionaut{#1}{#2}{#3}{#4}} +% {\dopreparestackcaptionwid{#1}{#2}{#3}{#4}}% +% \else +% \dopreparestackcaptionmin{#1}{#2}{#3}{#4}% +% \fi}} +% {\dopreparestackcaptionfix{#1}{#2}{#3}{#4}}}% new, special effects (see icare) +% \edef\width{\the\wd\tempfloatbox}% +% \addlocalbackgroundtobox\tempfloatbox +% \setbox\tempcaptionbox\hbox{\floatcaptionparameter\c!command{\box\tempcaptionbox}}% +% \moveboxontogrid\tempcaptionbox{\floatcaptionparameter\c!grid}\lastcaptionht +% \addlocalbackgroundtobox\tempcaptionbox +% \buildfloatbox +% \fi +% \ifnum\floatrotation>0 +% \global\setbox\floatbox\vbox +% {\rotate[\c!rotation=\floatrotation]{\box\floatbox}}% +% \edef\width{\the\wd\tempfloatbox}% +% \else +% \postcenterfloatbox\width +% \fi +% \egroup} + \def\dosetpagfloat#1#2#3#4% \copy wegwerken {\bgroup \setlocalfloathsize -\ifnum\floatrotation>0 - \swapdimens\hsize\vsize -\fi + \ifnum\floatrotation>0 + \swapdimens\hsize\vsize + \fi \forgetall \postponenotes \dontcomplain \setbox\tempfloatbox\vbox{\borderedfloatbox{#4}}% \def\locatefloat {\chardef\alignstrutmode\zerocount - \alignedline\@@flfllocation\v!middle}% + \alignedline{\floatparameter\c!location}\v!middle}% \docheckcaptioncontent{#1}{#2}{#3}{#4}% \ifnofloatcaption \dopreparenocaption{#1}{#2}{#3}{#4}% @@ -1509,23 +1478,12 @@ \doglobal\addlocalbackgroundtobox\floatbox \else % todo: installable maken, variant/method=auto vs macro - \doifinsetelse\@@kjkjlocation{\v!high,\v!middle,\v!low} - {\dopreparesidecaption{#1}{#2}{#3}{#4}} - {\doifelse\@@kjkjminwidth\v!fit - {\doifelse\@@kjkjwidth\v!max - {\dopreparestackcaptionmax{#1}{#2}{#3}{#4}} - {\ifdim\wd\tempcaptionbox>\wd\tempfloatbox % wider caption - \doifelse\@@kjkjwidth\v!fit - {\dopreparestackcaptionaut{#1}{#2}{#3}{#4}} - {\dopreparestackcaptionwid{#1}{#2}{#3}{#4}}% - \else - \dopreparestackcaptionmin{#1}{#2}{#3}{#4}% - \fi}} - {\dopreparestackcaptionfix{#1}{#2}{#3}{#4}}}% new, special effects (see icare) + \dopreparedocaption{#1}{#2}{#3}{#4}% + \settracedcaptionbox \edef\width{\the\wd\tempfloatbox}% \addlocalbackgroundtobox\tempfloatbox - \setbox\tempcaptionbox\hbox{\@@kjkjcommand{\box\tempcaptionbox}}% - \moveboxontogrid\tempcaptionbox\@@kjkjgrid\lastcaptionht + \setbox\tempcaptionbox\hbox{\floatcaptionparameter\c!command{\box\tempcaptionbox}}% + \moveboxontogrid\tempcaptionbox{\floatcaptionparameter\c!grid}\lastcaptionht \addlocalbackgroundtobox\tempcaptionbox \buildfloatbox \fi @@ -1538,10 +1496,6 @@ \fi \egroup} -\ifx\addlocalbackgroundtobox\undefined - \def\addlocalbackgroundtobox{\resetglobal\gobbleoneargument}% -\fi - \def\captionminwidth {15\bodyfontsize} \def\captionovershoot {2em} @@ -1552,57 +1506,95 @@ \fi\fi \locatefloat{\copy\tempfloatbox}}} +\def\dopreparedocaption#1#2#3#4% + {\doifinsetelse{\floatcaptionparameter\c!location}{\v!top,\v!bottom} + {\doifinsetelse{\floatcaptionparameter\c!width}{\v!fit,\v!max} + {\doifelse{\floatcaptionparameter\c!minwidth}\v!fit + {\doifelse{\floatcaptionparameter\c!width}\v!max + {\dopreparestackcaptionmax{#1}{#2}{#3}{#4}} + {\ifdim\wd\tempcaptionbox>\wd\tempfloatbox % wider caption + \doifelse{\floatcaptionparameter\c!width}\v!fit + {\dopreparestackcaptionaut{#1}{#2}{#3}{#4}} + {\dopreparestackcaptionwid{#1}{#2}{#3}{#4}}% + \else + \dopreparestackcaptionmin{#1}{#2}{#3}{#4}% + \fi}} + {\dopreparestackcaptionfix{#1}{#2}{#3}{#4}}}% + {\dopreparesidewidthcaption{#1}{#2}{#3}{#4}}}% new, special effects (see icare) + {\doifinsetelse{\floatcaptionparameter\c!width}{\v!fit,\v!max} + {\dopreparesideautocaption{#1}{#2}{#3}{#4}} + {\dopreparesidewidthcaption{#1}{#2}{#3}{#4}}}} + +% \def\dosettempcaptionbox +% {\dosetraggedvbox{\floatcaptionparameter\c!align}% +% \setbox\tempcaptionbox\raggedbox} + +\def\dosettempcaptionbox + {\setbox\tempcaptionbox\vbox\bgroup + \expanded{\setupalign[\v!new,\v!reset,\floatcaptionparameter\c!align,\v!old]}% + \let\next} + +\def\dopreparesideautocaption#1#2#3#4% + {\scratchdimen\dimexpr\hsize-\wd\tempfloatbox-\@@bkmargin\relax % was \tfskipsize\relax + \ifdim\wd\tempcaptionbox>\scratchdimen + \ifdim\wd\tempcaptionbox<1.3\scratchdimen + \scratchdimen0.8\scratchdimen + \fi + \fi + \dosettempcaptionbox + {\hsize\scratchdimen + \putcompletecaption{#4}{#2}{#3}}} + +\def\dopreparesidewidthcaption#1#2#3#4% + {\dosettempcaptionbox + {\hsize\floatcaptionparameter\c!width + \putcompletecaption{#4}{#2}{#3}}} + \def\dopreparestackcaptionfix#1#2#3#4% - {\dosetraggedvbox\@@kjkjalign - \setbox\tempcaptionbox\raggedbox - {\hsize\@@kjkjminwidth % special effects - \putcompletecaption{#4}{#2}{#3}{0}}} + {\dosettempcaptionbox + {\hsize\floatcaptionparameter\c!minwidth % special effects + \putcompletecaption{#4}{#2}{#3}}} \def\dopreparestackcaptionmax#1#2#3#4% - {\dosetraggedvbox\@@kjkjalign - \setbox\tempcaptionbox\raggedbox + {\dosettempcaptionbox {\hsize\wd\tempfloatbox - \putcompletecaption{#4}{#2}{#3}{0}}} + \putcompletecaption{#4}{#2}{#3}}} \def\dopreparestackcaptionwid#1#2#3#4% - {\dosetraggedvbox\@@kjkjalign - \setbox\tempcaptionbox\raggedbox - {\hsize\@@kjkjwidth - \putcompletecaption{#4}{#2}{#3}{0}}} + {\dosettempcaptionbox + {\hsize\floatcaptionparameter\c!width + \putcompletecaption{#4}{#2}{#3}}} \def\dopreparestackcaptionmin#1#2#3#4% - {\raggedcenter % the default - \dosetraggedvbox\@@kjkjalign % when given - \setbox\tempcaptionbox\raggedbox % vbox, keeps footnotes + {\dosettempcaptionbox {\hsize\wd\tempfloatbox - \putcompletecaption{#4}{#2}{#3}{0}}} + \doifnothing{\floatcaptionparameter\c!align}\raggedcenter % on purpose overloads align ! + \putcompletecaption{#4}{#2}{#3}}} \def\dopreparestackcaptionaut#1#2#3#4% - {\doifsomething\@@kjkjalign - {\ExpandBothAfter\doifnotinset\v!middle\@@kjkjalign + {\doifsomething{\floatcaptionparameter\c!align} + {\doifnotinset{\v!middle}{\floatcaptionparameter\c!align}% {\let\captionovershoot\!!zeropoint}}% \edef\captionhsize{\the\wd\tempfloatbox}% \ifdim\captionhsize>\hsize % float is wider than \hsize - \dosetraggedvbox\@@kjkjalign - \setbox\scratchbox\raggedbox % trial run + \dosettempcaptionbox {\trialtypesettingtrue \hsize\captionhsize \notesenabledfalse - \putcompletecaption{#4}{#2}{#3}{0}}% + \putcompletecaption{#4}{#2}{#3}}% \ifdim\ht\scratchbox>\lineheight % more lines - \dosetraggedvbox\@@kjkjalign - \setbox\tempcaptionbox\raggedbox + \dosettempcaptionbox {\hsize\captionhsize \advance\hsize -\captionovershoot\relax \ifdim\hsize<\captionminwidth\relax \hsize\captionhsize \fi - \putcompletecaption{#4}{#2}{#3}{0}}% + \putcompletecaption{#4}{#2}{#3}}% \else - \setbox\tempcaptionbox\raggedbox + \dosettempcaptionbox {\hsize\captionhsize - \putcompletecaption{#4}{#2}{#3}{0}}% + \putcompletecaption{#4}{#2}{#3}}% \fi \else % float is smaller of equal to \hsize @@ -1617,141 +1609,408 @@ \advance\scratchdimen 3em % an average word length \ifdim\scratchdimen<\hsize \hsize\scratchdimen \fi \notesenabledfalse - \putcompletecaption{#4}{#2}{#3}{0}}% + \putcompletecaption{#4}{#2}{#3}}% \ifdim\ht\scratchbox>\lineheight % at least an average word longer than a line - \dosetraggedvbox\@@kjkjalign - \setbox\tempcaptionbox\raggedbox + \dosettempcaptionbox {\scratchdimen\captionhsize \advance\scratchdimen \captionovershoot \ifdim\scratchdimen<\hsize \hsize\scratchdimen \fi - \putcompletecaption{#4}{#2}{#3}{0}}% + \putcompletecaption{#4}{#2}{#3}}% \else - % just over a line, don't use an overshoot - \expanded{\doifcommonelse{\@@kjkjalign}}{\v!left,\v!right,\v!flushleft,\v!flushright} - {\dosetraggedvbox\@@kjkjalign - \setbox\tempcaptionbox\raggedbox + % just over a line, don't use an overshoot % % % todo: outer/inner and such + \doifcommonelse{\floatcaptionparameter\c!align}{\v!left,\v!right,\v!flushleft,\v!flushright} + {\dosettempcaptionbox {\hsize\captionhsize % strange : \raggedcenter - \putcompletecaption{#4}{#2}{#3}{0}}} + \putcompletecaption{#4}{#2}{#3}}} {% nicer - \setbox\tempcaptionbox\cbox + \dosettempcaptionbox {\hsize\captionhsize - \putcompletecaption{#4}{#2}{#3}{0}}}% + \doifnothing{\floatcaptionparameter\c!align}\raggedcenter% overloads + \putcompletecaption{#4}{#2}{#3}}}% \fi \fi} \def\dopreparesidecaption#1#2#3#4% - {\dimen0\hsize - \advance\dimen0 -\wd\tempfloatbox - \advance\dimen0 -\@@bkmargin\relax % was \tfskipsize\relax - \ifdim\wd\tempcaptionbox>\dimen0 - \dimen2=1.3\dimen0 - \ifdim\wd\tempcaptionbox<\dimen2 - \dimen0=0.8\dimen0 + {\scratchdimen\dimexpr\hsize-\wd\tempfloatbox-\@@bkmargin\relax % was \tfskipsize\relax + \ifdim\wd\tempcaptionbox>\scratchdimen + \ifdim\wd\tempcaptionbox<1.3\scratchdimen + \scratchdimen0.8\scratchdimen \fi \fi - \setbox\tempcaptionbox\vbox - {\hsize\dimen0 - \raggedright - \putcompletecaption{#4}{#2}{#3}{1}}} + \dosettempcaptionbox % \setbox\tempcaptionbox\vbox + {\hsize\scratchdimen + \doifnothing{\floatcaptionparameter\c!align}\raggedright % on purpose overloads align ! + \putcompletecaption{#4}{#2}{#3}}} + +\newdimen\tempfloatheight +\newdimen\tempfloatwidth + +\def\dofloatboxbetweenstack + {\endgraf\nointerlineskip\floatcaptionparameter\c!inbetween\endgraf} + +\def\dofloatboxdefaultbuilder % done + {\locatefloat{\box\tempfloatbox}} + +\def\dofloatboxnextrightbuilder#1% + {\ifparfloat \hbox \else \expandafter \locatefloat \fi + {\tempfloatheight\ht\tempfloatbox + \box\tempfloatbox + \expanded{\doifnotinset{\v!hang}{\floatcaptionparameter\c!location}}{\dotfskip{\floatcaptionparameter\c!distance}}% + \vbox to\tempfloatheight{#1}}} + +\def\dofloatboxnextleftbuilder#1% + {\ifparfloat \hbox \else \expandafter \locatefloat \fi + {\tempfloatheight\ht\tempfloatbox + \vbox to\tempfloatheight{#1}% + \expanded{\doifnotinset{\v!hang}{\floatcaptionparameter\c!location}}{\dotfskip{\floatcaptionparameter\c!distance}}% + \box\tempfloatbox}} + +\def\dofloatboxnextouterbuilder + {\doifrightpagefloatelse\dofloatboxnextrightbuilder\dofloatboxnextleftbuilder} +\def\dofloatboxnextinnerbuilder + {\doifrightpagefloatelse\dofloatboxnextleftbuilder\dofloatboxnextrightbuilder} + +\def\dofloatboxnextrighthangbuilder#1% + {\ifparfloat \hbox \else \expandafter \locatefloat \fi + {\tempfloatheight\ht\tempfloatbox + \box\tempfloatbox + \vbox to\tempfloatheight{#1}}} + +\def\dofloatboxnextlefthangbuilder#1% + {\ifparfloat \hbox \else \expandafter \locatefloat \fi + {\tempfloatheight\ht\tempfloatbox + \vbox to\tempfloatheight{#1}% + \box\tempfloatbox}} + +\def\dodofloatboxnextrightmarginbuilder#1#2% + {\ifparfloat + \hbox\bgroup + \tempfloatheight\ht\tempfloatbox + \box\tempfloatbox + \hsmash{\hskip#1\vbox to\tempfloatheight{#2}}% + \egroup + \else + \begingroup + \tempfloatheight\ht\tempfloatbox + \everyrightofalignedline{\hsmash{\hskip#1\vbox to\tempfloatheight{#2}}}% + \locatefloat{\box\tempfloatbox}% + \endgroup + \fi} + +\def\dodofloatboxnextleftmarginbuilder#1#2% + {\ifparfloat + \hbox\bgroup + \tempfloatheight\ht\tempfloatbox + \hsmash{\hskip-\dimexpr#1+\wd\tempcaptionbox\relax\vbox to\tempfloatheight{#2}}% + \box\tempfloatbox + \egroup + \else + \begingroup + \tempfloatheight\ht\tempfloatbox + \everyleftofalignedline{\hsmash{\hskip-\dimexpr#1+\wd\tempcaptionbox\relax\vbox to\tempfloatheight{#2}}}% + \locatefloat{\box\tempfloatbox}% + \endgroup + \fi} + +\def\dofloatboxnextrightmarginbuilder{\dodofloatboxnextrightmarginbuilder\rightmargindistance} +\def\dofloatboxnextleftmarginbuilder {\dodofloatboxnextleftmarginbuilder \leftmargindistance } + +\def\dofloatboxnextoutermarginbuilder + {\doifrightpagefloatelse + {\dodofloatboxnextrightmarginbuilder\rightmargindistance} + {\dodofloatboxnextleftmarginbuilder \rightmargindistance}} + +\def\dofloatboxnextinnermarginbuilder + {\doifrightpagefloatelse + {\dodofloatboxnextleftmarginbuilder \leftmargindistance} + {\dodofloatboxnextrightmarginbuilder\leftmargindistance}} + +\def\dofloatboxnextbuilder % beware, we first check on left/rightmargin because there can be left/right also + {\let\next\dofloatboxnextleftbuilder + \expanded{\processallactionsinset[\floatcaptionparameter\c!location]} + [ \v!outermargin=>\let\next\dofloatboxnextoutermarginbuilder, + \v!innermargin=>\let\next\dofloatboxnextinnermarginbuilder, + \v!leftmargin=>\let\next\dofloatboxnextleftmarginbuilder, + \v!rightmargin=>\let\next\dofloatboxnextrightmarginbuilder, + \v!lefthanging=>\let\next\dofloatboxnextlefthangbuilder, + \v!righthanging=>\let\next\dofloatboxnextrighthangbuilder, + \v!outer=>\let\next\dofloatboxnextouterbuilder, + \v!inner=>\let\next\dofloatboxnextinnerbuilder, + \v!left=>\let\next\dofloatboxnextleftbuilder, + \v!right=>\let\next\dofloatboxnextrightbuilder]% + \next} + +\def\dofloatboxsidebuilder + {\ifparfloat + \let\next\dofloatboxhighbuilder + \else + \let\next\dofloatboxmiddlebuilder + \expanded{\processallactionsinset[\floatcaptionparameter\c!location]} + [ \v!low=>\let\next\dofloatboxlowbuilder, + \v!middle=>\let\next\dofloatboxmiddlebuilder, + \v!high=>\let\next\dofloatboxhighbuilder]% + \fi + \next} + +\def\doflushfloatleftcaptionhang + {\hsmash{\llap{\box\tempcaptionbox\dotfskip{\floatcaptionparameter\c!distance}}}} +\def\doflushfloatrightcaptionhang + {\hsmash{\rlap{\dotfskip{\floatcaptionparameter\c!distance}\box\tempcaptionbox}}} + +\def\doflushfloatcaptionhang + {\expanded{\doifinsetelse{\v!righthanging}{\floatcaptionparameter\c!location}} + {\doflushfloatrightcaptionhang} + {\expanded{\doifinsetelse{\v!lefthanging}{\floatcaptionparameter\c!location}} + {\doflushfloatleftcaptionhang} + {\expanded{\doifinsetelse{\v!hang}{\floatcaptionparameter\c!location}} + {\expanded{\doifinsetelse{\v!outer}{\floatcaptionparameter\c!location}} + {\doifrightpagefloatelse{\doflushfloatrightcaptionhang}{\doflushfloatleftcaptionhang}} + {\expanded{\doifinsetelse{\v!right}{\floatcaptiondirectives}} + {\doflushfloatrightcaptionhang} + {\doflushfloatleftcaptionhang}}} + {\box\tempcaptionbox}}}} + +\def\dofloatboxhighbuilder + {\dofloatboxnextbuilder{\dofloatboxbetweenstack\doflushfloatcaptionhang\vfill}} + +\def\dofloatboxlowbuilder + {\dofloatboxnextbuilder{\vfill\doflushfloatcaptionhang\dofloatboxbetweenstack}} + +\def\dofloatboxmiddlebuilder + {\dofloatboxnextbuilder{\vfill\box\tempcaptionbox\vfill}} + +% \def\dofloatboxnormalstackbuilder#1#2#3#4% hbox needed +% {\tempfloatwidth\wd\tempfloatbox +% \ifparfloat +% \hbox{#3}\dofloatboxbetweenstack\hbox{#4}% +% \else +% \hbox{#1}\dofloatboxbetweenstack\hbox{#2}% +% \fi} + +% \def\dofloatboxgridstackbuilder#1#2#3#4% +% {\dp\tempcaptionbox\strutdepth +% \setbox\scratchbox\vbox +% {\tempfloatwidth\wd\tempfloatbox +% \ifparfloat +% #3\vss\dofloatboxbetweenstack#4% +% \else +% #1\vss\dofloatboxbetweenstack#2% +% \fi}% +% \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy +% \vbox to \noflines\lineheight{\unvbox\scratchbox}} + +% \def\dofloatboxstretchstackbuilder#1#2#3#4% +% {\dp\tempcaptionbox\strutdepth +% \setbox\scratchbox\vbox +% {\locatefloat{\copy#1}% +% \locatefloat{\copy#2}}% +% \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy +% \vbox to \noflines\lineheight +% {\tempfloatwidth\wd\tempfloatbox +% \ifparfloat +% #3\vss\dofloatboxbetweenstack\vss#4% +% \else +% #1\vss\dofloatboxbetweenstack\vss#2% +% \fi}} -\def\buildfloatbox % todo: installable, also vertical align caption relative to floatbox +% \def\dofloatboxtopbuilder +% {\let\next\dofloatboxnormalstackbuilder +% \expanded{\processallactionsinset[\floatcaptionparameter\c!location]} +% [ \v!grid=>\let\next\dofloatboxgridstackbuilder, +% \v!stretch=>\let\next\dofloatboxstretchstackbuilder]% +% \next +% {\locatetextfloat{\box\tempcaptionbox}} +% {\locatefloat {\box\tempfloatbox }} +% {\locatesidefloat{\box\tempcaptionbox}} +% {\hbox {\box\tempfloatbox }}} + +% \def\dofloatboxbottombuilder +% {\let\next\dofloatboxnormalstackbuilder +% \expanded{\processallactionsinset[\floatcaptionparameter\c!location]} +% [ \v!grid=>\let\next\dofloatboxgridstackbuilder, +% \v!stretch=>\let\next\dofloatboxstretchstackbuilder]% +% \next +% {\locatefloat {\box\tempfloatbox }} +% {\locatetextfloat{\box\tempcaptionbox}} +% {\hbox {\box\tempfloatbox }} +% {\locatesidefloat{\box\tempcaptionbox}}} + +% \definefloat +% [lefty][lefties][figure] +% \setupfloat +% [lefty] +% [default=left, +% rightmargindistance=-2cm, +% leftmargindistance=-2cm] +% \setupcaption +% [lefty] +% [location={bottom,overlay}] +% +% \starttext +% \placelefty{}{} \input tufte \input tufte +% \placelefty{}{} \input tufte \input tufte +% \stoptext + +\def\bothangfloat#1{\ruledvbox to \ht\tempfloatbox{#1\vss}} +\def\tophangfloat#1{\ruledvbox to \ht\tempfloatbox{\vss#1}} + +\def\dofloatboxnormaltopstackbuilder + {\expanded{\doifinset{\v!overlay}{\floatcaptionparameter\c!location}}\tophangfloat + {\tempfloatwidth\wd\tempfloatbox + \ifparfloat + \hbox{\locatesidefloat{\box\tempcaptionbox}}% + \dofloatboxbetweenstack + \hbox{\hbox {\box\tempfloatbox }}% + \else + \hbox{\locatetextfloat{\box\tempcaptionbox}} + \dofloatboxbetweenstack + \hbox{\locatefloat {\box\tempfloatbox }}% + \fi}} + +\def\dofloatboxnormalbotstackbuilder + {\expanded{\doifinset{\v!overlay}{\floatcaptionparameter\c!location}}\bothangfloat + {\tempfloatwidth\wd\tempfloatbox + \ifparfloat + \hbox{\hbox {\box\tempfloatbox }}% + \dofloatboxbetweenstack + \hbox{\locatesidefloat{\box\tempcaptionbox}}% + \else + \hbox{\locatefloat {\box\tempfloatbox }}% + \dofloatboxbetweenstack + \hbox{\locatetextfloat{\box\tempcaptionbox}}% + \fi}} + +\def\dofloatboxgridtopstackbuilder + {\dp\tempcaptionbox\strutdepth + \setbox\scratchbox\vbox + {\tempfloatwidth\wd\tempfloatbox + \ifparfloat + \locatesidefloat{\box\tempcaptionbox}% + \vss\dofloatboxbetweenstack + \hbox {\box\tempfloatbox }% + \else + \locatetextfloat{\box\tempcaptionbox}% + \vss\dofloatboxbetweenstack + \locatefloat {\box\tempfloatbox }% + \fi}% + \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy + \vbox to \noflines\lineheight{\unvbox\scratchbox}} + +\def\dofloatboxgridbotstackbuilder + {\dp\tempcaptionbox\strutdepth + \setbox\scratchbox\vbox + {\tempfloatwidth\wd\tempfloatbox + \ifparfloat + \hbox {\box\tempfloatbox }% + \vss\dofloatboxbetweenstack + \locatesidefloat{\box\tempcaptionbox}% + \else + \locatefloat {\box\tempfloatbox }% + \vss\dofloatboxbetweenstack + \locatetextfloat{\box\tempcaptionbox}% + \fi}% + \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy + \vbox to \noflines\lineheight{\unvbox\scratchbox}} + +\def\dofloatboxstretchtopstackbuilder + {\dp\tempcaptionbox\strutdepth + \setbox\scratchbox\vbox + {\locatefloat{\copy\tempcaptionbox}% + \locatefloat{\copy\tempfloatbox }}% + \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy + \vbox to \noflines\lineheight + {\tempfloatwidth\wd\tempfloatbox + \ifparfloat + \locatesidefloat{\box\tempcaptionbox}% + \vss\dofloatboxbetweenstack\vss + \hbox {\box\tempfloatbox }% + \else + \locatetextfloat{\box\tempcaptionbox}% + \vss\dofloatboxbetweenstack\vss + \locatefloat {\box\tempfloatbox }% + \fi}} + +\def\dofloatboxstretchbotstackbuilder + {\dp\tempcaptionbox\strutdepth + \setbox\scratchbox\vbox + {\locatefloat{\copy\tempfloatbox }% + \locatefloat{\copy\tempcaptionbox}}% + \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy + \vbox to \noflines\lineheight + {\tempfloatwidth\wd\tempfloatbox + \ifparfloat + \hbox {\box\tempfloatbox }% + \vss\dofloatboxbetweenstack\vss + \locatesidefloat{\box\tempcaptionbox} + \else + \locatefloat {\box\tempfloatbox }% + \vss\dofloatboxbetweenstack\vss + \locatetextfloat{\box\tempcaptionbox}% + \fi}} + +\def\dofloatboxtopbuilder + {\let\next\dofloatboxnormaltopstackbuilder + \expanded{\processfirstactioninset[\floatcaptionparameter\c!location]} + [ \v!grid=>\let\next\dofloatboxgridstackbuilder, + \v!stretch=>\let\next\dofloatboxstretchstackbuilder]% + \next} + +\def\dofloatboxbottombuilder + {\let\next\dofloatboxnormalbotstackbuilder + \expanded{\processfirstactioninset[\floatcaptionparameter\c!location]} + [ \v!grid=>\let\next\dofloatboxgridstackbuilder, + \v!stretch=>\let\next\dofloatboxstretchstackbuilder]% + \next} + +\def\relocatecaptionright#1{\locatefloat{\hbox to \tempfloatwidth{\hss#1}}} +\def\relocatecaptionleft #1{\locatefloat{\hbox to \tempfloatwidth{#1\hss}}} + +\long\def\installfloatboxbuilder#1#2{\setvalue{\??kj:#1}{#2}} + +\def\buildfloatbox {\global\setbox\floatbox\vbox {\setlocalfloathsize \forgetall - \processaction - [\@@kjkjlocation] - [ \v!top=>\locatefloat{\box\tempcaptionbox}% - \endgraf\nointerlineskip\@@kjkjinbetween - \locatefloat{\box\tempfloatbox}, - \v!bottom=>\locatefloat{\box\tempfloatbox}% - \endgraf\nointerlineskip\@@kjkjinbetween - \locatefloat{\box\tempcaptionbox}, - \v!high=>\locatefloat - {\doifelse\@@flfllocation\v!left - {\box\tempfloatbox - \dotfskip\@@kjkjdistance - \vbox to\ht\tempfloatbox{\@@kjkjinbetween\box\tempcaptionbox\vfill}} - {\vbox to\ht\tempfloatbox{\@@kjkjinbetween\box\tempcaptionbox\vfill}% - \tfskip - \box\tempfloatbox}}, - \v!low=>\locatefloat - {\doifelse\@@flfllocation\v!left - {\box\tempfloatbox - \dotfskip\@@kjkjdistance - \vbox to\ht\tempfloatbox - {\vfill\box\tempcaptionbox\@@kjkjinbetween}} - {\vbox to\ht\tempfloatbox - {\vfill\box\tempcaptionbox\@@kjkjinbetween}% - \dotfskip\@@kjkjdistance - \box\tempfloatbox}}, - \v!middle=>\locatefloat - {\doifelse\@@flfllocation\v!left - {\box\tempfloatbox - \dotfskip\@@kjkjdistance - \vbox to\ht\tempfloatbox{\vfill\box\tempcaptionbox\vfill}} - {\vbox to\ht\tempfloatbox{\vfill\box\tempcaptionbox\vfill}% - \dotfskip\@@kjkjdistance - \box\tempfloatbox}}, - \s!unknown=>\locatefloat{\box\tempfloatbox}, - \v!none=>\locatefloat{\box\tempfloatbox}]}} + \let\floatcaptionarrangement\s!default + \def\docommand##1% + {\doifdefined{\??kj:##1}{\def\floatcaptionarrangement{##1}\quitcommalist}}% + \processcommacommand[\floatcaptionparameter\c!location]\docommand + \executeifdefined{\??kj:\floatcaptionarrangement}{\getvalue{\??kj:\s!default}}}} + +\def\locatetextfloat + {\let\next\locatefloat + \expanded{\processallactionsinset[\floatcaptionparameter\c!location]} + [ \v!left=>\let\next\relocatecaptionleft, + \v!right=>\let\next\relocatecaptionright, + \v!inner=>\doifrightpagefloatelse{\let\next\relocatecaptionleft }{\let\next\relocatecaptionright}, + \v!outer=>\doifrightpagefloatelse{\let\next\relocatecaptionright}{\let\next\relocatecaptionleft }]% + \next} + +\installfloatboxbuilder \v!none \dofloatboxdefaultbuilder +\installfloatboxbuilder \s!default \dofloatboxdefaultbuilder +\installfloatboxbuilder \v!high \dofloatboxhighbuilder +\installfloatboxbuilder \v!low \dofloatboxlowbuilder +\installfloatboxbuilder \v!middle \dofloatboxmiddlebuilder + +\installfloatboxbuilder \v!left \dofloatboxsidebuilder +\installfloatboxbuilder \v!right \dofloatboxsidebuilder + +\installfloatboxbuilder \v!top \dofloatboxtopbuilder +\installfloatboxbuilder \v!bottom \dofloatboxbottombuilder + +% \setuplayout[grid=yes] \showgrid \setupcaptions[style=smallbodyfont,location=grid,inbetween=] +% +% \starttext +% test \placefigure{} {\externalfigure[cow.pdf][frame=on,grid=yes]} test \page +% test \placefigure{\input zapf\relax}{\externalfigure[cow.pdf][frame=on,grid=yes]} test \page +% test \placefigure{} {\externalfigure[cow.pdf][frame=on,grid=depth]} test \page +% test \placefigure{\input zapf\relax}{\externalfigure[cow.pdf][frame=on,grid=depth]} test \page +% \stoptext \newif\ifpostponecolumnfloats \postponecolumnfloatsfalse % don't change -%\def\postcenterfloatbox#1% -% {\ifinsidecolumns -% \ifpostponecolumnfloats -% \scratchdimen=\zetbreedte -% \else -% \scratchdimen=#1\relax -% \fi -% \else\ifdim#1>\hsize -% \scratchdimen=\hsize -% \else -% \scratchdimen=\wd\floatbox -% \fi\fi -% \global\setbox\floatbox=\hbox to \scratchdimen -% {\hfill\box\floatbox\hfill}} % geen \hss, gaat mis in kolommen ! - -% \def\postcenterfloatbox#1% 2 of 4 -% {\global\floatwidth\wd\ifdim\wd2>\wd4 2 \else 4 \fi -% \ifdim\floatwidth>\zetbreedte -% \global\floatwidth\zetbreedte -% \else\ifdim\floatwidth<\hsize -% \global\floatwidth\hsize -% \fi\fi -% \global\setbox\floatbox=\hbox to \floatwidth -% {\hss\box\floatbox\hss}} - -% \def\postcenterfloatbox#1% 2 of 4 -% {\global\setbox\floatbox=\hbox to \width % \wd\ifdim\wd2>\wd4 2\else4\fi -% {\hss\box\floatbox\hss}% -% \ifdim\wd\floatbox>\zetbreedte -% \global\setbox\floatbox=\hbox to \zetbreedte -% {\hss\box\floatbox\hss}% -% \else\ifcenterfloatbox\ifdim\wd\floatbox<\hsize -% % \global\setbox\floatbox=\hbox to \hsize -% % {\hss\box\floatbox\hss}% -% \fi\fi\fi -% \global\floatwidth\wd\floatbox} - -%\def\postcenterfloatbox#1% -% {\ifinsidecolumns -% \ifpostponecolumnfloats -% \scratchdimen\zetbreedte -% \else -% \scratchdimen#1\relax -% \fi -% \else\ifdim#1>\hsize -% \scratchdimen\hsize -% \else -% \scratchdimen\wd\floatbox -% \fi\fi -% \global\setbox\floatbox\hbox to \scratchdimen -% % {\hfill\box\floatbox\hfill}} % geen \hss, gaat mis in kolommen ! -% {\hss \box\floatbox\hss }} % wel \hss, anders mis in colset - \chardef\postcenterfloatmethod\plusone \def\postcenterfloatbox#1% @@ -1794,56 +2053,47 @@ \ifnofloatcaption \global\setbox\floatbox\vbox{\box\tempfloatbox}% \else - \doifelse\@@kjkjwidth\v!max - {\dosetraggedvbox\@@kjkjalign - \setbox\tempcaptionbox\raggedbox - {\hsize\wd\tempfloatbox\putcompletecaption{#4}{#2}{#3}{0}}}% - {\doifelse\@@kjkjwidth\v!fit - {\ifdim\wd\tempcaptionbox>\wd\tempfloatbox\relax - \setbox\tempcaptionbox\vbox - {\forgetall\hsize\wd\tempfloatbox\putcompletecaption{#4}{#2}{#3}{0}}% - \else - \setbox\tempcaptionbox\hbox to \wd\tempfloatbox - {\hss\box\tempcaptionbox\hss}% - \fi} - {\dosetraggedvbox\@@kjkjalign - \setbox\tempcaptionbox\raggedbox - {\hsize\wd\tempfloatbox\putcompletecaption{#4}{#2}{#3}{0}}}}% - \setbox\tempcaptionbox\hbox{\@@kjkjcommand{\box\tempcaptionbox}}% - \moveboxontogrid\tempcaptionbox\@@kjkjgrid\lastcaptionht + \dopreparedosidecaption{#1}{#2}{#3}{#4}% + \settracedcaptionbox + \setbox\tempcaptionbox\hbox{\floatcaptionparameter\c!command{\box\tempcaptionbox}}% + \moveboxontogrid\tempcaptionbox{\floatcaptionparameter\c!grid}\lastcaptionht \addlocalbackgroundtobox\tempcaptionbox % no \doglobal - \global\setbox\floatbox\vbox - {\processaction - [\@@kjkjlocation] - [ \v!top=>\box\tempcaptionbox - \endgraf\nointerlineskip\@@kjkjinbetween - \box\tempfloatbox, - \v!bottom=>\box\tempfloatbox - \endgraf\nointerlineskip\@@kjkjinbetween - \box\tempcaptionbox, - \v!none=>\box\tempfloatbox, - \s!unknown=>\box\tempfloatbox - \endgraf\nointerlineskip\@@kjkjinbetween - \box\tempcaptionbox]}% + \buildsidefloatbox \fi -% \doglobal\addlocalbackgroundtobox\floatbox \egroup} +\def\dopreparedosidecaption#1#2#3#4% will be enhanced + {\doifelse{\floatcaptionparameter\c!width}\v!max + {\dosettempcaptionbox + {\hsize\wd\tempfloatbox\putcompletecaption{#4}{#2}{#3}}}% + {\doifelse{\floatcaptionparameter\c!width}\v!fit + {\ifdim\wd\tempcaptionbox>\wd\tempfloatbox\relax + \setbox\tempcaptionbox\vbox + {\forgetall\hsize\wd\tempfloatbox\putcompletecaption{#4}{#2}{#3}}% + \else + \setbox\tempcaptionbox\hbox to \wd\tempfloatbox + {\hss\box\tempcaptionbox\hss}% + \fi} + {\dosettempcaptionbox + {\hsize\floatcaptionparameter\c!width % \wd\tempfloatbox + \putcompletecaption{#4}{#2}{#3}}}}} + +\def\buildsidefloatbox + {\let\locatefloat\relax + \def\locatesidefloat##1% + {\begingroup + \chardef\alignstrutmode\zerocount + \hsize\tempfloatwidth \forgetall + \alignedline{\floatparameter\c!location}\v!middle{##1}% + \endgroup}% + \buildfloatbox} + \newif\ifparfloat \long\def\dosetfloatbox#1#2#3#4% todo : \global\setbox {\ifvisible \par - \edef\@@kjkjlocation {\getvalue{\??kj#4\c!location}}% - \edef\@@kjkjgrid {\getvalue{\??kj#4\c!grid}}% new - \def\@@kjkjinbetween{\getvalue{\??kj#4\c!inbetween}}% no \edef - \def\@@kjkjcommand {\getvalue{\??kj#4\c!command}}% no \edef - \edef\@@kjkjwidth {\getvalue{\??kj#4\c!width}}% - \edef\@@kjkjminwidth {\getvalue{\??kj#4\c!minwidth}}% in geval van automatisch - \edef\@@kjkjdistance {\getvalue{\??kj#4\c!distance}}% - \edef\@@kjkjalign {\getvalue{\??kj#4\c!align}}% - \def\@@kjkjstopper {\getvalue{\??kj#4\c!stopper}}% - \edef\@@flfllocation {\getvalue{\??fl#4\c!location}}% + \edef\floatcaptiondirectives{\floatparameter\c!location,\floatcaptionparameter\c!location}% \ifparfloat \@EA\dosetparfloat % {#1}{#2}{#3}{#4}% \else @@ -1876,18 +2126,6 @@ \newcounter\noxfloatlocations -% \long\def\dofloat#1#2#3#4% -% {\dosetfloatbox{#1}{#2}{#3}{#4}% -% \doifelsevaluenothing{\??fl#4\c!criterium} -% {\dogetfloatbox{#1}\empty} -% {\ifdim\wd\floatbox>\getvalue{\??fl#4\c!criterium}\relax -% \postcenterfloatbox{\wd\floatbox}% else we get left aligned -% %dogetfloatbox{#1}\v!here % see details/pascal -% \dogetfloatbox{#1}{\executeifdefined{\??fl#4\c!fallback}\v!here}% -% \else -% \dogetfloatbox{#1}\empty -% \fi}} - \long\def\dofloat#1#2#3#4% {\dosetfloatbox{#1}{#2}{#3}{#4}% \dogetfloatbox{#1}\empty} @@ -1901,51 +2139,6 @@ \xdef\naturalfloatwidth {\the\wd#1}% \xdef\naturalfloatdepth {\the\dp#1}} -% \long\def\docompletefloat#1#2#3#4#5#6#7% #7 = box number -% {%\flushsidefloats % moved -% \presetfloatvariables{#1}{#4}{#2}{#6}% -% \bgroup -% \setnaturalfloatdimensions#7% -% \global\setbox\floatbox\vbox -% {\executeifdefined{\??fl#1\c!command}\firstofoneargument{\box#7}}% -% \setnaturalfloatdimensions\floatbox -% \dimen0 \ht\floatbox -% \advance\dimen0 \dp\floatbox -% \ifdim\dimen0=\zeropoint -% \showmessage\m!floatblocks{11}\empty -% \global\setbox\floatbox\vbox{\doemptyblock{#3}}% -% \fi -% \ifnofloatcaption -% \global\setbox\floatbox\vbox -% {\unvbox\floatbox -% \vss % gets rid of the depth (unless tabulate) -% \rawpagereference\s!flt{#2}}% -% \egroup -% \dofloat{#4}{}{#6}{#1}% -% \else -% \doglobal\convertargument#6\to\asciititle % \asciititle is global -% \ifnofloatnumber -% \global\setbox\floatbox\vbox -% {\unvbox\floatbox % no \vss, keep the depth -% \rawreference\s!flt{#2}{{}{\asciititle}}}% -% \egroup -% \dofloat{#4}{}{#6}{#1}% -% \else -% \incrementnumber[#1]% -% \makesectionnumber[#1]% -% \global\setbox\floatbox\vbox -% {\unvbox\floatbox % no \vss, keep the depth -% \dofloatreference -% \redofloatorder{#1}% -% \rawreference\s!flt{#2}{{\composedsectionnumber}{\asciititle}}% -% \dowritetolist{#3}{\composedsectionnumber}{#6}{#3}}% -% \egroup -% \preparefullnumber{\??kj#1}\composedsectionnumber\preparednumber -% \dofloat{#4}{\labeltexts{#5}{\preparednumber}}{#6}{#1}% -% \fi -% \fi -% \global\insidefloatfalse} - \long\def\docompletefloat#1#2#3#4#5#6#7% #7 = box number {%\flushsidefloats % moved \presetfloatvariables{#1}{#4}{#2}{#6}% @@ -2075,23 +2268,11 @@ \box\preparedmarginbox}}% \processaction % traag [\@@mblocation] - [ \v!inmargin=>\doifbothsidesoverruled - \rightmarginbox - \orsideone - \rightmarginbox - \orsidetwo - \leftmarginbox - \od, - \v!middle=>\doifbothsidesoverruled - \rightmarginbox - \orsideone - \leftmarginbox - \orsidetwo - \rightmarginbox - \od, - \v!left=>\leftmarginbox, - \v!right=>\rightmarginbox, - \s!unknown=>\setbox\preparedmarginbox\hbox{}]} + [ \v!inmargin=>\doifbothsidesoverruled\rightmarginbox\rightmarginbox\leftmarginbox, + \v!middle=>\doifbothsidesoverruled\rightmarginbox\leftmarginbox\rightmarginbox, + \v!left=>\leftmarginbox, + \v!right=>\rightmarginbox, + \s!unknown=>\setbox\preparedmarginbox\hbox{}]} \def\dostartmarginblock % 2 maal \vbox ivm \unvbox elders {\global\setbox\marginbox\vtop\bgroup\vbox\bgroup @@ -2271,9 +2452,12 @@ \setupcaptions [\c!location=\v!bottom, \c!grid=, - \c!before=\blank, + \c!before=, % not used (yet) \c!inbetween={\blank[\v!medium]}, - \c!after=\blank, + \c!after=, % not used (yet) +\c!spacebefore=, +\c!spaceinbetween=, % replaces fuzzy inbetween dual usage +\c!spaceafter=, \c!width=\v!fit, \c!minwidth=\v!fit, % id est: the width of the floatbox in some cases \c!headstyle=\v!bold, @@ -2296,8 +2480,8 @@ \setupfloats [\c!location=\v!middle, - \c!width=\v!fit, - \c!height=\v!fit, + \c!width=8\lineheight, + \c!height=6\lineheight, \c!offset=\v!overlay, \c!frame=\v!off, \c!radius=.5\bodyfontsize, |