Sanjoy Mahajan wrote:
It would be nice if placefigure can be able to detect if the best place is the top or the bottom of the page accordingly to its call,
A related point, which I didn't fiugre out how for my own TeX figure-placement macros, is correct sequential numbering when some figures are at the top of the page. Some pseudocode on one page:
=============== snip =================== \ref{figure:narrow} is a narrow figure.
\figuremacro{figure:narrow}{narrowfig.1}{A narrow figure.}
\ref{figure:wide} is a wide figure.
\figuremacro{figure:wide}{widefig.1}{A wide figure} =============== snip ===================
Here \figuremacro figures out (sorry) that narrow figures go in the margin and wide figures go at the top of the page. But the page will look funny: The narrow figure will be numbered, say, Figure 10, and the wide figure will be Figure 11, but Figure 11 will appear before Figure 10 on the page. Which is disconcerting to the reader.
this 'choose between locations' feature is kind of present but only with 'here' as fallback but it's trivial to make that configurable: % first a new key \startconstants dutch english german czech italian romanian french fallback: terugval fallback fallback fallback fallback fallback fallback \stopconstants % use that key \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} \setupfloats[numbering=nocheck] % we use the marginwidth as criterium \setupfloat[figure][criterium=\marginwidth,fallback=bottom] \starttext \placefigure[bottom]{}{} \input tufte \placefigure[left]{}{} \input tufte \placefigure[left]{}{\framed[width=.8\marginwidth]{}} \input tufte \stoptext (we needed that feature a couple of years ago in a project -) Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------