# [NTG-context] Mathematical MetaFun Mania

Hans Hagen j.hagen at freedom.nl
Thu Dec 15 11:36:55 CET 2022

On 12/15/2022 4:20 AM, Gavin via ntg-context wrote:
> Hello MetaFun Math Lovers,
>
> I am using MetaFun to attach diagrams to formulas. Both the physics and the typesetting are going great! I attached a sample below, to give a taste of what I am trying to do. This page of actual calculations has examples of almost everything I need. It’s a lot, but it is all working. Right now the interface is terrible, but effective. Thanks to Hans and Mikael for many helpful hints!
>
> I am still using \hpos and \setMPpositiongraphic, because I haven't figured out how to pass information from \mathboxanchored and \connectboxanchors to my MetaPost code. Here is the code for the connectors:
>
> \startMPpositiongraphic{mypos:contract}
>    path pa, pb, pab ; numeric na, nb ; string ta, tb, hand, product ;
>    ta := mpvars("from") ;
>    tb := mpvars("to") ;
>    stemshiftfrom := (EmWidth/8)*mpvarn("startstem") ;
>    stemshiftto   := (EmWidth/8)*mpvarn("stopstem") ;
>    hand := mpvars("hand") ;
>    product := mpvars("product") ;
>    delta := mpvard("distance") ;
>    na := positionpage(ta) ; % page number of a
>    nb := positionpage(tb) ; % page number of b
>    pa := positionbox(ta) ;  % box of a
>    pb := positionbox(tb) ;  % box of b
>    if hand = "right" :
>       z1 = 0.5[llcorner pa,lrcorner pa] shifted (stemshiftfrom, -ExHeight/4) ;
>       z2 = 0.5[llcorner pb,lrcorner pb] shifted (stemshiftto,   -ExHeight/4) ;
>       y3 = min(y1,y2) - ExHeight/2 -delta;
>    else :
>      z1 = 0.5[ulcorner pa,urcorner pa] shifted (stemshiftfrom,  ExHeight/4) ;
>      z2 = 0.5[ulcorner pb,urcorner pb] shifted (stemshiftto,    ExHeight/4) ;
>      y3 = max(y1,y2) + ExHeight/2 +delta;
>    fi ;
>    if na = nb : % Check that positions are on the same page
>      pickup pencircle scaled 0.6pt ;
>      if product = "sym" :
>        draw z1 -- (x1,y3+ExHeight/2) ;
>        draw z2 -- (x2,y3+ExHeight/2) ;
>        pickup pencircle scaled 1.2pt ;
>        draw (x1-EmWidth/8,y3) -- (x2+EmWidth/8,y3) ;
>      else :
>        pab := z1 -- (x1,y3) -- (x2,y3) -- z2{down} ;
>        draw pab ;
>      fi ;
>      positioninregion ;
>    fi ;
> \stopMPpositiongraphic
>
> A connector command might look something like this:
>
> \setMPpositiongraphic{X-1}{mypos:contract}{to=X-2,product=sym,startstem=-2,stopstem=2,distance=0.5ex}
>
> All of the key=value pairs in the last argument of \setMPpositiongraphic pop right up in my MetaPost code with mpvar(“key”). I haven’t been able to follow this with \mathboxanchored and \connectboxanchors. My two questions are:
>
> 1) Can I use \setMPpositiongraphic with \mathboxanchored? That would allow me to go straight to my MetaPost code without the \connectboxanchors interface
>
> 2) Can I tell \connectboxanchors to use my MetaPost code and pass key=value pairs like I do with \setMPpositiongraphic?
see attached ... the 'cross pages' feature is in the upcoming

-----------------------------------------------------------------
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------
-------------- next part --------------
\continuewhenlmtxmode

\usemodule[article-basic]

\starttext

