[dev-context] Leaders

Wolfgang Schuster schuster.wolfgang at gmail.com
Sun Jan 13 21:34:53 CET 2013


Am 13.01.2013 um 20:43 schrieb Hans Hagen <pragma at wxs.nl>:

> On 1/13/2013 7:06 PM, Wolfgang Schuster wrote:
> 
>> what’s your opinion to redefine the leaders command to take a optional name which loads a predefined setup?
> 
> We should avoid redefining a primitive (esp one that is used in math).

No problem.

>> […]
> 
> before we add this kind of code, how about a more extensive mechanism so that we can say filler=periods
> 
> for this we need to generalize the above even more i.e. we could have:
> 
> alternative=rule    (height width depth)
> alternative=box     (the leaders)
> alternative=stretch (hfill
> 
> and then methods, for leaders, so now we get:
> 
> \unprotect
> 
> \installcorenamespace{fillers}
> \installcorenamespace{fillersalternative}
> \installcorenamespace{fillersleadermethod}
> 
> \installcommandhandler \??fillers {fillers} \??fillers
> 
> \unexpanded\def\fillers
>  {\dosingleempty\spac_fillers_indeed}
> 
> \def\spac_fillers_indeed[#1]%
>  {\begingroup
>   \edef\currentfillers{#1}%
>   \scratchdimen\fillersparameter\c!leftmargin\relax
>   \ifdim\scratchdimen=\zeropoint\else
>     \hskip\scratchdimen
>   \fi
>   \fillersparameter\c!left\relax
>   \getvalue{\??fillersalternative\fillersparameter\c!alternative}\relax
>   \fillersparameter\c!right\relax
>   \scratchdimen\fillersparameter\c!rightmargin\relax
>   \ifdim\scratchdimen=\zeropoint\else
>     \hskip\scratchdimen
>   \fi
>   \endgroup}
> 
> \setvalue{\??fillersalternative\s!box}%
> {\expandcheckedcsname\??fillersleadermethod{\fillersparameter\c!method}\v!local
>      \simplealignedbox
>        {\fillersparameter\c!width}%
>        {\fillersparameter\c!align}%
>        {\fillersparameter\c!symbol}%
>   \hfill}
> 
> \setvalue{\??fillersalternative\c!stretch}%
>  {\hfill}
> 
> \setvalue{\??fillersalternative\c!rule}%
> {\expandcheckedcsname\??fillersleadermethod{\fillersparameter\c!method}\v!local
>     \hrule
>       \!!height\fillersparameter\c!height
>       \!!depth \fillersparameter\c!depth
>   \hfill}
> 
> \letvalue{\??fillersleadermethod\s!local }\normalleaders  % overflow ends up inbetween (current box)
> \letvalue{\??fillersleadermethod\v!global}\normalgleaders % overflow ends up inbetween (outermost box)
> \letvalue{\??fillersleadermethod\v!middle}\normalcleaders % overflow ends up before, after (current box)
> \letvalue{\??fillersleadermethod\v!broad }\normalxleaders % overflow ends up before, inbetween, after (current box)
> 
> \setupfillers
>  [\c!width=\emwidth,
>   \c!symbol=.,
>   \c!align=\v!middle,
>   \c!height=.1\exheight,
>   \c!depth=\zeropoint,
>   \c!leftmargin=\zeropoint,
>   \c!rightmargin=\zeropoint,
>   \c!alternative=\s!box,
>   \c!method=\s!local]
> 
> % maybe box -> symbol
> 
> \protect
> 
> \definefillers[test-a][alternative=stretch]
> \definefillers[test-b][alternative=box,symbol=!]
> \definefillers[test-c][alternative=rule,height=.1ex,leftmargin=.5em,rightmargin=.25em]
> 
> \starttext
> 
> text\leaders\hbox to 1em{\hss .\hss}\hfill text
> 
> text\fillers[test-a]text
> 
> text\fillers[test-b]text
> 
> text\fillers[test-c]text
> 
> \stoptext
> 
> maybe box should be symbol (no \v!symbol yet)
> 
> maybe some more tricks can be added

That version is even better, maybe remove spaces before/after the command to avoid unwanted spaces.

Even though the \fillers command is slower than direct use of leaders it’s in my opinion more user friendly.

Wolfgang


More information about the dev-context mailing list