[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