this 'choose between locations' feature is kind of present but only with 'here' as fallback but it's trivial to make that configurable:
I've been experimenting a bit with the code, and it is much appreciated. I added \unprotect..\protect and it compiled fine. The figure numbering is the order in the source files, thanks to the numbering=nocheck; reading down the page it is 3->1->2. Then I felt bold and commented out the numbering=nocheck. It does one clockwise rotation of the numbers: floatblocks : no block given floatblocks : 1 renumbered / figure 1 => 3 (/home/sanjoy/texmf/tex/context/base/pdfr-ec.tex) floatblocks : 1 placed (/home/sanjoy/texmf/tex/context/sample/tufte.tex) floatblocks : no block given floatblocks : 2 renumbered / figure 2 => 1 floatblocks : 2 placed (/home/sanjoy/texmf/tex/context/sample/tufte.tex) floatblocks : 3 renumbered / figure 3 => 2 floatblocks : 3 placed If it had done a anticlockwise rotation, the figure numbers would have been right (1->2->3 reading down the page). Is it because the figure renumbering does not know of the change to fallback=bottom (from fallback=here)? texexec : TeXExec 5.4.3 - ConTeXt / PRAGMA ADE 1997-2005 texutil : TeXUtil 9.0.1 - ConTeXt / PRAGMA ADE 1992-2006 tex : pdfeTeX, 3.141592-1.21a-2.2 (Web2C 7.5.4) context : ver: 2006.03.25 13:21 cont-en : ver: 2006.03.25 13:21 fmt: 2006.4.11 mes: english Here's the .tex file itself with the above modifications: ====================================================================== % 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} \protect % \setupfloats[numbering=nocheck] % 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 ====================================================================== -Sanjoy `A society of sheep must in time beget a government of wolves.' - Bertrand de Jouvenal