Re: [NTG-context] new upload, new trickery
On 11/16/2021 2:52 PM, Marcus Vinicius Mesquita via ntg-context wrote: Hi, Hans I tried to run your first example, but ConTeXt throws an error and complains that \resetleftparbox was never defined. Using version: 2021.11.13 it evolved a bit (see low level manual) or typo-lbx \resetlocalbox[left] etc as we have installable boxes (that can individually be set and reset) Hans - Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl - ___ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : http://contextgarden.net ___
Re: [NTG-context] new upload, new trickery
Hi, Hans I tried to run your first example, but ConTeXt throws an error and complains that \resetleftparbox was never defined. Using version: 2021.11.13 Regards Marcus Vinicius On Thu, Oct 28, 2021 at 6:24 AM Hans Hagen via ntg-context < ntg-context@ntg.nl> wrote: > Hi, > > Among the 'can they be made better' candidates in the engine are > \vadjust and \local[left|right]box primitives that are not really used > in context (okay, vadjust is used in mkii). > > The \vadjust vertical injector can be illustrated with > > \starttext > \ignorespaces\input tufte \removeunwantedspaces > we want a break before this line \vadjust pre {\break}% > \ignorespaces\input tufte \removeunwantedspaces > > \page > > \ignorespaces\input tufte \removeunwantedspaces > we want seperate lines now \leftparbox{\vadjust post {\break}}% > \ignorespaces\input tufte \removeunwantedspaces > \resetleftparbox{} > \stoptext > > It's a signal that injects something in a vertical list without > interupting the horizontal text flow. One can inject before (pre) or > after (post which is default). New is that we can also influence the > order: after vs before preceding \vadjust in the same line. Also new is > that deeply nested adjustments can migrate (so the hole los: marks, > inserts and vadjust are now in sync) which is demonstrated with the next > example: > > \starttext > \showstruts > \input tufte \removeunwantedspaces\space > \localleftbox par {% > \hbox to 0pt{% >\llap{L}% >\vadjust{\strut\blackrule[width=1cm,color=red]}% >\hbox{\vadjust pre{\strut\blackrule[width=1cm,color=green]}}% > }\hss > }% > \localrightbox par {}% > \input tufte \removeunwantedspaces\space > \vadjust pre{\strut BEFORE 1}% > \vadjust pre{\strut BEFORE 2}% > \vadjust before {\strut AFTER 1}% > \vadjust before {\strut AFTER 2}% > \ignorespaces > \input tufte > \stoptext > > Indeed it looks bad (ugly) but it illustrates the idea. What makes > vadjust sort of useless for content is that it messes up spacing (but if > there is real demand and usage i can sort that out at some point, maybe > some new options or so). Thsi example also brings us to local boxes: > > \showframe > > \starttext > > \showmakeup[hbox] > > \startnarrower[2*left] \raggedleft > {\localleftbox par {L1}\input tufte \par} > \stopnarrower > \blank > > \startnarrower[2*middle] \raggedcenter > {\localrightbox par {R1}\input tufte \par} > \stopnarrower > \blank > > \stoptext > > New is the par keyword that forces the setting to be applied from the > first line downards (fyio: these commands, when display set registers, > when inline they set registers and inject a node). Watch out: one needs > to use grouping in order not to bleed into other mechanisms. > > Also new is that we can query the content of these registers using \the, > as in: > > \dorecurse{10}{ > \showboxes > \localleftbox{\ruledhbox {\smallinfofont\setstrut\strut[L #1.0]}}% > \localleftbox{\ruledhbox {\smallinfofont\setstrut\strut[L > #1.1]}\the\localleftbox}% > \localleftbox{\ruledhbox {\smallinfofont\setstrut\strut[L > #1.2]}\the\localleftbox}% > \localleftbox{\ruledhbox {\smallinfofont\setstrut\strut[L > #1.3]}\the\localleftbox}% > % > \localrightbox{\ruledhbox > {\smallinfofont\setstrut\strut[R #1.0]}}% > > \localrightbox{\the\localrightbox\ruledhbox{\smallinfofont\setstrut\strut[R > > #1.1]}}% > > \localrightbox{\the\localrightbox\ruledhbox{\smallinfofont\setstrut\strut[R > > #1.2]}}% > \localrightbox{\the\localrightbox\ruledhbox{\smallinfofont[R #1.3]}}% > % \localrightbox{}% > \samplefile{tufte} > } > > Flushing permits us to append and prepend but it's still ugly so that is > why we now have a new interface (context layer on top of engine): > > \dorecurse{10}{ > \showboxes > % > \resetleftparbox > \resetrightparbox > % > \prependleftparbox {\ruledhbox{\smallinfofont\setstrut\strut[L > #1.0]}}% > \prependleftparbox {\ruledhbox{\smallinfofont\setstrut\strut[L > #1.1]}}% > \prependleftparbox {\ruledhbox{\smallinfofont\setstrut\strut[L > #1.2]}}% > \prependleftparbox {\ruledhbox{\smallinfofont\setstrut\strut[L > #1.3]}}% > % > \appendrightparbox{\ruledhbox{\smallinfofont\setstrut\strut[R #1.0]}}% > \appendrightparbox{\ruledhbox{\smallinfofont\setstrut\strut[R #1.1]}}% > \appendrightparbox{\ruledhbox{\smallinfofont\setstrut\strut[R #1.2]}}% > \appendrightparbox{\ruledhbox{\smallinfofont[R #1.3]}}% > % > \samplefile{tufte} > } > > But as this is not really user friendly, there is more: a mechanism for > hooking in handlers. > > \definelocalboxes >[linenumber] >[command=\LeftNumber, > location=left, > width=3em, > style=\bs, > color=darkred] > > \definelocalboxes >[linenumbertwo] >[linenumber] >[command=\Right
[NTG-context] new upload, new trickery
Hi, Among the 'can they be made better' candidates in the engine are \vadjust and \local[left|right]box primitives that are not really used in context (okay, vadjust is used in mkii). The \vadjust vertical injector can be illustrated with \starttext \ignorespaces\input tufte \removeunwantedspaces we want a break before this line \vadjust pre {\break}% \ignorespaces\input tufte \removeunwantedspaces \page \ignorespaces\input tufte \removeunwantedspaces we want seperate lines now \leftparbox{\vadjust post {\break}}% \ignorespaces\input tufte \removeunwantedspaces \resetleftparbox{} \stoptext It's a signal that injects something in a vertical list without interupting the horizontal text flow. One can inject before (pre) or after (post which is default). New is that we can also influence the order: after vs before preceding \vadjust in the same line. Also new is that deeply nested adjustments can migrate (so the hole los: marks, inserts and vadjust are now in sync) which is demonstrated with the next example: \starttext \showstruts \input tufte \removeunwantedspaces\space \localleftbox par {% \hbox to 0pt{% \llap{L}% \vadjust{\strut\blackrule[width=1cm,color=red]}% \hbox{\vadjust pre{\strut\blackrule[width=1cm,color=green]}}% }\hss }% \localrightbox par {}% \input tufte \removeunwantedspaces\space \vadjust pre{\strut BEFORE 1}% \vadjust pre{\strut BEFORE 2}% \vadjust before {\strut AFTER 1}% \vadjust before {\strut AFTER 2}% \ignorespaces \input tufte \stoptext Indeed it looks bad (ugly) but it illustrates the idea. What makes vadjust sort of useless for content is that it messes up spacing (but if there is real demand and usage i can sort that out at some point, maybe some new options or so). Thsi example also brings us to local boxes: \showframe \starttext \showmakeup[hbox] \startnarrower[2*left] \raggedleft {\localleftbox par {L1}\input tufte \par} \stopnarrower \blank \startnarrower[2*middle] \raggedcenter {\localrightbox par {R1}\input tufte \par} \stopnarrower \blank \stoptext New is the par keyword that forces the setting to be applied from the first line downards (fyio: these commands, when display set registers, when inline they set registers and inject a node). Watch out: one needs to use grouping in order not to bleed into other mechanisms. Also new is that we can query the content of these registers using \the, as in: \dorecurse{10}{ \showboxes \localleftbox{\ruledhbox {\smallinfofont\setstrut\strut[L #1.0]}}% \localleftbox{\ruledhbox {\smallinfofont\setstrut\strut[L #1.1]}\the\localleftbox}% \localleftbox{\ruledhbox {\smallinfofont\setstrut\strut[L #1.2]}\the\localleftbox}% \localleftbox{\ruledhbox {\smallinfofont\setstrut\strut[L #1.3]}\the\localleftbox}% % \localrightbox{\ruledhbox {\smallinfofont\setstrut\strut[R #1.0]}}% \localrightbox{\the\localrightbox\ruledhbox{\smallinfofont\setstrut\strut[R #1.1]}}% \localrightbox{\the\localrightbox\ruledhbox{\smallinfofont\setstrut\strut[R #1.2]}}% \localrightbox{\the\localrightbox\ruledhbox{\smallinfofont[R #1.3]}}% % \localrightbox{}% \samplefile{tufte} } Flushing permits us to append and prepend but it's still ugly so that is why we now have a new interface (context layer on top of engine): \dorecurse{10}{ \showboxes % \resetleftparbox \resetrightparbox % \prependleftparbox {\ruledhbox{\smallinfofont\setstrut\strut[L #1.0]}}% \prependleftparbox {\ruledhbox{\smallinfofont\setstrut\strut[L #1.1]}}% \prependleftparbox {\ruledhbox{\smallinfofont\setstrut\strut[L #1.2]}}% \prependleftparbox {\ruledhbox{\smallinfofont\setstrut\strut[L #1.3]}}% % \appendrightparbox{\ruledhbox{\smallinfofont\setstrut\strut[R #1.0]}}% \appendrightparbox{\ruledhbox{\smallinfofont\setstrut\strut[R #1.1]}}% \appendrightparbox{\ruledhbox{\smallinfofont\setstrut\strut[R #1.2]}}% \appendrightparbox{\ruledhbox{\smallinfofont[R #1.3]}}% % \samplefile{tufte} } But as this is not really user friendly, there is more: a mechanism for hooking in handlers. \definelocalboxes [linenumber] [command=\LeftNumber, location=left, width=3em, style=\bs, color=darkred] \definelocalboxes [linenumbertwo] [linenumber] [command=\RightNumber, location=right, width=6em, style=\bf, color=darkgreen] \definelocalboxes [linetext] [command=\LeftText, location=lefttext, style=\bs, color=darkblue] \definelocalboxes [linetexttwo] [linetext] [command=\RightText, location=righttext, style=\bf, color=darkgray] % just using the content % \protected\def\LeftNumber {\hbox to \localboxesparameter{width}{\strut\box\localboxcontentbox\hss)}} % \protected\def\RightNumber{\hbox to \localboxesparameter{width}{\strut(\hss\box\localboxcontentbox)}} % using the pro