[NTG-context] Maximum width of a caption

Hans Hagen pragma at wxs.nl
Sun Jan 4 12:30:37 CET 2015


On 1/3/2015 11:11 AM, Mojca Miklavec wrote:
> Hi,
>
> Is there any way to set the maximum width of a caption? I would like
> to make sure that no figure caption exceeds, say, 75% of text width.
>
> Here's an example of "bad behaviour" in the second figure:
>
> \starttext
>
> \reservefigure
> [width=5cm,height=2cm,frame=on][force]
> {Some very small figure with not too much text: OK}
>
> \input tufte
>
> This can hardly be distinguished from the main text:
>
> \reservefigure
> [width=\textwidth,height=.2\textwidth,frame=on][force]
> {\input tufte}
>
> \input tufte
>
> Desired behaviour:
>
> \placefigure[force]{\input tufte}
> {\hbox to .75\textwidth{\hss\framed[width=\textwidth,height=.2\textwidth]{}\hss}}
>
> \input tufte
>
> \stoptext
>
> I've seen an option maxwidth, but only in connection to
> \externalfigure[...][maxwidth=...].
>
> I can cheat as on the third figure above, but that seems like an ugly
> approach to me.

can you test this a bit:

\unprotect

\setupcaptions
   [\c!maxwidth=.75\hsize]

\def\strc_floats_prepare_stack_caption_auto
   {\ifx\p_strc_floats_caption_align\empty \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
    \ifdim\captionhsize>.75\hsize
      % 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}%
      \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}%
      \else\ifx\p_strc_floats_caption_align\empty
        \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
    \fi}

\protect


-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
     tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
                                              | www.pragma-pod.nl
-----------------------------------------------------------------


More information about the ntg-context mailing list