diff options
Diffstat (limited to 'tex/context/base/mkiv/strc-flt.mklx')
-rw-r--r-- | tex/context/base/mkiv/strc-flt.mklx | 2599 |
1 files changed, 0 insertions, 2599 deletions
diff --git a/tex/context/base/mkiv/strc-flt.mklx b/tex/context/base/mkiv/strc-flt.mklx deleted file mode 100644 index 994ca288a..000000000 --- a/tex/context/base/mkiv/strc-flt.mklx +++ /dev/null @@ -1,2599 +0,0 @@ -%D \module -%D [ file=strc-flt, -%D version=2008.10.20, -%D title=\CONTEXT\ Structure Macros, -%D subtitle=Float Numbering, -%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. - -%D This module will be redone with conditionals and everythings - -\writestatus{loading}{ConTeXt Structure Macros / Float Numbering} - -\registerctxluafile{strc-flt}{} - -\unprotect - -% todo: a keyword for this (and then a settings->hash for speed) -% -% \setuplayout[width=middle,backspace=3cm] -% -% \appendtoks -% \settrue\inhibitmargindata -% \to \everyinsidefloat -% -% \starttext -% \dorecurse{20}{ -% \par \inleft{\red\infofont<#1>} \par -% \placefigure[leftmargin]{}{\framed[height=1cm,width=2cm]{}} -% % \placefigure{#1}{\framed[height=1cm,width=2cm]{}} -% \par line #1.1 \par line #1.2 \par -% } -% \stoptext - -% todo: delay caption creation and make setups for each method instead -% so that we can have a list of methods and redo them as we can -% keep the list or even better: recreate it -% -% todo: strc_floats_analyze_variables_two could trigger a setup -% and we could have nofmethods of them -% -% todo: move variables from page-flt to strc-flt -% -% todo: p_name etc -% -% todo: less globals! -% -% todo: do all options in lua - -%D This module is being converted into a mkvi one. -%D -%D - rename macros -%D - get rid of dead code -%D - less gobal mess -%D - more mkiv-ish - -\installcorenamespace{float} -\installcorenamespace{floatbuilder} -\installcorenamespace{floatcaption} -\installcorenamespace{floatframed} - -\installframedcommandhandler \??float {float} \??float -\installframedcommandhandler \??floatcaption {floatcaption} \??floatcaption -\installframedcommandhandler \??floatframed {floatframed} \??floatframed - -\aliased\let\setupfloats \setupfloat -\aliased\let\setupcaption \setupfloatcaption -\aliased\let\setupcaptions\setupfloatcaption - -\permanent\protected\def\dohandlenextfloatindent - {\useindentnextparameter\floatparameter - \dorechecknextindentation} - -\setupcaptions - [\c!location=\v!bottom, - \c!grid=, - \c!before=, % not used (yet) - \c!inbetween={\blank[\v!medium]}, - \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, - \c!headcolor=, - \c!leftmargin=\zeropoint, - \c!rightmargin=\zeropoint, - \c!outermargin=\zeropoint, - \c!innermargin=\zeropoint, - \c!setups=, - \c!style=\v!normal, - \c!color=, - \c!textstyle=, - \c!textcolor=, - \c!align=, - \c!number=\v!yes, - \c!offset=\v!overlay, - \c!frame=\v!off, - % \c!expansion=, - % \c!prefix=, - % \c!prefixconnector=, - % \c!way=, - % \c!prefixsegments=, - % \c!way=, - % \c!blockway=, - % \c!sectionnumber=, - % \c!separator=, - % \c!starter=, - % \c!stopper=, - \c!suffixseparator=, % currently rather hard coded - \c!suffix=\floatcaptionsuffix, - \c!distance=\emwidth, % plus .5\emwidth minus .25\emwidth - \c!conversion=\v!numbers, - \c!maxwidth=\hsize, - \c!command=] - -% we can comment some of these - -\setupfloats - [\c!location=\v!middle, - \c!width=8\lineheight, - \c!height=6\lineheight, - \c!offset=\v!overlay, - \c!frame=\v!off, - \c!strut=\v!no, - \c!radius=.5\bodyfontsize, - \c!corner=\v!rectangular, - \c!grid=, - %\c!background=, - %\c!backgroundcolor=, - \c!backgroundoffset=\!!zeropoint, - %\c!topframe=, - %\c!bottomframe=, - %\c!leftframe=, - %\c!rightframe=, - \c!frameoffset=\!!zeropoint, - %\c!before=, - %\c!after=, - \c!spacebefore=\v!big, - \c!spaceafter=\v!big, - \c!sidespacebefore=\rootfloatparameter\c!spacebefore, - \c!sidespaceafter=\rootfloatparameter\c!spaceafter, - \c!sidespaceinbetween=\rootfloatparameter\c!spacebefore, - \c!spacebeforeside=, % extra, not part of, can be used to add whitespace before text - \c!spaceafterside=, % idem - \c!sidealign=\v!normal, - \c!textmethod=\ifgridsnapping2\else0\fi, % 0=raw 1=safe (.99pg) 2=tight (-1pt) % THIS WILL CHANGE - \c!sidemethod=\ifgridsnapping2\else1\fi, % 0=raw 1=safe (.99pg) 2=tight (-1pt) % THIS WILL CHANGE - \c!indentnext=\v!no, - \c!margin=\emwidth, - \c!method=1, - \c!cache=\v!yes, % when no, then intermediate flush - \c!leftmargin=\zeropoint, % displacement in 'normal floats' - \c!rightmargin=\zeropoint, % idem - \c!innermargin=\zeropoint, % idem - \c!outermargin=\zeropoint, % idem - \c!leftmargindistance=\zeropoint, - \c!rightmargindistance=\floatparameter\c!leftmargindistance, - \c!step=\v!small, % the flush side float step (big, medium, small : always depth) - \c!ntop=2, - \c!nbottom=0, - \c!nlines=4, % used? - \c!topoffset=\zeropoint, - \c!bottomoffset=\zeropoint, - \c!freeregion=\v!yes, - %\c!local=, - %\c!bottombefore=, % e.g. \vfill - %\c!bottomafter=, - %\c!default=, % default location - \c!sidethreshold=.5\strutdp, % set to "old" to check with old method - \c!numbering=\v!yes, - \c!compress=\v!yes, % when possible pack floats when flushing - \c!compressdistance=\emwidth] - -\setupfloatframed - [\c!frame=\v!off, - \c!offset=\v!overlay, - \c!strut=\v!no] - -\appendtoks - \doifelse{\floatparameter\c!compress}\v!yes\settrue\setfalse\c_page_floats_pack_flushed - \d_page_floats_compress_distance\floatparameter\c!compressdistance\relax -\to \everysetupfloat - -%D We need to do it again here: - -\setupfloat - [\c!compress=\v!yes, % when possible pack floats when flushing - \c!compressdistance=\emwidth] - -%D Individial settings: - -\installcounterassociation{floatcaption} - -\appendtoks - \let\currentfloat\currentfloatcaption % ? - \synchronizefloatcaptioncounters -\to \everysetupfloatcaption - -\appendtoks - \let\currentfloat\currentfloatcaption % ? - \synchronizefloatcaptioncounters -\to \everydefinefloatcaption - -%D Definitions: - -\let\strc_floats_define_saved\definefloat - -\permanent\tolerant\protected\overloaded\def\definefloat[#1]#*[#2]#*[#3]% name+plural+parent | name+parent+settings - {\ifarguments\or - \strc_floats_define_c[#1][#1]% - \or - \doifelsecommandhandler\??float{#2}% - {\strc_floats_define_a[#1][#1][#2]}% - {\strc_floats_define_c[#1][#2]}% - \orelse\ifhastok={#3}% - \strc_floats_define_b[#1][#2][#3]% - \else - \strc_floats_define_a[#1][#2][#3]% - \fi} - -\def\strc_floats_define_a[#1][#2][#3]% name names parent - {\definefloatcaption[#1][#3]% - \definefloatframed[#1][#3]% - \definecounter[#1][#3]% - \definelist[#1][#3]% - \copylabeltext[#1=#3]% - \strc_floats_define_saved[#1][#3]% - \strc_floats_define_commands{#1}{#2}} - -\def\strc_floats_define_b[#1][#2][#3]% name parent settings - {\definefloatcaption[#1][#2]% - \definefloatframed[#1][#2]% - \definecounter[#1][#2]% - \definelist[#1][#2]% - \copylabeltext[#1=#2]% - \strc_floats_define_saved[#1][#2][#3]% - \strc_floats_define_commands{#1}{#1}} - -\def\strc_floats_define_c[#1][#2]% name names - {\registerfloatcaptioncounter{#1}% - \definefloatcaption[#1]% - \definefloatframed[#1]% - \definecounter[#1]% - \definelist[#1]% - \presetlabeltext[#1=\Word{#1}~]% - \presetheadtext[#2=\Word{#2}]% - \strc_floats_define_saved[#1]% - \strc_floats_define_commands{#1}{#2}} - -\def\strc_floats_define_commands#1#2% - {\frozen\instance\setuevalue{\e!place\e!listof#2}{\strc_lists_place[#1]}% call will change - \frozen\instance\setuevalue{\e!complete\e!listof#2}{\strc_lists_complete[#1][#2]}% call will change - \frozen\instance\setuevalue{\e!place#1}{\strc_floats_place[#1]}% - \frozen\instance\setuevalue{\e!start\e!place#1}{\strc_floats_start_place[#1]}% - \frozen\instance\setuevalue{\e!stop\e!place#1}{\strc_floats_stop_place}% - \frozen\instance\setuevalue{\e!start#1\e!text}{\strc_floats_start_text[#1]}% - \frozen\instance\setuevalue{\e!stop#1\e!text}{\strc_floats_stop_text}% - % these will become obsolete: - \setuevalue{\e!reserve#1}{\strc_floats_reserve[#1]}% - \setuevalue{\e!start\e!reserve#1\e!text}{\strc_floats_start_reserve_text[#1]}% - \setuevalue{\e!stop\e!reserve#1\e!text}{\strc_floats_stop_reserve_text}} - -%D Fallback float body: - -\protected\def\strc_floats_place_empty_box % \inheritedfloatframed - {\framed - [\c!frame=\v!on, - \c!width=\rootfloatparameter\c!width, - \c!height=\rootfloatparameter\c!height, - \c!location=\v!normal, - \c!offset=\rootfloatparameter\c!offset]% - {\getmessage\m!floatblocks{12}\empty}} - -%D Data. We can generalize this to lists. - -\newif\ifnofloatcaption -\newif\ifnofloatnumber -\newif\ifemptyfloatcaption - -\installstructurelistprocessor\s!float{\usestructurelistprocessor{number+title}} - -\permanent\protected\def\thecurrentfloatnumbersuffix - {\doifsomething{\floatcaptionparameter\c!suffix} - {\floatcaptionparameter\c!suffixseparator - \floatcaptionparameter\c!suffix - \floatcaptionparameter\c!suffixstopper}} - -\permanent\protected\def\thecurrentfloatnumber - {\ifnofloatcaption \orelse \ifnofloatnumber \orelse \ifx\currentfloatnumber\relax \else - \namedtaggedlabeltexts - \t!floatlabel \currentfloat - \t!floatnumber\currentfloat - {\begstrut - \floatcaptionparameter\c!numbercommand - {\clf_savedlistprefixednumber{\currentfloat}\currentfloatnumber\relax - \thecurrentfloatnumbersuffix}% - \endstrut}% - \fi} - -\permanent\protected\def\thecurrentfloatcaption - {\ifnofloatcaption \orelse \ifemptyfloatcaption \orelse \ifx\currentfloatnumber\relax \else - \dostarttagged\t!floattext\empty - \begstrut - \floatcaptionparameter\c!textcommand - {\clf_savedlisttitle{\currentfloat}\numexpr\currentfloatnumber\relax}% - \endstrut - \dostoptagged - \fi} - -%D Captions. - -\let\floatcaptionsuffix\empty % an optional suffix -\let\floatcaptionnumber\empty % a logical counter - -% For a while these were placeholders: -% -%D \starttyping -%D \protected\def\placefloatcaption{\dodoubleempty\strc_floats_place_caption} -%D \protected\def\setfloatcaption {\dodoubleempty\strc_floats_set_caption} -%D -%D \def\strc_floats_place_caption[#tag][#reference]#caption{[not supported]} -%D \def\strc_floats_set_caption [#tag][#reference]#caption{[not supported]} -%D -%D \protected\def\placefloatcaptiontext [#tag]{[not suported yet]} -%D \protected\def\placefloatcaptionnumber [#tag]{[not suported yet]} -%D \protected\def\placefloatcaptionreference[#tag]{[not suported yet]} -%D \stoptyping -%D -%D because in \MKII\ we had: -%D -%D \starttyping -%D \let\placefloatlabel \placefloatcaption -%D \let\placefloatlabeltext \placefloatcaptiontext -%D \let\placefloatlabelreference\placefloatcaptionreference -%D \stoptyping -%D -%D But as it was never advertised we don't provide it in \MKIV. However, at some -%D point HvdM wanted this: -%D -%D \starttyping -%D \placefigure {labeltext-1} {\externalfigure[figure-1]} -%D \placefloatcaption[figure][title={labeltext-2}] \externalfigure[figure-2] -%D \placefigure {labeltext-3} {\externalfigure[figure-3]} -%D \stoptyping -%D -%D So there you have it: - -\permanent\tolerant\protected\def\placefloatcaption[#category]#spacer[#settings]#spacer[#userdata]% - {\ifarguments\or\else % >= 2 - % we need at least a category and title - \dontleavehmode - \bgroup - \edef\currentfloat{#category}% - \let\currentfloatcaption\currentfloat - \resetfloatcaptionparameter\c!reference - \resetfloatcaptionparameter\c!title - \resetfloatcaptionparameter\c!marking - \resetfloatcaptionparameter\c!list - \resetfloatcaptionparameter\c!bookmark - \setupcurrentfloatcaption[#settings]% - \edef\currentfloatcounter{\namedcounterparameter\currentfloat\s!name}% - \iftrialtypesetting\strc_counters_save\currentfloatcounter\fi - \strc_counters_increment\currentfloatcounter - \strc_counters_register_component - \s!float - \setupcurrentfloatcaption - \floatcaptionparameter - \detokenizedfloatcaptionparameter - \relax - \relax - \relax - [\s!name=\currentfloat, - \s!counter=\currentfloatcounter,% - \s!hascaption=\v!yes,% - \s!hasnumber=\v!yes,% - \s!hastitle=\v!yes]% - [#userdata]% - \glet\previousfloatnumber \m_strc_counters_last_registered_index - \glet\currentfloatnumber \m_strc_counters_last_registered_index - \glet\currentfloatattribute \m_strc_counters_last_registered_attribute - \glet\currentfloatsynchronize\m_strc_counters_last_registered_synchronize - % - % \iflocation - % \c_attr_destination\currentfloatattribute\relax - % \fi - \currentfloatsynchronize - \strc_floats_make_complete_caption - % - \iftrialtypesetting\strc_counters_restore\currentfloatcounter\fi - \egroup - \fi} - -\newbox \b_strc_floats_caption -\newbox \b_strc_floats_content -\newdimen\d_strc_floats_caption_height -\newdimen\d_strc_floats_caption_depth - -\def\strc_floats_make_complete_caption - {\doifsomething{\floatcaptionparameter\c!spacebefore}{\blank[\floatcaptionparameter\c!spacebefore]}% - \strc_floats_make_complete_caption_before - \synchronizedisplaydirection % temp hack, till we have a proper model - \noindent - \gdef\lastcaptiontag{\strut\thecurrentfloatnumber}% was xdef ... needs checking - \begingroup - \ifnofloatcaption - \global\d_strc_floats_caption_height\zeropoint - \global\d_strc_floats_caption_depth \zeropoint - \else - \usefloatcaptionstyleandcolor\c!style\c!color - \clf_doifelselisthastitle{\currentfloat}\numexpr\currentfloatnumber\relax - \donothing - \emptyfloatcaptiontrue - \ifnofloatnumber \orelse \ifnofloatcaption \else - \ifemptyfloatcaption - \hbox{\usefloatcaptionstyleandcolor\c!headstyle\c!headcolor\thecurrentfloatnumber}% - \else - \doifelsenothing{\floatcaptionparameter\c!spaceinbetween} - {\scratchskip\floatcaptionparameter\c!distance\relax - \setbox\scratchbox\hbox - {\usefloatcaptionstyleandcolor\c!headstyle\c!headcolor - \thecurrentfloatnumber - \floatcaptionparameter\c!headseparator - \dotfskip\scratchskip}% - \doifelse{\floatcaptionparameter\c!hang}\v!yes - {\leftskip\wd\scratchbox - \llap{\box\scratchbox}} - {\unhbox\scratchbox}% - \emergencystretch.5\scratchskip} - {\hbox{\usefloatcaptionstyleandcolor\c!headstyle\c!headcolor\thecurrentfloatnumber}% - \blank[\floatcaptionparameter\c!spaceinbetween]}% - \fi - \fi - \usefloatcaptionstyleandcolor\c!textstyle\c!textcolor - \global\d_strc_floats_caption_height\strutheight - \global\d_strc_floats_caption_depth \strutdepth - \thecurrentfloatcaption\endgraf - \fi - \endgroup - \strc_floats_make_complete_caption_after - \doifsomething{\floatcaptionparameter\c!spaceafter}{\blank[\floatcaptionparameter\c!spaceafter]}} - -%let\strc_floats_make_complete_caption_before\relax -\let\strc_floats_make_complete_caption_after \relax - -\def\strc_floats_make_complete_caption_before - {\doifelseframed\floatcaptionparameter\strc_floats_make_complete_caption_before_indeed\relax} - -\def\strc_floats_make_complete_caption_before_indeed - {\edef\m_strc_align{\floatcaptionparameter\c!align}% - \edef\m_strc_strut{\floatcaptionparameter\c!strut}% - \letfloatcaptionparameter\c!align\v!normal - \letfloatcaptionparameter\c!strut\v!no - \inheritedfloatcaptionframed - \bgroup - \letfloatcaptionparameter\c!align\m_strc_align - \letfloatcaptionparameter\c!strut\m_strc_strut - \let\strc_floats_make_complete_caption_after\egroup} - -% \definefloat [figure-1] [figure] -% \definefloat [figure-2] [figure] -% \setupfloat [figure-1] [location=left,leftmargin=10mm] -% \setupfloat [figure-2] [location=left,leftmargin=-5mm] -% \setupcaption [figure-1] [align=flushleft] -% \setupcaption [figure-2] [align=flushleft,leftmargin=15mm] -% -% \startsetups somefigure -% \ifdim\wd\nextbox>\textwidth -% \placefloat[figure-2][][]{}{\box\nextbox} -% \else -% \placefloat[figure-1][][]{}{\box\nextbox} -% \fi -% \stopsetups -% -% \protected\def\setupswithbox[#1]{\dowithnextbox{\setups[#1]}\vbox} -% -% test \setupswithbox[somefigure]{\framed[width=3cm] {}} test -% test \setupswithbox[somefigure]{\framed[width=\dimexpr\textwidth+3cm\relax]{}} test - -% temporary removed ... was not applied systematically -% -% \def\dosetcaptionthings -% {\usesetupsparameter\floatcaptionparameter} - -\def\strc_floats_check_caption_content - {\ifnofloatcaption\else - \setbox\b_strc_floats_caption\hbox - {\settrialtypesetting - \notesenabledfalse - \strc_floats_make_complete_caption}% - % new, \placefigure{\xmlfirst{#1}{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) - \ifzeropt\wd\b_strc_floats_caption - \global\emptyfloatcaptiontrue - \ifnofloatnumber - \global\nofloatcaptiontrue - \fi - \else - \global\emptyfloatcaptionfalse - \setbox\b_strc_floats_caption\hpack{\hskip\leftskip\box\b_strc_floats_caption}% - \fi - \fi} - -%D We can do this ... -%D -%D \starttyping -%D \newcount\c_strc_floats_n -%D -%D \definedataset[\s!float][\c!delay=\v!yes] -%D -%D \let\strc_float_realpage\realpageno -%D -%D \def\strc_float_save_data -%D {\setdataset[\s!float][\number\c_strc_floats_n][]} -%D -%D \def\strc_float_load_data % precedes save ! -%D {\global\advance\c_strc_floats_n\plusone -%D \xdef\strc_float_realpage{\datasetvariable\s!float{\number\c_strc_floats_n}\s!page}% -%D \ifx\strc_float_realpage\empty -%D \glet\strc_float_realpage\realpageno % \realfolio -%D \fi} -%D \stoptyping -%D -%D ... but this is more efficient: - -\definepagestate[\s!float][\c!delay=\v!yes] - -\newcount\c_strc_floats_n - -\let\strc_float_realpage\realpageno - -\def\strc_float_save_data - {\setpagestate[\s!float][\number\c_strc_floats_n]} - -\def\strc_float_load_data % precedes save ! - {\global\advance\c_strc_floats_n\plusone - \xdef\strc_float_realpage{\pagestaterealpage\s!float{\number\c_strc_floats_n}}% - \ifempty\strc_float_realpage - \glet\strc_float_realpage\realpageno % \realfolio - \fi} - -%D test case: -%D -%D \starttyping -%D \setupfloat[figure][criterium=\marginwidth,fallback=bottom] -%D \dorecurse{3}{ -%D \chapter{test} -%D \placefigure[bottom]{1}{\framed{bottom}} -%D test -%D \placetable[bottom]{1}{\framed{table}} -%D test -%D \placetable{2}{\framed{table}} -%D test -%D \placefigure[left]{2}{\framed{left but way too wide}} -%D \input tufte -%D \placefigure[left]{3}{\framed{left but ok}} -%D \input tufte } -%D \stoptyping - -% A complication is that we may have to handle a pagebreak first, which in turn may -% issue a (postponed) float. Therefore we may not trust on variable assignments -% before we're really dealing with the float. Some day I'll root out the global -% settings. - -\let\lastplacedfloat\empty - -\def\strc_floats_set_current_tag#tag% - {\edef\currentfloat{#tag}% - \ifx\currentfloat\empty - \let\currentfloat\v!figure % a bit of a hack - \fi - \doifelsecommandhandler\??float\currentfloat - \donothing - {\writestatus\m!floatblocks{unknown float type '\currentfloat'}% - \let\currentfloat\v!figure}% also a hack - \glet\lastplacedfloat\currentfloat - \let\m_strc_floats_saved_userdata\empty - \let\currentfloatcaption\currentfloat} - -\let\askedfloatmethod \empty -\let\askedfloatoptions\empty - -\def\strc_floats_reset_variables - {\global\emptyfloatcaptionfalse - \global\nofloatcaptionfalse - \global\nofloatnumberfalse - \glet\askedfloatmethod \empty - \glet\askedfloatoptions\empty} - -% place - -\let\floatlabel \empty -\let\floatcolumn \empty -\let\floatrow \empty -\let\floatlocation \empty -\let\floatlocationmethod\empty - -\def\strc_floats_analyze_location - {% more will be moved here - \let\floatlabel \empty - \let\floatcolumn\empty - \let\floatrow \empty - % - \edef\floatcaptionlocation{\floatcaptionparameter\c!location}% - % - \setfloatmethodvariables\floatlocation} - -\newtoks\c_floats_every_table_float - -\appendtoks - \edef\floatlocation{\v!force,\v!always,\floatlocation}% - \setupfloat[\c!spacebefore=\v!none,\c!spaceafter=\v!none]% -\to \c_floats_every_table_float - -\ifdefined\dotagregisterfloat \else \let\dotagregisterfloat\gobbletwoarguments \fi - -\protected\def\strc_floats_place - {\flushnotes - \page_otr_command_flush_side_floats % here ! - \strc_floats_begin_group - \strc_floats_place_indeed} - -\tolerant\def\strc_floats_place_indeed[#tag]#spacer[#location]#spacer[#reference]#:#caption% - {\strc_floats_set_current_tag{#tag}% - \strc_floats_reset_variables - \xdef\askedfloatoptions{#location}% - \edef\floatlocation{#location}% - \ifempty\floatlocation - \edef\floatlocation{\floatparameter\c!default}% beware of a clash between alignment locations - \fi - \ifintable - \the\c_floats_every_table_float - \fi - \strc_floats_analyze_location - % todo: use \lets - \setupcurrentfloatcaption[\c!reference={#reference},\c!title={#caption},\c!marking=,\c!list=,\c!bookmark=]% - \doifelseinset\v!split\floatlocation\strc_floats_place_next_box_split\strc_floats_place_next_box_normal} - -\permanent\protected\def\placefloat% [#tag]% - {\flushnotes - \page_otr_command_flush_side_floats % here ! - \strc_floats_begin_group - \strc_floats_place_indeed} - -% start-stop - -% \startplacefigure[title=oeps][subtitle=whatever] -% \framed[width=10cm,height=5cm]{\floatuserdataparameter{subtitle}} -% \stopplacefigure - -\installcorenamespace{floatuserdata} - -\installsetuponlycommandhandler \??floatuserdata {floatuserdata} - -\let\m_strc_floats_saved_userdata\empty % todo: reset this in non start|stop cases - -\protected\def\strc_floats_start_place - {\flushnotes - \page_otr_command_flush_side_floats % here ! - \strc_floats_begin_group - \strc_floats_start_place_indeed} - -%D We abuse the settings to pick up some float parameters too which makes it -%D messy. - -\tolerant\protected\def\strc_floats_start_place_indeed[#tag]#spacer[#settings]#spacer[#userdata]% - {\strc_floats_set_current_tag{#tag}% - \strc_floats_reset_variables - % save - \edef\m_location {\floatcaptionparameter\c!location}% - \edef\m_topoffset {\floatcaptionparameter\c!topoffset}% - \edef\m_bottomoffset{\floatcaptionparameter\c!bottomoffset}% - \edef\m_freeregion {\floatcaptionparameter\c!freeregion}% - % preset - \letfloatcaptionparameter \c!location \empty - \setexpandedfloatcaptionparameter\c!topoffset {\floatparameter\c!topoffset}% - \setexpandedfloatcaptionparameter\c!bottomoffset{\floatparameter\c!bottomoffset}% - \setexpandedfloatcaptionparameter\c!freeregion {\floatparameter\c!freeregion}% - \letfloatcaptionparameter \c!reference \empty - \letfloatcaptionparameter \c!title \empty - \letfloatcaptionparameter \c!marking \empty - \letfloatcaptionparameter \c!list \empty - \letfloatcaptionparameter \c!bookmark \empty - % pickup - \ifparameter#settings\or - \setupcurrentfloatcaption[#settings]% - \fi - \ifparameter#userdata\or - \setupcurrentfloatuserdata[#userdata]% - \def\m_strc_floats_saved_userdata{#userdata}% - \else - \let\m_strc_floats_saved_userdata\empty - \fi - % check - \edef\floatlocation{\floatcaptionparameter\c!location}% - \ifx\floatlocation\empty - \edef\floatlocation{\floatparameter\c!default}% - \fi - % inherit - \setexpandedfloatparameter\c!topoffset {\floatcaptionparameter\c!topoffset}% - \setexpandedfloatparameter\c!bottomoffset{\floatcaptionparameter\c!bottomoffset}% - \setexpandedfloatparameter\c!freeregion {\floatcaptionparameter\c!freeregion}% - % restore - \letfloatcaptionparameter\c!location \m_location - \letfloatcaptionparameter\c!topoffset \m_topoffset - \letfloatcaptionparameter\c!bottomoffset\m_bottomoffset - \letfloatcaptionparameter\c!freeregion \m_freeregion - % - \strc_floats_analyze_location - \doifelseinset\v!split\floatlocation\strc_floats_place_next_box_split\strc_floats_place_next_box_normal - \bgroup - \ignorespaces} - -\protected\def\strc_floats_stop_place - {\removeunwantedspaces - \egroup} - -\permanent\protected\def\startplacefloat - {\flushnotes - \page_otr_command_flush_side_floats % here ! - \strc_floats_begin_group - \strc_floats_start_place_indeed} - -\aliased\let\stopplacefloat\strc_floats_stop_place - -% reserve - -\protected\def\strc_floats_reserve - {\flushnotes - \page_otr_command_flush_side_floats % here ! - \strc_floats_begin_group - \strc_floats_place_indeed} - -\def\strc_floats_reserve_box#settings% - {\begingroup - \setupcurrentfloat[\c!frame=\v!on,#settings]% - \inheritedfloatframed{}% - \endgroup} - -% text - -\protected\def\strc_floats_start_text - {\flushnotes % Here indeed? - \page_otr_command_flush_side_floats % Here indeed? - \strc_floats_begin_text_group - \strc_floats_start_text_indeed} - -\tolerant\protected\def\strc_floats_start_text_indeed[#tag]#spacer[#location]#spacer[#reference]% - {\strc_floats_place_indeed[#tag][\v!text,#location,\v!left][#reference]} - -\protected\def\strc_floats_stop_text - {\strc_floats_stop_text_indeed} - -% reserved text - -\tolerant\protected\def\strc_floats_start_reserve_text[#tag]#spacer[#settings]#spacer[#location]#spacer[#reference]#:#caption%% - {\flushnotes - \page_otr_command_flush_side_floats - \strc_floats_begin_text_group - \strc_floats_place_indeed[#tag][\v!text,#location,\v!left][#reference]{#caption}{\strc_floats_reserve_box{#settings}}} - -\protected\def\strc_floats_stop_reserve_text - {\strc_floats_stop_text_indeed} - -% special hack - -\def\strc_floats_begin_group {\begingroup} -\def\strc_floats_end_group {\carryoverpar\endgroup} % hm -\def\strc_floats_end_split_group {\endgroup} -\def\strc_floats_begin_text_group{\begingroup\let\strc_floats_end_group\relax} -\def\strc_floats_end_text_group {\endgroup} - -% implementation - -%setnewconstant\c_page_one_float_method \zerocount % 0=raw 1=safe (.99) 2=tight (-1pt) / belongs in page-one -\setnewconstant\c_strc_floats_rotation \zerocount % 0 90 180 270 -\newconditional\c_strc_floats_par_float - -\ifdefined\page_margin_strc_floats_before \else \let\page_margin_strc_floats_before \relax \fi -\ifdefined\page_margin_strc_floats_set_hsize \else \let\page_margin_strc_floats_set_hsize\relax \fi - -\def\flushfloatslist - {\v!left,\v!right,\v!inner,\v!outer,% - \v!backspace,\v!cutspace,% - \v!inleft,\v!inright,\v!inmargin,% - \v!leftmargin,\v!rightmargin,\v!leftedge,\v!rightedge,% - \v!innermargin,\v!outermargin,\v!inneredge,\v!outeredge,% - \v!text,\v!opposite}% \v!page - -\protected\def\strc_floats_place_next_box_split - {\let\splitfloatfinalizer\strc_floats_end_split_group - \let\strc_floats_end_group\relax - \splitfloat{\strc_floats_place_next_box_normal}} - -\protected\def\strc_floats_place_next_box_normal - {\ifconditional\c_page_floats_some_waiting - % this was \checkwaitingfloats spread all over - \doifelseinset\v!always\floatlocation - {\showmessage\m!floatblocks5\empty} - {\doifelsecommon\floatlocation\flushfloatslist\page_otr_command_flush_floats\donothing}% - % but which should be done before using box \floatbox - \fi - \page_margin_strc_floats_before % todo: each float handler gets a before - \global\insidefloattrue - \dostarttaggedchained\t!float\currentfloat\??float - \page_margin_strc_floats_set_hsize % todo: each float handler gets a set_hsize - \the\everyinsidefloat - \strc_floats_analyze_variables_one - \dostarttagged\t!floatcontent\empty - \dowithnextboxcontent - {\strc_floats_set_local_hsize - \floatparameter\c!inner - \postponenotes} % new - {\page_postprocessors_linenumbers_box\nextbox % for aditya - \dostoptagged - \strc_floats_finish_placement} - \vbox} - -%D \starttyping -%D \definefloat -%D [one] [figure] -%D [default=right, -%D rightmargindistance=-20cm, -%D criterium=129pt, -%D fallback=rightmargin] -%D -%D \definefloat -%D [two] [figure] -%D [default=right, -%D rightmargindistance=-20cm, -%D criterium=129pt, -%D fallback=three] -%D -%D \definefloat -%D [three] [figure] -%D [default=rightmargin, -%D rightmargindistance=0cm] -%D -%D \placefloat[one]{}{\blackrule[width=30pt]} \samplefile{tufte} -%D \placefloat[one]{}{\blackrule[width=60pt]} \samplefile{tufte} -%D \placefloat[one]{}{\blackrule[width=90pt]} \samplefile{tufte} -%D \placefloat[one]{}{\blackrule[width=130pt]} \samplefile{tufte} -%D \placefloat[two]{}{\blackrule[width=130pt]} \samplefile{tufte} -%D \stoptyping - -\def\strc_floats_finish_placement - {\doifsomething{\floatparameter\c!criterium} - {\ifdim\wd\nextbox>\floatparameter\c!criterium\relax - \edef\forcedfloatmethod{\floatparameter\c!fallback}% - \ifempty\forcedfloatmethod \else - \doifelsecommandhandler\??float\forcedfloatmethod - {\let\currentfloat\forcedfloatmethod - \edef\floatlocation{\floatparameter\c!default}% - \let\forcedfloatmethod\floatlocation} - \donothing - \fi - \ifempty\forcedfloatmethod - \let\forcedfloatmethod\v!here - \fi - \fi}% - \strc_floats_check_extra_actions - \strc_floats_analyze_variables_two - \strc_floats_place_packaged_boxes - \dotagregisterfloat\askedfloatoptions\askedfloatmethod - \dostoptagged % tricky .... needs checking - % we need to carry over the par because of side floats - \global\d_page_sides_downshift \zeropoint - \global\d_page_sides_extrashift\zeropoint - \ifconditional\c_strc_floats_par_float - \doifinset\v!reset\floatlocation\page_sides_forget_floats - \doinhibitblank - \fi - \strc_floats_end_group} - -% nicer is a bunch of states and one loop that sets those states - -\newdimen\d_strc_floats_top -\newdimen\d_strc_floats_bottom -\newdimen\d_strc_floats_overflow - -% \def\strc_floats_calculate_skip#target#skip% -% {\begingroup -% \edef\askedfloatskip{\rootfloatparameter#skip}% -% \ifempty\askedfloatskip -% \global#target\zeropoint -% \else\ifx\askedfloatskip\v!none -% \global#target\zeropoint -% \else -% \setbox\scratchbox\vbox{\whitespace\blank[\askedfloatskip]}% todo: move whitespace inside blank -% \global#target\ht\scratchbox -% \fi\fi -% \endgroup} - -\def\strc_floats_calculate_skip#target#skip% - {\begingroup - \edef\p_blank{\rootfloatparameter#skip}% - \ifx\p_blank\v!nowhite - \edef\p_blank{-\v!white}% - \fi - \prerollblank[\p_blank]% - \global#target\prerolledblank - \endgroup} - -\def\strc_floats_analyze_variables_two - {\ifinsidecolumns - \global\setfalse\c_strc_floats_par_float - \else - \doifelsecommon\floatlocation\flushfloatslist - {\global\settrue \c_strc_floats_par_float}% - {\global\setfalse\c_strc_floats_par_float}% - \fi - % variable initializations - \global\d_page_sides_shift \zeropoint - \global\d_page_sides_maximum \zeropoint - \global\c_page_sides_align \zerocount - \global\c_page_sides_tolerance \zerocount - \global\c_page_sides_skipmode \zerocount - \global\c_strc_floats_rotation \zerocount - \global\d_page_sides_margin \floatparameter\c!margin - \global\d_page_sides_leftshift \floatparameter\c!leftmargindistance - \global\d_page_sides_rightshift \floatparameter\c!rightmargindistance - \global\d_page_sides_topoffset \floatparameter\c!topoffset - \global\d_page_sides_bottomoffset\floatparameter\c!bottomoffset - \global\c_page_sides_method \floatparameter\c!sidemethod - \global\c_page_one_float_method \floatparameter\c!textmethod - \global\c_page_floats_n_of_top \rootfloatparameter\c!ntop - \global\c_page_floats_n_of_bottom\rootfloatparameter\c!nbottom - \global\d_strc_floats_overflow \zeropoint - \ifconditional\c_strc_floats_par_float - \global\d_strc_floats_top \zeropoint - \global\d_strc_floats_bottom \zeropoint - \strc_floats_calculate_skip\d_page_sides_topskip \c!sidespacebefore - \strc_floats_calculate_skip\d_page_sides_bottomskip\c!sidespaceafter - \strc_floats_calculate_skip\d_page_sides_midskip \c!sidespaceinbetween - \strc_floats_calculate_skip\d_strc_floats_top \c!spacebeforeside - \strc_floats_calculate_skip\d_strc_floats_bottom \c!spaceafterside - \else - \global\d_page_sides_topskip \zeropoint - \global\d_page_sides_bottomskip \zeropoint - \strc_floats_calculate_skip\d_strc_floats_top \c!spacebefore - \strc_floats_calculate_skip\d_strc_floats_bottom\c!spaceafter - \fi - % keyword handling - \ifconditional\c_strc_floats_par_float - \processaction - [\floatparameter\c!sidealign] - [\v!height=>\global\c_page_sides_align\plusone ,% - \v!line=>\global\c_page_sides_align\plustwo ,% (***) - \v!depth=>\global\c_page_sides_align\plusthree,% - \v!grid=>\global\c_page_sides_align\plusfour ,% - \v!halfline=>\global\c_page_sides_align\plusfive ]% - \ifcase\c_page_sides_align\relax % todo: optie v!lokaal => \else - \doifinset\v!height \floatlocation{\global\c_page_sides_align\plusone }% - \doifinset\v!line \floatlocation{\global\c_page_sides_align\plustwo }% - \doifinset\v!depth \floatlocation{\global\c_page_sides_align\plusthree}% - \doifinset\v!grid \floatlocation{\global\c_page_sides_align\plusfour }% - \doifinset\v!halfline\floatlocation{\global\c_page_sides_align\plusfive }% meant for 'none' - \fi - \doifinset\v!high \floatlocation{\global\c_page_sides_skipmode \plusone }% - \doifinset\v!low \floatlocation{\global\c_page_sides_skipmode \plustwo }% - \doifinset\v!fit \floatlocation{\global\c_page_sides_skipmode \plusthree}% - \doifinset\v!tolerant \floatlocation{\global\c_page_sides_tolerance\plusone }% - \doifinset\v!verytolerant\floatlocation{\global\c_page_sides_tolerance\plustwo }% - \else - \processallactionsinset - [\floatlocation]% - [ 90=>\global\c_strc_floats_rotation\commalistelement\relax,% - 180=>\global\c_strc_floats_rotation\commalistelement\relax,% - 270=>\global\c_strc_floats_rotation\commalistelement\relax]% - \fi - \doifelseinset\v!nonumber\floatlocation - {\global\nofloatnumbertrue}% - {\doifelse{\floatcaptionparameter\c!number}\v!yes - {\global\nofloatnumberfalse}% - {\global\nofloatnumbertrue}}% - \doifelseinset\v!none\floatlocation - {\global\nofloatcaptiontrue}% - {\global\nofloatcaptionfalse}% - \doif{\floatcaptionparameter\c!number}\v!none % new - {\global\nofloatcaptiontrue}% - \doifinset\v!effective\floatlocation - {\letfloatparameter \c!leftmargin \effectiveleftskip - \letfloatparameter \c!rightmargin\effectiverightskip - \letfloatcaptionparameter\c!leftmargin \effectiveleftskip - \letfloatcaptionparameter\c!rightmargin\effectiverightskip}% - \ifemptyfloatcaption \ifnofloatnumber - \global\nofloatcaptiontrue - \fi \fi} - -% documenteren in details - -\def\strc_floats_analyze_variables_one - {\doifelse{\floatparameter\c!local}\v!yes\settrue\setfalse\c_page_floats_center_box_global % fout keyword - \ifconditional\c_page_floats_center_box_global - \settrue\c_page_floats_center_box_local - \else - \doifelseinset\v!local\floatlocation\settrue\setfalse\c_page_floats_center_box_local - \fi - \doifelse{\floatparameter\c!freeregion}\v!yes - \settrue\setfalse\c_strc_floats_mark_as_free - \doifnotcommon{\v!always,\v!here,\v!force}\floatlocation % ! ! ! ! ! ! - {\setfalse\c_page_floats_center_box_global - \setfalse\c_page_floats_center_box_local}} - -\permanent\def\naturalfloatheight{\the\naturalfloatwd} -\permanent\def\naturalfloatwidth {\the\naturalfloatht} -\permanent\def\naturalfloatdepth {\the\naturalfloatdp} - -\permanent\def\floatcaptionheight{\the\floatcaptionwd} -\permanent\def\floatcaptionwidth {\the\floatcaptionht} -\permanent\def\floatcaptiondepth {\the\floatcaptiondp} - -\newdimen\naturalfloatwd -\newdimen\naturalfloatht -\newdimen\naturalfloatdp - -\newdimen\floatcaptionwd -\newdimen\floatcaptionht -\newdimen\floatcaptiondp - -\def\strc_floats_set_natural_dimensions#box% - {\global\naturalfloatwd\wd#box\relax - \global\naturalfloatht\ht#box\relax - \global\naturalfloatdp\dp#box\relax} - -\def\strc_floats_set_caption_dimensions#box% - {\global\floatcaptionwd\wd#box\relax - \global\floatcaptionht\ht#box\relax - \global\floatcaptiondp\dp#box\relax} - -\def\doifelsemainfloatbody - {\ifinsidesplitfloat - \ifconditional\splitfloatfirstdone - \doubleexpandafter\secondoftwoarguments - \else - \doubleexpandafter\firstoftwoarguments - \fi - \else - \expandafter\firstoftwoarguments - \fi} - -\let\doifmainfloatbodyelse\doifelsemainfloatbody - -% todo: optional user pars - -\let\currentfloatattribute\empty % to be checked - -\def\floatcaptionattribute - {\iflocation - \ifempty\currentfloatattribute - % safeguard, can be samepage too - \orelse\ifnofloatcaption - \orelse\ifinsidesplitfloat - \ifconditional\splitfloatfirstdone - \else - attr \destinationattribute \currentfloatattribute - \fi - \else - attr \destinationattribute \currentfloatattribute - \fi - \fi} - -% \def\floatcaptionattribute -% {\iflocation -% \ifempty\currentfloatattribute -% % safeguard, can be samepage too -% \orelse\ifnofloatcaption -% % nothing -% \orunless\ifinsidesplitfloat -% attr \destinationattribute \currentfloatattribute -% \orunless\ifconditional\splitfloatfirstdone -% attr \destinationattribute \currentfloatattribute -% \fi -% \fi} - -\newconditional\usesamefloatnumber - -% \startplacefigure[location=here,reference=first, title=first, group=alpha,groupsuffix=.a] -% \externalfigure[dummy][height=2cm] -% \stopplacefigure -% \startplacefigure[location=here,reference=second,title=second,group=alpha,groupsuffix=.b] -% \externalfigure[dummy][height=2cm] -% \stopplacefigure -% -% uses: - -\def\strc_floats_group_index - {\numexpr\clf_listgroupindex{\currentfloat}{\currentfloatgroup}\relax} - -\def\strc_floats_place_packaged_boxes - {\expandafter\strc_floats_place_packaged_boxes_indeed\expandafter{\m_strc_floats_saved_userdata}} - -\def\strc_floats_place_packaged_boxes_indeed#userdata% - {\bgroup - \ifconditional\usesamefloatnumber - \glet\currentfloatnumber \previousfloatnumber - \glet\currentfloatattribute \empty - \glet\currentfloatsynchronize\relax - \else - \edef\currentfloatcounter{\namedcounterparameter\currentfloat\s!name}% - \edef\currentfloatgroup {\floatcaptionparameter\c!group}% - \ifnofloatnumber - \orelse\ifnofloatcaption - \orelse\ifempty\currentfloatgroup - % independent - \iftrialtypesetting\strc_counters_save\currentfloatcounter\fi - \strc_counters_increment\currentfloatcounter - \orelse\ifcase\strc_floats_group_index - % first in group - \iftrialtypesetting\strc_counters_save\currentfloatcounter\fi - \strc_counters_increment\currentfloatcounter - \else - % next in group - \fi - % *1* as an alternative we could set counter parameters here if needed - \strc_counters_register_component - \s!float - \setupcurrentfloatcaption - \floatcaptionparameter - \detokenizedfloatcaptionparameter - \relax - \relax - \relax - [\s!name=\currentfloat,% was c!name - \s!counter=\currentfloatcounter,% - \s!hascaption=\ifnofloatcaption \v!no\else\v!yes\fi,% - \s!hasnumber=\ifnofloatnumber \v!no\else\v!yes\fi,% - \s!hastitle=\ifemptyfloatcaption\v!no\else\v!yes\fi]% - [#userdata]% - \glet\previousfloatnumber \m_strc_counters_last_registered_index - \glet\currentfloatnumber \m_strc_counters_last_registered_index - \glet\currentfloatattribute \m_strc_counters_last_registered_attribute - \glet\currentfloatsynchronize\m_strc_counters_last_registered_synchronize - \fi - % - \iftrialtypesetting\else\global\setfalse\usesamefloatnumber\fi % one shot - % check float box - \strc_floats_set_natural_dimensions\nextbox - \global\setbox\floatbox\vbox{\floatparameter\c!command{\box\nextbox}}% can be anything so no pack - \strc_floats_set_natural_dimensions\floatbox - \ifzeropt\htdp\floatbox - \showmessage\m!floatblocks{11}\empty - \global\setbox\floatbox\vpack - {\dostarttagged\t!floatcontent\empty - \strc_floats_place_empty_box - \dostoptagged}% - \fi - % deal with lack of caption - \global\setbox\floatbox\vpack \floatcaptionattribute - {\doifelsemainfloatbody\currentfloatsynchronize\donothing - \unvbox\floatbox - \ifnofloatcaption - \vss - \fi}% gets rid of the depth (unless tabulate) - \iftrialtypesetting\strc_counters_restore\currentfloatcounter\fi - \egroup - % place the float - \strc_floats_set_box - \strc_floats_get_box - \global\insidefloatfalse} - -\newdimen\availablefloatwidth -\newdimen\availablefloatheight - -\def\strc_floats_set_local_hsize - {\ifconditional\c_page_floats_center_box_local - % also available check here? - \seteffectivehsize - \hsize\localhsize - \else - \doifinset\v!margin\floatlocation % brr, really needed! see wm will be redone - {\hsize\namedmarginblockparameter\empty\c!width}% - \fi - \edef\p_availablewidth {\floatparameter\c!availablewidth }% - \edef\p_availableheight{\floatparameter\c!availableheight}% - \availablefloatwidth \ifempty\p_availablewidth \hsize\else\p_availablewidth \relax\fi - \availablefloatheight\ifempty\p_availableheight\vsize\else\p_availableheight\relax\fi} - -\ifdefined\everyinsidefloat \else \newevery \everyinsidefloat \relax \fi - -\appendtoks - \everyinsidefloat\emptytoks % in case it's called earlier - \strc_float_load_data -\to \everyinsidefloat - -\permanent\def\doifelserightpagefloat - {\unless\ifdoublesided - \expandafter\firstoftwoarguments - \orelse\ifsinglesided - \expandafter\firstoftwoarguments - \orelse\ifodd\purenumber\strc_float_realpage\space - \expandafter\firstoftwoarguments - \else - \expandafter\secondoftwoarguments - \fi} - -\permanent\def\doifelseoddpagefloat - {\ifodd\purenumber\strc_float_realpage\space - \expandafter\firstoftwoarguments - \else - \expandafter\secondoftwoarguments - \fi} - -\aliased\let\doifrightpagefloatelse\doifelserightpagefloat -\aliased\let\doifoddpagefloatelse \doifelseoddpagefloat - -\appendtoks - \enforced\let\rightorleftpageaction\doifelserightpagefloat -\to \everyinsidefloat - -% \let\movesidefloat\gobbleoneargument - -% new : \place...[leftmargin,-2*line]; we need to catch fxtb:2*3 -% watch out: line alone aligns on the line ! ! ! - -\permanent\protected\def\movesidefloat[#settings]% (-)n*line|x=,y= - {\global\d_page_sides_downshift \zeropoint - \global\d_page_sides_extrashift\zeropoint - \ifhastok={#settings}% - \begingroup - \setupcurrentfloat[\c!x=\zeropoint,\c!y=\zeropoint,#settings]% - \ifgridsnapping - \getnoflines{\floatparameter\c!y}% - \global\d_page_sides_downshift\noflines\lineheight - \else - \global\d_page_sides_downshift\floatparameter\c!y - \fi - \global\d_page_sides_extrashift\floatparameter\c!x - \endgroup - \else - \movedownsidefloat[#settings]% - \fi} - -\installcorenamespace{floatmovement} - -\setvalue{\??floatmovement \v!line}{\strc_floats_move_down_line+} -\setvalue{\??floatmovement+\v!line}{\strc_floats_move_down_line+} -\setvalue{\??floatmovement-\v!line}{\strc_floats_move_down_line-} -\setvalue{\??floatmovement \v!hang}{\strc_floats_move_down_hang\plusone} -\setvalue{\??floatmovement+\v!hang}{\strc_floats_move_down_hang\plusone} -\setvalue{\??floatmovement-\v!hang}{\strc_floats_move_down_hang\minusone} - -\setvalue{\??floatmovement-2*\v!line}{\strc_floats_move_down_line{-2}} -\setvalue{\??floatmovement+2*\v!line}{\strc_floats_move_down_line{2}} -\setvalue{\??floatmovement 2*\v!line}{\strc_floats_move_down_line{2}} - -\protected\def\installfloatmovement#1#2{\setvalue{\??floatmovement#1}{#2}} - -\def\strc_floats_move_down#setting% - {\begincsname\??floatmovement#setting\endcsname} - -\def\strc_floats_move_down_line#sign% - {\ifscratchconditionone \else - \global\d_page_sides_downshift\zeropoint - \scratchconditiononetrue - \fi - \global\advance\d_page_sides_downshift#sign\lineheight} - -\def\strc_floats_move_down_hang#lines% - {\ifscratchconditiontwo \else - \global\c_page_sides_n_of_lines\zerocount - \scratchconditiontwotrue - \fi - \global\advance\c_page_sides_n_of_lines#lines\relax} - -\permanent\protected\def\movedownsidefloat[#settings]% already in core - {\unless\ifhastok:{#settings}% - \begingroup - \scratchconditiononefalse - \scratchconditiontwofalse - \normalexpanded{\dorepeatwithcommand[#settings]}\strc_floats_move_down - \endgroup - \fi} - -\permanent\protected\def\hangsidefloat[#number]% - {\global\c_page_sides_n_of_lines#number\relax} - -\def\strc_floats_set_extra_action#rightpagelocation#leftpagelocation% - {\rightorleftpageaction - {\let\extrafloatlocation#rightpagelocation}% - {\let\extrafloatlocation#leftpagelocation}} - -\let\extrafloatlocation\empty - -\installcorenamespace{extrafloataction} - -\setvalue{\??extrafloataction \v!inner}#1{\strc_floats_set_extra_action\v!left \v!right} -\setvalue{\??extrafloataction \v!outer}#1{\strc_floats_set_extra_action\v!right \v!left} -\setvalue{\??extrafloataction\v!innermargin}#1{\strc_floats_set_extra_action\v!leftmargin \v!rightmargin} -\setvalue{\??extrafloataction\v!outermargin}#1{\strc_floats_set_extra_action\v!rightmargin\v!leftmargin} -\setvalue{\??extrafloataction \v!inneredge}#1{\strc_floats_set_extra_action\v!leftedge \v!rightedge} -\setvalue{\??extrafloataction \v!outeredge}#1{\strc_floats_set_extra_action\v!rightedge \v!leftedge} -\setvalue{\??extrafloataction \v!backspace}#1{\strc_floats_set_extra_action\v!backspace \v!cutspace} -\setvalue{\??extrafloataction \v!cutspace}#1{\strc_floats_set_extra_action\v!cutspace \v!backspace} -%setvalue{\??extrafloataction \v!margin}#1{\strc_floats_set_extra_action\v!cutspace \v!backspace} -\setvalue{\??extrafloataction \v!left}#1{\strc_floats_set_extra_action\v!left \v!left} -\setvalue{\??extrafloataction \v!right}#1{\strc_floats_set_extra_action\v!right \v!right} -\setvalue{\??extrafloataction \v!line}#1{} % only -n*line is handled (see ***) -\setvalue{\??extrafloataction \s!unknown}#1{\movedownsidefloat[#1]} - -\def\strc_floats_check_extra_actions % less tracingthis way .... - {\doifnotinset\v!text\floatlocation % fuzzy, text overloads left, since then it's a directive - {\let\extrafloatlocation\empty - % \d_page_sides_downshift will be reset afterwards, and can - % already be set at this point - \processcommacommand[\floatlocation]\strc_floats_check_extra_actions_step - \ifempty\extrafloatlocation \else - \edef\floatlocation{\extrafloatlocation,\floatlocation}% - \setfloatmethodvariables\floatlocation - \fi}} - -\def\strc_floats_check_extra_actions_step#step% - {\csname\??extrafloataction - \ifcsname\??extrafloataction#step\endcsname#step\else\s!unknown\fi - \endcsname{#step}} - -% pas op, maxbreedte niet instellen als plaats=links/rechts - -\def\strc_floats_set_local_dimensions - {\global\d_page_sides_shift \zeropoint % duplicate - \global\d_page_sides_maximum\zeropoint\relax % duplicate - \ifzeropt\d_page_sides_downshift\else - \global\setbox\floatbox\vpack - {\vskip\d_page_sides_downshift - \nointerlineskip - \box\floatbox}% - \fi - \edef\p_minwidth{\floatparameter\c!minwidth}% - \ifempty\p_minwidth - % nothing - \else - \scratchwidth\p_minwidth\relax - \ifdim\wd\floatbox<\scratchwidth - \strc_floats_realign_floatbox_horizontal_two - \fi - \fi - % we can also support edges .. in that case no common but a fast loop - \doifelseinset\v!hanging\floatlocation - {\doifelsecommon{\v!inleft,\v!leftmargin}\floatlocation - {\let\p_maxwidth\leftmarginwidth}% - {\doifelsecommon{\v!inright,\v!rightmargin}\floatlocation - {\let\p_maxwidth\rightmarginwidth}% - {\edef\p_maxwidth{\floatparameter\c!maxwidth}}}}% - {\edef\p_maxwidth{\floatparameter\c!maxwidth}}% - \ifempty\p_maxwidth - % nothing - \else - \scratchwidth\p_maxwidth\relax - \ifdim\wd\floatbox>\scratchwidth - \doifelsecommon{\v!inright,\v!rightmargin,\v!rightedge,\v!inleft,\v!leftmargin,\v!leftedge}\floatlocation - {\global\d_page_sides_maximum\scratchwidth} - {\doifelsecommon{\v!right,\v!left}\floatlocation - \strc_floats_realign_floatbox_horizontal_one - \strc_floats_realign_floatbox_horizontal_two}% - \fi - \fi} - -\def\strc_floats_realign_floatbox_horizontal_one - {\global\setbox\floatbox\hpack to \scratchwidth - {\doifnotinset\v!right\floatlocation\hss - \box\floatbox - \doifnotinset\v!left\floatlocation\hss}} - -\def\strc_floats_realign_floatbox_horizontal_two % why is this - {\global\setbox\floatbox\hpack to \scratchwidth - {\doifnot{\floatparameter\c!location}\v!left\hss - \box\floatbox - \doifnot{\floatparameter\c!location}\v!right\hss}} - -\permanent\protected\def\placefloats - {\page_otr_command_flush_floats} - -\permanent\protected\def\betweenfloatblanko % assumes that spaceafter is present - {\blank[\rootfloatparameter\c!spacebefore]} % or v!back,.... - -% keep as old 1 -% -% \protected\def\doplacefloatbox % used elsewhere -% {%\forgetall % NO -% \whitespace -% \blank[\rootfloatparameter\c!spacebefore] -% \page_otr_command_flush_float_box -% \blank[\rootfloatparameter\c!spaceafter]} -% -% keep as old 2 -% -% \protected\def\doplacefloatbox % used elsewhere -% {%\forgetall % NO -% \whitespace -% \blank[\rootfloatparameter\c!spacebefore] -% \nointerlineskip -% \flushnotes % new per 2014-05-29 : todo: move them up in the mvl -% \nointerlineskip -% \page_otr_command_flush_float_box -% \nointerlineskip -% \blank[\rootfloatparameter\c!spaceafter]} - -\def\strc_floats_apply_skip#1% - {\edef\m_space{\rootfloatparameter#1}% - \ifempty\m_space\orelse\ifx\m_space\v!none\else - \directvspacing\m_space - \fi} - -\permanent\protected\def\doplacefloatbox % used elsewhere - {%\forgetall % NO - \whitespace - \strc_floats_apply_skip\c!spacebefore - \nointerlineskip - \flushnotes % new per 2014-05-29 : todo: move them up in the mvl - \nointerlineskip - \page_otr_command_flush_float_box - % \nointerlineskip % interferes with depth of caption - \strc_floats_apply_skip\c!spaceafter} - -% test case: -% -% \placefigure[page,none]{}{\blackrule[width=\textwidth,height=0.9\textheight,color=green]} -% \placefigure[page,none]{}{\blackrule[width=\textwidth,height=1.0\textheight,color=green]} -% \placefigure[page,none]{}{\blackrule[width=\textwidth,height=1.1\textheight,color=green]} - -% the [#1] will go away - -\def\page_one_place_float_text % this macro should be defined elsewhere - {%\checkwaitingfloats\floatlocationmethod - % todo: check if #1 is indeed \floatlocation or maybe more - \global\floatwidth \wd\floatbox - \global\floatheight \ht\floatbox % forget about the depth - \global\floattextwidth\dimexpr\hsize-\floatwidth-\rootfloatparameter\c!margin\relax - \edef\floatlocation{\floatlocationmethod}% to be sure .. why - \doifelseinset\v!tall\floatlocationmethod - {\floattextheight\dimexpr\pagegoal-\pagetotal-\bigskipamount\relax % ugly, this bigskip - \ifdim\floattextheight>\textheight - \floattextheight\textheight - \fi - \boxmaxdepth\zeropoint\relax % toegevoegd - \ifdim\floattextheight<\floatheight - \floattextheight\floatheight - \fi - \setbox\floattext\vbox to \floattextheight} - {\setbox\floattext\vbox}% - \bgroup - \forgetall - \setupblank - \setupwhitespace % new, also needed for footnotes - \blank[\v!disable] - \hsize\floattextwidth - \ignorespaces} - -\def\strc_floats_stop_text_indeed % todo - {\egroup - \doifnotinset\v!tall\floatlocation - {\floattextheight\ifdim\ht\floattext<\floatheight\floatheight\else\ht\floattext\fi}% - \setbox\floatbox\vpack to \floattextheight - {\hsize\floatwidth - \doifelseinset\v!both\floatlocation - {\doifelseinset\v!low\floatlocation - {\vfill\box\floatbox} - {\doifelseinset\v!middle\floatlocation - {\vfill\box\floatbox\vfill} - {\box\floatbox\vfill}}} - {\box\floatbox\vfill}}% - \setbox\floattext\vpack to \floattextheight - {\hsize\floattextwidth - \doifelseinset\v!low\floatlocation - {\vfill - \box\floattext - \doifinset\c!offset\floatlocation{\whitespace\blank}} - {\doifelseinset\v!middle\floatlocation - {\vfill - \box\floattext - \vfill} - {\doifinset\v!offset\floatlocation{\whitespace\blank}% - \box\floattext - \vfill}}}% - \doifelseinset\v!right\floatlocation - {\setbox\floatbox\hpack to \hsize - {\box\floattext - \hfill - \box\floatbox}} - {\setbox\floatbox\hpack to \hsize - {\box\floatbox - \hfill - \box\floattext}}% - \baselinecorrection - \whitespace - \blank[\rootfloatparameter\c!spacebefore]% - \doifnotinset\v!tall\floatlocation - {\dp\floatbox\openstrutdepth}% dp\strutbox}% % toegevoegd - \box\floatbox - \dostoptagged - \blank[\rootfloatparameter\c!spaceafter]% - \strc_floats_end_text_group - \page_floats_report_total} - -\permanent\def\borderedfloatbox - {\begingroup - \setupcurrentfloat[\c!location=\v!normal,\c!width=\v!fit,\c!height=\v!fit]% - \inheritedfloatframed{\box\floatbox}% - \endgroup} - -% minwidth=fit,width=max : no overshoot, as wide as graphic - -% keep these as reference: -% -% \def\strc_floats_align_content_indeed -% {\alignstrutmode\zerocount -% \doifnotcommon\floatcaptionlocation{\v!outermargin,\v!innermargin,\v!leftmargin,\v!rightmargin} -% {\shiftalignedline -% {\floatparameter\c!leftmargin }{\floatparameter\c!rightmargin}% -% {\floatparameter\c!innermargin}{\floatparameter\c!outermargin}}% -% \alignedline{\floatparameter\c!location}\v!middle} -% -% \def\strc_floats_align_caption_indeed -% {\alignstrutmode\zerocount -% \shiftalignedline -% {\floatcaptionparameter\c!leftmargin }{\floatcaptionparameter\c!rightmargin}% -% {\floatcaptionparameter\c!innermargin}{\floatcaptionparameter\c!outermargin}% -% \alignedline{\floatparameter\c!location}\v!middle} -% -% Test case: -% -% \setupfloats[location=left] -% \setupfloatcaption[width=max] -% -% \startfloatcombination -% \placefigure{}{} -% \placefigure{}{} -% \stopfloatcombination - -%D In a floatcombination we ignore the margins .. if that is ever needed we need another -%D state (instead of local). - -\def\strc_floats_align_indeed - {\alignedline{\floatparameter\c!location}\v!middle} - -\def\strc_floats_shift_indeed#1% - {\shiftalignedline{#1\c!leftmargin}{#1\c!rightmargin}{#1\c!innermargin}{#1\c!outermargin}} - -\def\strc_floats_align_content_indeed - {\alignstrutmode\zerocount - \ifx\forcedfloatmethod\v!local \else - \doifnotcommon\floatcaptionlocation{\v!outermargin,\v!innermargin,\v!leftmargin,\v!rightmargin} - {\strc_floats_shift_indeed\floatparameter}% - \expandafter\strc_floats_align_indeed - \fi} - -\def\strc_floats_align_caption_indeed - {\alignstrutmode\zerocount - \ifx\forcedfloatmethod\v!local - \expandafter\strc_floats_align_indeed_local - \else - \strc_floats_shift_indeed\floatcaptionparameter - \expandafter\strc_floats_align_indeed - \fi} - -% \def\strc_floats_align_indeed_local#1% -% {\begingroup -% \hsize\wd\floatbox -% \strc_floats_align_indeed{#1}% -% \endgroup} - -\let\strc_floats_align_indeed_local\firstofoneargument - -\newdimen\d_strc_floats_content -\newdimen\d_strc_float_temp_height -\newdimen\d_strc_float_temp_width - -\newconditional\c_floats_adapt_to_caption_width -\newconditional\c_floats_store_minimal_package - -\def\captionminwidth {15\bodyfontsize} % can become parameter (but what name) -\def\captionovershoot{2\emwidth} % can become parameter (but what name) - -\let\strc_floats_mark_pag_as_free\relax - -\def\strc_floats_set_page_variant - {\bgroup - \strc_floats_set_local_hsize - \ifcase\c_strc_floats_rotation\else - \swapdimens\hsize\vsize - \fi - \forgetall - \postponenotes - \dontcomplain - \setbox\b_strc_floats_content\vpack{\borderedfloatbox}% - \let\strc_floats_align_content\strc_floats_align_content_indeed - \let\strc_floats_align_caption\strc_floats_align_caption_indeed - \strc_floats_check_caption_content - \d_strc_floats_content\wd\b_strc_floats_content - \ifcase\floatparameter\c!method - % nothing - \or - % automatic - \ifnofloatcaption - \strc_floats_prepare_no_caption - \strc_floats_set_caption_dimensions\voidbox - %\page_backgrounds_add_local_to_box\floatbox % was \doglobal but not needed - \else - % todo: installable maken, variant/method=auto vs macro - \strc_floats_prepare_page_caption - %\page_backgrounds_add_local_to_box\b_strc_floats_content - \setbox\b_strc_floats_caption\hbox % text - {\floatcaptionparameter\c!command{\box\b_strc_floats_caption}}% - \strc_floats_set_caption_dimensions\b_strc_floats_caption - %\moveboxontogrid\b_strc_floats_caption{\floatcaptionparameter\c!grid}\d_strc_floats_caption_height - %\page_backgrounds_add_local_to_box\b_strc_floats_caption - \strc_floats_build_box - \fi - \or - % semi automatic - \or - % manual - \fi - \ifconditional\c_floats_store_minimal_package - % nothing - \orelse\ifcase\c_strc_floats_rotation - \doifnotinset\v!margin\floatlocation % brr, really needed! see wm - {\postcenterfloatbox\d_strc_floats_content - \strc_floats_mark_pag_as_free}% - % mark as free not done here - \else - \global\setbox\floatbox\vpack - {\rotate[\c!rotation=\number\c_strc_floats_rotation]{\box\floatbox}}% - \strc_floats_mark_pag_as_free - \fi - \egroup} - -\def\strc_floats_prepare_no_caption - {\global\setbox\floatbox\vpack % pas op als wd groter dan hsize - {\ifinsidecolumns\ifdim\wd\b_strc_floats_content>\hsize - \let\strc_floats_align_content\relax - \fi\fi - \strc_floats_align_content{\copy\b_strc_floats_content}}} - -\def\strc_floats_prepare_page_caption - {\edef\p_strc_floats_caption_width {\floatcaptionparameter\c!width}% - \edef\p_strc_floats_caption_minwidth{\floatcaptionparameter\c!minwidth}% - \edef\p_strc_floats_caption_align {\floatcaptionparameter\c!align}% - \dostarttagged\t!floatcaption\empty - \doifcommonelse\floatcaptionlocation{\v!top,\v!bottom} - {\strc_floats_prepare_page_caption_top_bottom} - {\ifx\p_strc_floats_caption_width\v!fit - \strc_floats_prepare_side_auto_caption - \orelse\ifx\p_strc_floats_caption_width\v!max - \strc_floats_prepare_side_auto_caption - \else - \strc_floats_prepare_side_width_caption - \fi}% - \dostoptagged} - -\def\strc_floats_prepare_page_caption_top_bottom - {\ifx\p_strc_floats_caption_width\v!fit - \strc_floats_prepare_page_caption_top_bottom_fit_max - \orelse\ifx\p_strc_floats_caption_width\v!max - \strc_floats_prepare_page_caption_top_bottom_fit_max - \else - \strc_floats_prepare_side_width_caption % new, special effects (see icare) - \fi} - -\def\strc_floats_prepare_page_caption_top_bottom_fit_max - {\unless\ifx\p_strc_floats_caption_minwidth\v!fit - \strc_floats_prepare_stack_caption_fixed - \orelse\ifx\p_strc_floats_caption_width\v!max - \strc_floats_prepare_stack_caption_max - \orelse\ifdim\wd\b_strc_floats_caption>\wd\b_strc_floats_content % wider caption - \ifx\p_strc_floats_caption_width\v!fit - \strc_floats_prepare_stack_caption_auto - \else - \strc_floats_prepare_stack_caption_width - \fi - \else - \strc_floats_prepare_stack_caption_min - \fi} - -\def\strc_floats_caption_set_align - {\edef\m_align{\v!reset\ifempty\p_strc_floats_caption_align\else,\fi\p_strc_floats_caption_align}% - \doifinset\v!tolerant \floatcaptionlocation{\edef\m_align{\m_align,\v!tolerant}}% - \doifinset\v!verytolerant\floatcaptionlocation{\edef\m_align{\m_align,\v!verytolerant}}% - \doifinset\v!stretch \floatcaptionlocation{\edef\m_align{\m_align,\v!stretch}}% - \setupalign[\m_align]} - -\def\strc_floats_prepare_side_auto_caption - {\scratchdimen\dimexpr\hsize-\wd\b_strc_floats_content-\floatparameter\c!margin\relax - \ifdim\wd\b_strc_floats_caption>\scratchdimen - \ifdim\wd\b_strc_floats_caption<1.3\scratchdimen - \scratchdimen0.8\scratchdimen - \fi - \fi - \setbox\b_strc_floats_caption\vbox - {\strc_floats_caption_set_align - \hsize\scratchdimen - \strc_floats_make_complete_caption}} - -\def\strc_floats_prepare_side_width_caption - {\setbox\b_strc_floats_caption\vbox - {\strc_floats_caption_set_align - \hsize\floatcaptionparameter\c!width - \strc_floats_make_complete_caption}} - -\def\strc_floats_prepare_stack_caption_fixed - {\setbox\b_strc_floats_caption\vbox - {\strc_floats_caption_set_align - \hsize\floatcaptionparameter\c!minwidth % special effects - \strc_floats_make_complete_caption}} - -\def\strc_floats_prepare_stack_caption_max - {\setbox\b_strc_floats_caption\vbox - {\strc_floats_caption_set_align - \hsize\wd\b_strc_floats_content - \strc_floats_make_complete_caption}} - -\def\strc_floats_prepare_stack_caption_width - {\setbox\b_strc_floats_caption\vbox - {\strc_floats_caption_set_align - \hsize\floatcaptionparameter\c!width - \strc_floats_make_complete_caption}} - -\def\strc_floats_prepare_stack_caption_min - {\setbox\b_strc_floats_caption\vbox - {\strc_floats_caption_set_align - \hsize\wd\b_strc_floats_content - \ifempty\p_strc_floats_caption_align - \raggedcenter % on purpose overloads align ! - \fi - \strc_floats_make_complete_caption}} - -\def\strc_floats_prepare_stack_caption_auto - {\ifempty\p_strc_floats_caption_align \else - \doifnotinset\v!middle\p_strc_floats_caption_align{\let\captionovershoot\!!zeropoint}% - \fi - \edef\captionhsize{\the\wd\b_strc_floats_content}% - \scratchwidth\floatcaptionparameter\c!maxwidth\relax - \ifconditional\c_floats_adapt_to_caption_width - \let\captionminwidth \!!zeropoint - \let\captionovershoot\!!zeropoint - \fi - \ifdim\captionhsize>\scratchwidth - % float is wider than \hsize - \setbox\b_strc_floats_caption\vbox - {\settrialtypesetting - \strc_floats_caption_set_align - \hsize\scratchwidth - \notesenabledfalse - \strc_floats_make_complete_caption}% - \ifdim\ht\scratchbox>\lineheight % more lines - \setbox\b_strc_floats_caption\vbox - {\strc_floats_caption_set_align - \hsize\dimexpr\captionhsize-\captionovershoot\relax - \ifdim\hsize<\captionminwidth\relax - \hsize\scratchwidth - \fi - \strc_floats_make_complete_caption}% - \else - \setbox\b_strc_floats_caption\vbox - {\strc_floats_caption_set_align - \hsize\scratchwidth - \strc_floats_make_complete_caption}% - \fi - \else - % float is smaller of equal to \hsize - \ifdim\captionhsize<\captionminwidth\relax - \scratchdimen\captionminwidth % float smaller than min width - \edef\captionhsize{\the\scratchdimen}% -% \ifconditional\c_floats_adapt_to_caption_width -% \setbox\b_strc_floats_content\hpack to \captionhsize{\hss\box\b_strc_floats_content\hss}% -% \fi - \fi - \setbox\scratchbox\vbox % test with overshoot - {\settrialtypesetting - \scratchdimen\dimexpr\captionhsize+\captionovershoot+3\emwidth\relax % 3em is an average word length - \ifdim\scratchdimen<\hsize - \hsize\scratchdimen - \fi - \notesenabledfalse - \strc_floats_make_complete_caption}% - \ifdim\ht\scratchbox>\lineheight - % at least an average word longer than a line - \setbox\b_strc_floats_caption\vbox - {\strc_floats_caption_set_align - \scratchdimen\dimexpr\captionhsize+\captionovershoot\relax - \ifdim\scratchdimen<\hsize - \hsize\scratchdimen - \fi - \strc_floats_make_complete_caption}% - \orelse\if\empty\p_strc_floats_caption_align - \setbox\b_strc_floats_caption\vbox - {\strc_floats_caption_set_align - \hsize\captionhsize - \raggedcenter % overloads - \strc_floats_make_complete_caption}% - \else - \setbox\b_strc_floats_caption\vbox - {\strc_floats_caption_set_align - \hsize\captionhsize - \strc_floats_make_complete_caption}% - \fi - \fi} - -\def\strc_floats_between_stack - {\endgraf - \nointerlineskip - \floatcaptionparameter\c!inbetween - \endgraf} - -\def\strc_floats_build_box_default % done - {\strc_floats_align_content{\box\b_strc_floats_content}} - -\def\strc_floats_build_box_next_right#1% - {\ifconditional\c_strc_floats_par_float \hpack \else \expandafter \strc_floats_align_content \fi % skip, no pack - {\d_strc_float_temp_height\ht\b_strc_floats_content - \box\b_strc_floats_content - \doifnotinset\v!hang\floatcaptionlocation - {\dotfskip{\floatcaptionparameter\c!distance}}% - \vbox to\d_strc_float_temp_height{#1}}} - -\def\strc_floats_build_box_next_left#1% - {\ifconditional\c_strc_floats_par_float \hpack \else \expandafter \strc_floats_align_content \fi % skip, no pack - {\d_strc_float_temp_height\ht\b_strc_floats_content - \vbox to\d_strc_float_temp_height{#1}% - \doifnotinset\v!hang\floatcaptionlocation - {\dotfskip{\floatcaptionparameter\c!distance}}% - \box\b_strc_floats_content}} - -\def\strc_floats_build_box_next_outer - {\doifelserightpagefloat\strc_floats_build_box_next_right\strc_floats_build_box_next_left} - -\def\strc_floats_build_box_next_inner - {\doifelserightpagefloat\strc_floats_build_box_next_left\strc_floats_build_box_next_right} - -\def\strc_floats_build_box_next_right_hang#1% - {\ifconditional\c_strc_floats_par_float \hpack \else \expandafter \strc_floats_align_content \fi - {\d_strc_float_temp_height\ht\b_strc_floats_content - \box\b_strc_floats_content - \vbox to\d_strc_float_temp_height{#1}}} - -\def\strc_floats_build_box_next_left_hang#1% - {\ifconditional\c_strc_floats_par_float \hpack \else \expandafter \strc_floats_align_content \fi - {\d_strc_float_temp_height\ht\b_strc_floats_content - \vbox to\d_strc_float_temp_height{#1}% - \box\b_strc_floats_content}} - -\def\strc_floats_build_box_next_right_margin_indeed#1#2% - {\ifconditional\c_strc_floats_par_float - \hpack\bgroup - \d_strc_float_temp_height\ht\b_strc_floats_content - \box\b_strc_floats_content - \hsmash{\hskip#1\vbox to\d_strc_float_temp_height{#2}}% - \egroup - \else - \begingroup - \d_strc_float_temp_height\ht\b_strc_floats_content - \setbox\scratchboxone\vbox{#2}% - \ifdim\htdp\scratchboxone>\htdp\b_strc_floats_content - \global\d_strc_floats_overflow\dimexpr\htdp\scratchboxone-\htdp\b_strc_floats_content\relax - \fi - \ht\scratchboxone\d_strc_float_temp_height - \everyrightofalignedline{\hsmash{\hskip#1\box\scratchboxone}}% - \strc_floats_align_content{\box\b_strc_floats_content}% - \endgroup - \fi} - -\def\strc_floats_build_box_next_left_margin_indeed#1#2% - {\ifconditional\c_strc_floats_par_float - \hpack\bgroup - \d_strc_float_temp_height\ht\b_strc_floats_content - \hsmash{\hskip-\dimexpr#1+\wd\b_strc_floats_caption\relax\vbox to\d_strc_float_temp_height{#2}}% - \box\b_strc_floats_content - \egroup - \else - \begingroup - \d_strc_float_temp_height\ht\b_strc_floats_content - \setbox\scratchboxone\vbox{#2}% - \ifdim\htdp\scratchboxone>\htdp\b_strc_floats_content - \global\d_strc_floats_overflow\dimexpr\htdp\scratchboxone-\htdp\b_strc_floats_content\relax - \fi - \ht\scratchboxone\d_strc_float_temp_height - \everyleftofalignedline{\hsmash{\hskip-\dimexpr#1+\wd\scratchboxone\relax\box\scratchboxone}}% - \strc_floats_align_content{\box\b_strc_floats_content}% - \endgroup - \fi} - -\def\strc_floats_build_box_next_right_margin - {\strc_floats_build_box_next_right_margin_indeed\rightmargindistance} - -\def\strc_floats_build_box_next_left_margin - {\strc_floats_build_box_next_left_margin_indeed \leftmargindistance} - -\def\strc_floats_build_box_next_outer_margin - {\doifelserightpagefloat - {\strc_floats_build_box_next_right_margin_indeed\rightmargindistance} - {\strc_floats_build_box_next_left_margin_indeed \rightmargindistance}} - -\def\strc_floats_build_box_next_inner_margin - {\doifelserightpagefloat - {\strc_floats_build_box_next_left_margin_indeed \leftmargindistance} - {\strc_floats_build_box_next_right_margin_indeed\leftmargindistance}} - -\def\strc_floats_build_box_next % beware, we first check on left/rightmargin because there can be left/right also - {\let\next\strc_floats_build_box_next_left - \processallactionsinset[\floatcaptionlocation] - [ \v!outermargin=>\let\next\strc_floats_build_box_next_outer_margin, - \v!innermargin=>\let\next\strc_floats_build_box_next_inner_margin, - \v!leftmargin=>\let\next\strc_floats_build_box_next_left_margin, - \v!rightmargin=>\let\next\strc_floats_build_box_next_right_margin, - \v!lefthanging=>\let\next\strc_floats_build_box_next_left_hang, - \v!righthanging=>\let\next\strc_floats_build_box_next_right_hang, - \v!outer=>\let\next\strc_floats_build_box_next_outer, - \v!inner=>\let\next\strc_floats_build_box_next_inner, - \v!left=>\let\next\strc_floats_build_box_next_left, - \v!right=>\let\next\strc_floats_build_box_next_right]% - \next} - -\def\strc_floats_build_box_side - {\ifconditional\c_strc_floats_par_float - \let\next\strc_floats_build_box_high - \else - \let\next\strc_floats_build_box_middle - \processallactionsinset[\floatcaptionlocation] - [ \v!low=>\let\next\strc_floats_build_box_low, - \v!middle=>\let\next\strc_floats_build_box_middle, - \v!high=>\let\next\strc_floats_build_box_high]% - \fi - \next} - -\def\strc_floats_flush_right_caption_hang - {\hsmash{\rlap{\dotfskip{\floatcaptionparameter\c!distance}\box\b_strc_floats_caption}}} - -\def\strc_floats_flush_left_caption_hang - {\hsmash{\llap{\box\b_strc_floats_caption\dotfskip{\floatcaptionparameter\c!distance}}}} - -\def\strc_floats_flush_caption_hang - {\doifelseinset\v!righthanging\floatcaptionlocation - {\strc_floats_flush_right_caption_hang} - {\doifelseinset\v!lefthanging\floatcaptionlocation - {\strc_floats_flush_left_caption_hang} - {\doifelseinset\v!hang\floatcaptionlocation - {\doifelseinset\v!outer\floatcaptionlocation - {\doifelserightpagefloat{\strc_floats_flush_right_caption_hang}{\strc_floats_flush_left_caption_hang}} - {\doifelseinset\v!right\floatcaptiondirectives - {\strc_floats_flush_right_caption_hang} - {\strc_floats_flush_left_caption_hang}}} - {\box\b_strc_floats_caption}}}} - -\def\strc_floats_build_box_high - {\strc_floats_build_box_next{\strc_floats_between_stack\strc_floats_flush_caption_hang\vfill}} - -\def\strc_floats_build_box_low - {\strc_floats_build_box_next{\vfill\strc_floats_flush_caption_hang\strc_floats_between_stack}} - -\def\strc_floats_build_box_middle - {\strc_floats_build_box_next{\vfill\box\b_strc_floats_caption\vfill}} - -% \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\strc_floats_build_box_top_stack_normal_overlay - {\vbox to \ht\b_strc_floats_content{\vss\strc_floats_build_box_top_stack_normal_content}} - -\def\strc_floats_build_box_top_stack_normal_content - {\d_strc_float_temp_width\wd\b_strc_floats_content - \ifconditional\c_strc_floats_par_float - \hpack{\strc_floats_locate_side_float{\box\b_strc_floats_caption}}% - \strc_floats_between_stack - \hpack{\hbox{\box\b_strc_floats_content}}% - \else - \page_otr_command_set_float_hsize - \hpack{\strc_floats_locate_text_float{\box\b_strc_floats_caption}} - \strc_floats_between_stack - \hpack{\strc_floats_align_content{\box\b_strc_floats_content}}% - \fi} - -\def\strc_floats_build_box_bottom_stack_normal_overlay - {\vbox to \ht\b_strc_floats_content{\strc_floats_build_box_bottom_stack_normal_content\vss}} - -\def\strc_floats_build_box_bottom_stack_normal_content - {\d_strc_float_temp_width\wd\b_strc_floats_content - \ifconditional\c_strc_floats_par_float - \hpack{\hpack{\box\b_strc_floats_content}}% - \strc_floats_between_stack - \hpack{\strc_floats_locate_side_float{\box\b_strc_floats_caption}}% - \else - \page_otr_command_set_float_hsize - \hpack{\strc_floats_align_content{\box\b_strc_floats_content}}% - \strc_floats_between_stack - \hpack{\strc_floats_locate_text_float{\box\b_strc_floats_caption}}% - \fi} - -\def\strc_floats_build_box_top_stack_normal - {\doifelseinset\v!overlay{\floatcaptionparameter\c!location} - \strc_floats_build_box_top_stack_normal_overlay - \strc_floats_build_box_top_stack_normal_content} - -\def\strc_floats_build_box_bottom_stack_normal - {\doifinset\v!overlay{\floatcaptionparameter\c!location} - \strc_floats_build_box_bottom_stack_normal_overlay - \strc_floats_build_box_bottom_stack_normal_content} - -\def\strc_floats_build_box_top_stack_grid - {\dp\b_strc_floats_caption\strutdepth - \setbox\scratchbox\vbox - {\d_strc_float_temp_width\wd\b_strc_floats_content - \hsize\d_strc_float_temp_width - \ifconditional\c_strc_floats_par_float - \strc_floats_locate_side_float{\box\b_strc_floats_caption}% - \vss\strc_floats_between_stack - \hpack{\box\b_strc_floats_content}% - \else - \page_otr_command_set_float_hsize - \strc_floats_locate_text_float{\box\b_strc_floats_caption}% - \vss\strc_floats_between_stack - \strc_floats_align_content{\box\b_strc_floats_content}% - \fi}% - \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy - \vpack to \noflines\lineheight{\unvbox\scratchbox}} - -\def\strc_floats_build_box_bottom_stack_grid - {\dp\b_strc_floats_caption\strutdepth - \setbox\scratchbox\vbox - {\d_strc_float_temp_width\wd\b_strc_floats_content - \hsize\d_strc_float_temp_width - \ifconditional\c_strc_floats_par_float - \hpack{\box\b_strc_floats_content}% - \vss\strc_floats_between_stack - \strc_floats_locate_side_float{\box\b_strc_floats_caption}% - \else - \page_otr_command_set_float_hsize - \strc_floats_align_content{\box\b_strc_floats_content}% - \vss\strc_floats_between_stack - \strc_floats_locate_text_float{\box\b_strc_floats_caption}% - \fi}% - \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy - \vpack to \noflines\lineheight{\unvbox\scratchbox}} - -\def\strc_floats_build_box_top_stack_stretch - {\dp\b_strc_floats_caption\strutdepth - \setbox\scratchbox\vpack - {\strc_floats_align_caption{\copy\b_strc_floats_caption}% - \strc_floats_align_content{\copy\b_strc_floats_content}}% - \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy - \vbox to \noflines\lineheight % pack ? - {\d_strc_float_temp_width\wd\b_strc_floats_content - \hsize\d_strc_float_temp_width - \ifconditional\c_strc_floats_par_float - \strc_floats_locate_side_float{\box\b_strc_floats_caption}% - \vss\strc_floats_between_stack\vss - \hpack{\box\b_strc_floats_content}% - \else - \page_otr_command_set_float_hsize - \strc_floats_locate_text_float{\box\b_strc_floats_caption}% - \vss\strc_floats_between_stack\vss - \strc_floats_align_content{\box\b_strc_floats_content}% - \fi}} - -\def\strc_floats_build_box_bottom_stack_stretch - {\dp\b_strc_floats_caption\strutdepth - \setbox\scratchbox\vpack - {\strc_floats_align_content{\copy\b_strc_floats_content}% - \strc_floats_align_caption{\copy\b_strc_floats_caption}}% - \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy - \vbox to \noflines\lineheight - {\d_strc_float_temp_width\wd\b_strc_floats_content - \hsize\d_strc_float_temp_width - \ifconditional\c_strc_floats_par_float - \hpack{\box\b_strc_floats_content}% - \vss\strc_floats_between_stack\vss - \strc_floats_locate_side_float{\box\b_strc_floats_caption}% - \else - \page_otr_command_set_float_hsize - \strc_floats_align_content{\box\b_strc_floats_content}% - \vss\strc_floats_between_stack\vss - \strc_floats_locate_text_float{\box\b_strc_floats_caption}% - \fi}} - -\def\strc_floats_build_box_top - {\let\next\strc_floats_build_box_top_stack_normal - \processfirstactioninset[\floatcaptionparameter\c!location] - [ \v!grid=>\let\next\strc_floats_build_box_top_stack_grid, - \v!lines=>\let\next\strc_floats_build_box_top_stack_stretch]% was \v!grid but interfered - \next} - -\def\strc_floats_build_box_bottom - {\let\next\strc_floats_build_box_bottom_stack_normal - \processfirstactioninset[\floatcaptionparameter\c!location] - [ \v!grid=>\let\next\strc_floats_build_box_bottom_stack_grid, - \v!lines=>\let\next\strc_floats_build_box_bottom_stack_stretch]% was \v!grid but interfered - \next} - -\def\strc_floats_relocate_caption_right#1{\strc_floats_align_caption{\hbox to \d_strc_float_temp_width{\hss#1}}} -\def\strc_floats_relocate_caption_left #1{\strc_floats_align_caption{\hbox to \d_strc_float_temp_width{#1\hss}}} - -\permanent\protected\def\installfloatboxbuilder#1#2{\setvalue{\??floatbuilder#1}{#2}} - -\def\strc_floats_build_box - {\strc_floats_build_box_before - \global\setbox\floatbox\vbox % pack ? probably not - {\strc_floats_set_local_hsize - \forgetall - \ifconditional\c_floats_store_minimal_package - \strc_floats_build_box_separate_make - \else - % \let\floatcaptionarrangement\s!default - \let\floatcaptionarrangement\v!bottom % for Alan - \processcommacommand[\floatcaptionparameter\c!location]\strc_floats_build_box_step - \ifcsname\??floatbuilder\floatcaptionarrangement\endcsname - \lastnamedcs - \else - \strc_floats_build_box_default - \fi - \fi}% - \strc_floats_build_box_after} - -% \let\strc_floats_build_box_before\relax -% \let\strc_floats_build_box_after \relax - -\def\strc_floats_build_box_before - {\let\currentfloatframed\currentfloat - \floatwidth\wd - \ifdim\wd\b_strc_floats_content>\wd\b_strc_floats_caption - \b_strc_floats_content\else\b_strc_floats_caption - \fi} - -\def\strc_floats_build_box_after - {\doifelseframed\floatframedparameter\strc_floats_build_box_after_indeed\relax} - -\def\strc_floats_build_box_after_indeed - {\global\setbox\floatbox\hpack - {\edef\m_width{\floatframedparameter\c!width}% - \ifx\m_width\v!fit - \let\m_width\floatwidth - \orelse\ifx\m_width\v!broad - \let\m_width\v!fit - \fi - \letfloatframedparameter\c!strut\v!no - \letfloatframedparameter\c!width\m_width - \inheritedfloatframedframed - {\box\floatbox}}} - -% special purpose: used in floatcombinations -% -% todo : keep float content and caption separated in local - -\newbox\b_strc_floats_separate_content -\newbox\b_strc_floats_separate_caption - -\def\strc_floats_build_box_separate_set - {\settrue\c_floats_adapt_to_caption_width - \settrue\c_floats_store_minimal_package} - -% \def\strc_floats_build_box_separate_make -% {\offinterlineskip -% \vpack to \onepoint{\box\b_strc_floats_content}\break -% \vpack to \onepoint{\box\b_strc_floats_caption}} - -%D Remark for \LMTX: we don't want to migrate inserts here so we unpack -%D (could be a flag). When migrated, the inserts end up in the vertical -%D list and we no longer have just a box (but inserts and lines again). - -\def\strc_floats_build_box_separate_make - {\savebox\??localfloatstack{\number\numexpr\c_strc_localfloats_n+1\relax:a}{\box\b_strc_floats_content}% - \savebox\??localfloatstack{\number\numexpr\c_strc_localfloats_n+1\relax:b}{\box\b_strc_floats_caption}} - -\protected\def\strc_floats_build_box_separate_split#1% - {\global\setbox\b_strc_floats_separate_content\vpack{\foundbox\??localfloatstack{\number#1:a}}% - \global\setbox\b_strc_floats_separate_caption\tpack{\foundbox\??localfloatstack{\number#1:b}}} - -% \def\strc_floats_build_box_step#1% -% {\doifdefined{\??floatbuilder#1}{\def\floatcaptionarrangement{#1}\quitcommalist}} - -\def\strc_floats_build_box_step#1% - {\ifcsname\??floatbuilder#1\endcsname - \def\floatcaptionarrangement{#1}% \let\floatcaptionarrangement\commalistelement - \quitcommalist - \fi} - -\def\strc_floats_locate_text_float - {\let\next\strc_floats_align_caption - \processallactionsinset[\floatcaptionparameter\c!location] - [ \v!left=>\let\next\strc_floats_relocate_caption_left, - \v!right=>\let\next\strc_floats_relocate_caption_right, - \v!inner=>\doifelserightpagefloat{\let\next\strc_floats_relocate_caption_left }{\let\next\strc_floats_relocate_caption_right}, - \v!outer=>\doifelserightpagefloat{\let\next\strc_floats_relocate_caption_right}{\let\next\strc_floats_relocate_caption_left }]% - \next} - -\installfloatboxbuilder \v!none \strc_floats_build_box_default -\installfloatboxbuilder \s!default \strc_floats_build_box_default -\installfloatboxbuilder \v!high \strc_floats_build_box_high -\installfloatboxbuilder \v!low \strc_floats_build_box_low -\installfloatboxbuilder \v!middle \strc_floats_build_box_middle - -\installfloatboxbuilder \v!rightmargin \strc_floats_build_box_side % added 2016-08-23 -\installfloatboxbuilder \v!leftmargin \strc_floats_build_box_side % added 2016-08-23 -\installfloatboxbuilder \v!innermargin \strc_floats_build_box_side % added 2016-08-23 -\installfloatboxbuilder \v!outermargin \strc_floats_build_box_side % added 2016-08-23 - -\installfloatboxbuilder \v!left \strc_floats_build_box_side -\installfloatboxbuilder \v!right \strc_floats_build_box_side -\installfloatboxbuilder \v!inner \strc_floats_build_box_side % added 2016-08-23 -\installfloatboxbuilder \v!outer \strc_floats_build_box_side % added 2016-08-23 - -\installfloatboxbuilder \v!lefthanging \strc_floats_build_box_side % added 2016-08-23 -\installfloatboxbuilder \v!righthanging \strc_floats_build_box_side % added 2016-08-23 -\installfloatboxbuilder \v!hang \strc_floats_build_box_side % added 2016-08-23 - -\installfloatboxbuilder \v!top \strc_floats_build_box_top -\installfloatboxbuilder \v!bottom \strc_floats_build_box_bottom - -% \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 - -% This might move to page-flt: - -\newif\ifpostponecolumnfloats \postponecolumnfloatsfalse % don't change - -\setnewconstant\postcenterfloatmethod\plusone - -\permanent\def\postcenterfloatbox#1% - {\scratchdimen - \ifcase\postcenterfloatmethod - #1% \wd\floatbox - \orelse\ifinsidecolumns - \ifpostponecolumnfloats\makeupwidth\else#1\fi - \orelse\ifdim#1>\hsize - \hsize - \else - \wd\floatbox - \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 - {\ifconditional\c_page_floats_center_box_global - \donetrue - \orelse\ifconditional\c_page_floats_center_box_local - \donetrue - \else - \donefalse - \fi - \ifdim\scratchdimen>\effectivehsize - \donefalse - \fi - \hss\ifdone\hskip\effectiveleftskip\fi - \box\floatbox - \ifdone\hskip\effectiverightskip\fi\hss}} - -\def\strc_floats_set_paragraph_variant - {\bgroup - \forgetall - \postponenotes - \dontcomplain - \setbox\b_strc_floats_content\vbox{\borderedfloatbox}% \vpack >? - %\page_backgrounds_add_local_to_box\b_strc_floats_content - \ifnofloatcaption - \global\setbox\floatbox\vpack{\box\b_strc_floats_content}% - \else - \strc_floats_check_caption_content - \strc_floats_prepare_side_caption - \setbox\b_strc_floats_caption\hbox{\floatcaptionparameter\c!command{\box\b_strc_floats_caption}}% \hpack ? - %\moveboxontogrid\b_strc_floats_caption{\floatcaptionparameter\c!grid}\d_strc_floats_caption_height - %\page_backgrounds_add_local_to_box\b_strc_floats_caption - \strc_floats_build_side_box - \fi - \egroup} - -\def\strc_floats_prepare_side_caption - {\dostarttagged\t!floatcaption\empty - \edef\p_strc_floats_caption_width{\floatcaptionparameter\c!width}% - \edef\p_strc_floats_caption_align{\floatcaptionparameter\c!align}% - \ifx\p_strc_floats_caption_width\v!max - \strc_floats_prepare_side_caption_max - \orelse\ifx\p_strc_floats_caption_width\v!fit - \strc_floats_prepare_side_caption_fit - \else - \strc_floats_prepare_side_caption_width - \fi - \dostoptagged} - -% these could be \??floatpreparesidecaption - -% \setupfloat[figure][location=left] -% \setupcaption[figure][width=max] -% -% \placefigure{my figure caption my figure caption}{\framed[width=4cm,height=1cm]{}} \input tufte -% \placefigure{my figure caption} {\framed[width=4cm,height=1cm]{}} \input tufte - -\def\strc_floats_prepare_side_caption_max - {\setbox\b_strc_floats_caption\vbox - {\strc_floats_caption_set_align - \hsize\wd\b_strc_floats_content - \strc_floats_make_complete_caption}} - -\def\strc_floats_prepare_side_caption_fit % or center when smaller - {\ifdim\wd\b_strc_floats_caption>\wd\b_strc_floats_content\relax - \setbox\b_strc_floats_caption\vbox - {\forgetall % needed? - \strc_floats_caption_set_align - \hsize\wd\b_strc_floats_content - \strc_floats_make_complete_caption}% - \else - % maybe we should listen to the align option here (now side floats need the max option - \setbox\b_strc_floats_caption\hpack to \wd\b_strc_floats_content - {\hss\hbox{\strc_floats_make_complete_caption}\hss}% - \fi} - -\def\strc_floats_prepare_side_caption_width - {\setbox\b_strc_floats_caption\vbox - {\strc_floats_caption_set_align - \hsize\p_strc_floats_caption_width % \wd\b_strc_floats_content - \strc_floats_make_complete_caption}} - -% % maybe (but then also prepare_page that way): -% -% \installcorenamespace{floatpreparesidecaption} -% -% \def\strc_floats_prepare_side_caption -% {\dostarttagged\t!floatcaption\empty -% \edef\p_strc_floats_caption_width{\floatcaptionparameter\c!width}% -% \edef\p_strc_floats_caption_align{\floatcaptionparameter\c!align}% -% \expandnamespacemacro\??floatpreparesidecaption\p_strc_floats_caption_width\s!unknown -% \dostoptagged} -% -% \setvalue{\??floatpreparesidecaption\v!max}% -% {\setbox\b_strc_floats_caption\vbox -% {\strc_floats_caption_set_align -% \hsize\wd\b_strc_floats_content -% \strc_floats_make_complete_caption}} -% -% \setvalue{\??floatpreparesidecaption\v!fit}% -% {\ifdim\wd\b_strc_floats_caption>\wd\b_strc_floats_content\relax -% \setbox\b_strc_floats_caption\vbox -% {\forgetall % needed? -% \hsize\wd\b_strc_floats_content -% \strc_floats_make_complete_caption}% -% \else -% \setbox\b_strc_floats_caption\hbox to \wd\b_strc_floats_content -% {\hss\hbox{\strc_floats_make_complete_caption}\hss}% -% \fi} -% -% \setvalue{\??floatpreparesidecaption\s!unknown}% -% {\setbox\b_strc_floats_caption\vbox -% {\strc_floats_caption_set_align -% \hsize\p_strc_floats_caption_width % \wd\b_strc_floats_content -% \strc_floats_make_complete_caption}} - -\def\strc_floats_locate_side_float#1% - {\begingroup - \alignstrutmode\zerocount - \hsize\d_strc_float_temp_width \forgetall - \alignedline{\floatparameter\c!location}\v!middle{#1}% - \endgroup} - -\def\strc_floats_build_side_box - {\let\strc_floats_align_content\relax - \let\strc_floats_align_caption\relax - \strc_floats_build_box} - -\def\strc_floats_set_box % todo : \global\setbox, currently messy - {\ifvisible - \par - \edef\floatcaptiondirectives{\floatparameter\c!location,\floatcaptionparameter\c!location}% - \ifconditional\c_strc_floats_par_float - \strc_floats_set_paragraph_variant - \else - \strc_floats_set_page_variant - \fi - \strc_floats_set_local_dimensions - \global\advance\totalnoffloats\plusone - \ifconditional\c_floats_store_minimal_package \else - \setbox\floatbox\hpack{\strc_float_save_data\box\floatbox}% still needed? we will do renumbering differently - \fi - \global\floatheight\htdp\floatbox - \global\floatwidth\wd\floatbox - \ifconditional\c_floats_store_minimal_package \else - \doifnotinset\v!margin\floatlocation % gaat namelijk nog fout - {\setbox\floatbox\vpack - {\parindent\zeropoint - \box\floatbox}}% - \fi - \wd\floatbox\floatwidth - \ifdim\dimexpr\floatheight+\lineheight\relax<\textheight \else - \global\floatheight\dimexpr\textheight-\lineheight\relax - \ht\floatbox\floatheight - \dp\floatbox\zeropoint - \showmessage\m!floatblocks{10}{\the\totalnoffloats}% - \fi - \fi} - -% \def\dooutput{\sidefloatoutput} % redefinition of \dooutput - -\definefloat - [\v!figure] - [\v!figures] - -\definefloat - [\v!table] - [\v!tables] - -\setupfloat - [\v!table] - [\c!frame=\v!off] - -\definefloat - [\v!intermezzo] - [\v!intermezzi] - -\definefloat - [\v!graphic] - [\v!graphics] - -% float strategy, replaces some of the above macros - -\installcorenamespace{floatmethods} - -\let\floatmethod \empty % set by lua -\let\floatlabel \empty % set by lua -\let\floatcolumn \empty % set by lua -\let\floatrow \empty % set by lua -\let\forcedfloatmethod\empty % set by lua and floatcombinations - -\permanent\protected\def\setfloatmethodvariables#1% \floatmethod \floatlabel \floatrow \floatcolumn - {\clf_analysefloatmethod{#1}} % move definition to lua end - -\permanent\protected\def\somesomewherefloat[#1]% - {\page_floats_save_somewhere_float\s!somewhere{#1}} - -\def\strc_floats_get_box - {\ifvisible -% \let\floatlabel \empty -% \let\floatcolumn\empty -% \let\floatrow \empty -% \setfloatmethodvariables\floatlocation - % todo: nog algemeen otr -% \ifdefined\OTRSETsetpreferedcolumnslot -% \OTRSETsetpreferedcolumnslot\floatcolumn\floatrow -% \fi - \ifcsname\??floatmethods\currentoutputroutine:\floatmethod\endcsname \else - \let\floatmethod\v!here - \fi - \ifempty\forcedfloatmethod \else - \let\floatmethod\forcedfloatmethod - \fi - \let\askedfloatmethod\floatmethod - \ifexporting \ifx\askedfloatmethod\v!here \else - \showmessage\m!floatblocks{15}{\askedfloatmethod,\v!here}% - \let\floatlocation\v!here - \fi \fi - % [] will go - \edef\floatlocationmethod{\floatmethod,\floatlocation}% - \csname\??floatmethods\currentoutputroutine:\floatmethod\endcsname - \fi} - -\installcorenamespace{floatsettings} - -\permanent\protected\def\installfloatmethod#1#2#3% routine keyword handler - {\setvalue{\??floatmethods#1:#2}{#3}} - -\permanent\protected\def\handlefloatmethod#1% - {\csname\??floatmethods\currentoutputroutine:#1\endcsname} - -% \protected\def\installfloatmethod#1#2#3% routine keyword handler -% {\ifcsname\??floatsettings#1:#2\endcsname \else -% \expandafter\newtoks\csname\??floatsettings#1:#2\endcsname -% \fi -% \setvalue{\??floatmethods#1:#2}{#3}} -% -% \protected\def\startfloatmethodsettings#1#2 #3\stopfloatmethodsettings -% {\csname\??floatsettings#1:#2\endcsname\expandafter{\the\csname\??floatsettings#1:#2\endcsname#3}} -% -% \let\stopfloatmethodsettings\relax -% -% \protected\def\applyfloatmethodsettings#1#2{\the\??floatsettings#1:#2\endcsname} - -\definesystemconstant{tblr} -\definesystemconstant{lrtb} -\definesystemconstant{tbrl} -\definesystemconstant{rltb} -\definesystemconstant{btlr} -\definesystemconstant{lrbt} -\definesystemconstant{btrl} -\definesystemconstant{rlbt} -\definesystemconstant{fxtb} -\definesystemconstant{fxbt} -\definesystemconstant{fixd} - -% can move to page-one: - -\installfloatmethod \s!singlecolumn \v!here \page_one_place_float_here -\installfloatmethod \s!singlecolumn \v!force \page_one_place_float_force -\installfloatmethod \s!singlecolumn \v!left \page_one_place_float_left -\installfloatmethod \s!singlecolumn \v!right \page_one_place_float_right -\installfloatmethod \s!singlecolumn \v!text \page_one_place_float_text -\installfloatmethod \s!singlecolumn \v!top \page_one_place_float_top -\installfloatmethod \s!singlecolumn \v!bottom \page_one_place_float_bottom -\installfloatmethod \s!singlecolumn \v!auto \page_one_place_float_auto -\installfloatmethod \s!singlecolumn \v!margin \page_one_place_float_margin -\installfloatmethod \s!singlecolumn \v!opposite \page_one_place_float_face -\installfloatmethod \s!singlecolumn \v!page \page_one_place_float_page -\installfloatmethod \s!singlecolumn \v!leftpage \page_one_place_float_leftpage -\installfloatmethod \s!singlecolumn \v!rightpage \page_one_place_float_rightpage -\installfloatmethod \s!singlecolumn \v!inmargin \page_one_place_float_inmargin -\installfloatmethod \s!singlecolumn \v!inleft \page_one_place_float_leftmargin -\installfloatmethod \s!singlecolumn \v!inright \page_one_place_float_rightmargin -\installfloatmethod \s!singlecolumn \v!leftmargin \page_one_place_float_leftmargin -\installfloatmethod \s!singlecolumn \v!rightmargin \page_one_place_float_rightmargin -\installfloatmethod \s!singlecolumn \v!leftedge \page_one_place_float_leftedge -\installfloatmethod \s!singlecolumn \v!rightedge \page_one_place_float_rightedge -\installfloatmethod \s!singlecolumn \v!somewhere \page_one_place_float_somewhere -\installfloatmethod \s!singlecolumn \v!backspace \page_one_place_float_backspace -\installfloatmethod \s!singlecolumn \v!cutspace \page_one_place_float_cutspace -\installfloatmethod \s!singlecolumn \s!tblr \page_one_place_float_top -\installfloatmethod \s!singlecolumn \s!lrtb \page_one_place_float_top -\installfloatmethod \s!singlecolumn \s!tbrl \page_one_place_float_top -\installfloatmethod \s!singlecolumn \s!fxtb \page_one_place_float_top -\installfloatmethod \s!singlecolumn \s!rltb \page_one_place_float_top -\installfloatmethod \s!singlecolumn \s!btlr \page_one_place_float_bottom -\installfloatmethod \s!singlecolumn \s!lrbt \page_one_place_float_bottom -\installfloatmethod \s!singlecolumn \s!btrl \page_one_place_float_bottom -\installfloatmethod \s!singlecolumn \s!rlbt \page_one_place_float_bottom -\installfloatmethod \s!singlecolumn \s!fxbt \page_one_place_float_bottom -\installfloatmethod \s!singlecolumn \s!fixd \page_one_place_float_force - -%D Local floats: - -\installcorenamespace{localfloats} -\installcorenamespace{localfloatstack} - -\installsetuponlycommandhandler \??localfloats {localfloats} - -\setuplocalfloats - [%\c!before=\blank, - %\c!after=\blank, - \c!inbetween=\blank] - -\initializeboxstack\??localfloatstack - -\newcount\c_strc_localfloats_n \let\noflocalfloats\c_strc_localfloats_n - -\permanent\protected\def\resetlocalfloats - {\global\c_strc_localfloats_n\zerocount - \initializeboxstack\??localfloatstack} - -\permanent\protected\def\somelocalfloat - {\global\advance\c_strc_localfloats_n\plusone - \savebox\??localfloatstack{\number\c_strc_localfloats_n}{\box\floatbox}} - -\permanent\protected\def\getlocalfloats - {\dorecurse\c_strc_localfloats_n - {\ifnum\recurselevel=\plusone % 1\relax - \directlocalfloatsparameter\c!before - \else - \directlocalfloatsparameter\c!inbetween - \fi - \dontleavehmode\hpack{\foundbox\??localfloatstack\recurselevel}% \restorebox... - \ifnum\recurselevel=\c_strc_localfloats_n\relax - \directlocalfloatsparameter\c!after - \fi}} - -\permanent\protected\def\flushlocalfloats - {\getlocalfloats - \resetlocalfloats} - -% \protected\def\getlocalfloat#1% -% {\normalexpanded{\foundbox{\??localfloatstack}{\number#1}}}% \vbox{\restorebox...} - -\permanent\protected\def\getlocalfloat#1% - {\foundbox\??localfloatstack{\number#1}} % \vbox{\restorebox...} - -\permanent\protected\def\forcelocalfloats - {\let\forcedfloatmethod\v!local} - -\installfloatmethod \s!singlecolumn \v!local \somelocalfloat -\installfloatmethod \s!multicolumn \v!local \somelocalfloat -\installfloatmethod \s!mixedcolumn \v!local \somelocalfloat -\installfloatmethod \s!columnset \v!local \somelocalfloat - -\protect \endinput |