\startboxanchoring[+]
\connectboxanchors[top]    [top]    [distance=1ex,arrow=no] {c1}{c2}
\connectboxanchors[bottom] [bottom] [distance=1ex,arrow=no] {c2}{c3}
\startformula
\mathboxanchored[nucleus]{c1}{e}_{\alpha}
\mathboxanchored[nucleus]{c2}{e}^{\mu}
\mathboxanchored[nucleus]{c3}{e}_{\dot{\beta}} = \frac{1}{\sqrt{2}}
\sigma_{\alpha,\dot{\beta}}^{\mu}
\stopformula
\stopboxanchoring

\startboxanchoring[+]
\connectboxanchors[top]    [top]    [distance=1ex,arrow=no] {c1}{c2}
\connectboxanchors[bottom] [bottom] [distance=1ex,arrow=no] {c2}{c3}
\startformula
\mathboxanchored[nucleus]{c1}{e}_{\alpha}
\mathboxanchored[nucleus]{c2}{e}^{\mu}
\mathboxanchored[nucleus]{c3}{e}_{\dot{\beta}} = \frac{1}{\sqrt{2}}
\sigma_{\alpha,\dot{\beta}}^{\mu}
\stopformula
\stopboxanchoring

\startboxanchoring[+]
\connectboxanchors[top]    [top]    [distance=1ex,arrow=yes,page=yes] {c1}{c2}
\connectboxanchors[bottom] [bottom] [distance=1ex,arrow=yes,page=yes] {c2}{c3}
\startformula
\mathboxanchored[nucleus]{c1}{e}_{\alpha}
\mathboxanchored[nucleus]{c2}{e}^{\mu}
e _{\dot{\beta}} = \frac{1}{\sqrt{2}}
\sigma_{\alpha,\dot{\beta}}^{\mu}
\stopformula
\page
\startformula
e _{\alpha}
e ^{\mu}
\mathboxanchored[nucleus]{c3}{e}_{\dot{\beta}} = \frac{1}{\sqrt{2}}
\sigma_{\alpha,\dot{\beta}}^{\mu}
\stopformula
\stopboxanchoring

\startMPpositiongraphic{mypos:boxanchor:top}
begingroup ;
save f, t, p ; pair f, t ; path p ;
f := positionxy(mpvars("from")) ;
t := positionxy(mpvars("to")) ;
p := f { up } .. t ;
drawarrow p
withpen pencircle scaled mpvard "rulethickness"
withcolor mpvars "linecolor" ; % historically different names
positioninregion ;
endgroup ;
\stopMPpositiongraphic

\startMPpositiongraphic{mypos:boxanchor:bottom}
begingroup ;
save f, t, p ; pair f, t ; path p ;
f := positionxy(mpvars("from")) ;
t := positionxy(mpvars("to")) ;
p := f { down } .. t ;
drawarrow p
withpen pencircle scaled mpvard "rulethickness"
withcolor mpvars "linecolor" ; % historically different names
positioninregion ;
endgroup ;
\stopMPpositiongraphic

\startboxanchoring[+]
\connectboxanchors[top]    [top]    [distance=1ex,rulethickness=1pt,rulecolor=darkgreen,mp=mypos:boxanchor:top]    {c1}{c2}
\connectboxanchors[bottom] [bottom] [distance=1ex,rulethickness=1pt,rulecolor=darkred,  mp=mypos:boxanchor:bottom] {c2}{c3}
\startformula
\mathboxanchored[nucleus]{c1}{e}_{\alpha}
\mathboxanchored[nucleus]{c2}{e}^{\mu}
\mathboxanchored[nucleus]{c3}{e}_{\dot{\beta}} = \frac{1}{\sqrt{2}}
\sigma_{\alpha,\dot{\beta}}^{\mu}
\stopformula
\stopboxanchoring

\stoptext
-------------- next part --------------
A non-text attachment was scrubbed...
Name: anchors-002.pdf
Type: application/pdf
Size: 10666 bytes
Desc: not available
URL: <http://mailman.ntg.nl/pipermail/ntg-context/attachments/20221215/afdebb86/attachment.pdf>