[NTG-context] placefigure feature request ?

Sanjoy Mahajan sanjoy at mrao.cam.ac.uk
Fri Apr 14 18:45:45 CEST 2006


> are you sure that you put the code in the right spot? (both float order
> patched!)

I hadn't thought the location mattered until just now!  But I'm not sure
where the ideal spot is.  Oh, do you mean that I should patch
page-flt.tex itself (and rebuild the formats, of course)?  It has one
\redofloatorder.  Instead I had just been inserting your magic in the
example source file itself, like so:

% first a new key

\startconstants            dutch                     english
                           german                    czech
                           italian                   romanian
                           french

                 fallback: terugval                  fallback
                           fallback                  fallback
                           fallback                  fallback
                           fallback
\stopconstants

% use that key

\unprotect

\long\def\dofloat#1#2#3#4%
  {\dosetfloatbox{#1}{#2}{#3}{#4}%
   \doifelsevaluenothing{\??fl#4\c!criterium}
     {\dogetfloatbox{#1}\empty}
     {\ifdim\wd\floatbox>\getvalue{\??fl#4\c!criterium}\relax
        \postcenterfloatbox{\wd\floatbox}% else we get left aligned
        %dogetfloatbox{#1}\v!here        % see details/pascal
        
\dogetfloatbox{#1}{\executeifdefined{\??fl#4\c!fallback}\v!here}% PATCHED
      \else
        \dogetfloatbox{#1}\empty
      \fi}}

% pass the new location (will be done differently, hack

\def\dogetfloatbox#1#2%
  {\ifvisible
     \doifelsenothing{#2}
       {\getfromcommalist[#1][1]%
        \@EA\beforesplitstring\commalistelement\at:\to\floatmethod
        \@EA\aftersplitstring \commalistelement\at:\to\floatcolumn
        \@EA\aftersplitstring \floatcolumn\at*\to\floatrow
        \@EA\beforesplitstring\floatcolumn\at*\to\floatcolumn
        % todo: nog algemeen otr
        \ifx\OTRSETsetpreferedcolumnslot\undefined\else
          \OTRSETsetpreferedcolumnslot\floatcolumn\floatrow
        \fi}
       {\let\floatcolumn\empty
        \let\floatrow\empty
        \edef\floatmethod{#2}}%
     \doifundefined{\string\floatmethod\floatmethod}
       {\let\floatmethod\v!here}%
     \getvalue{\string\floatmethod\floatmethod}[\floatmethod,#1]% PATCHED
   \fi}

\def\dofloatreference
  {\doifnot\@@bknumbering\v!text
     {\doglobal\increment\numberedfloat
      \doifelse\@@bknumbering\v!text % alternative to yes|page
        {\let\next\immediatewriteutilitycommand}
        {\let\next\writeutilitycommand}%
      \expanded{\next
        {\noexpand\twopassentry
        {\s!float}%
        {\numberedfloat}%
        {\composedsectionnumber}}}}}

\def\redofloatorder#1%
  {\doifnotinset\@@bknumbering{\v!nocheck,\v!text}
     {\doglobal\increment\nofplacedfloats\relax
      \gettwopassdata\s!float
      \iftwopassdatafound
        \doifnot\composedsectionnumber\twopassdata
          {\edef\oldcomposedsectionnumber{\composedsectionnumber}%
           \xdef\composedsectionnumber{\twopassdata}%
           \showmessage\m!floatblocks1{\nofplacedfloats,#1 
\oldcomposedsectionnumber,\composedsectionnumber}}%
      \fi}}

\protect

\setupfloats[numbering=text]

% we use the marginwidth as criterium

\setupfloat[figure][criterium=\marginwidth,fallback=bottom]

\starttext

\placefigure[bottom]{1}{} \input tufte
\placefigure[left]{2}{} \input tufte
\placefigure[left]{3}{\framed[width=.9\marginwidth]{}} \input tufte

\stoptext


More information about the ntg-context mailing list