ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Gavin via ntg-context <ntg-context@ntg.nl>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>
Cc: Gavin <gavinpublic@comcast.net>
Subject: Re: \hpos in math - Half solved
Date: Wed, 7 Dec 2022 05:42:41 -0700	[thread overview]
Message-ID: <C197037B-6D29-472B-B43E-2A645CBA7E38@comcast.net> (raw)
In-Reply-To: <92EB18D7-92EE-41F5-B0AE-E1246E9E15A0@comcast.net>

[-- Attachment #1: Type: text/plain, Size: 682 bytes --]

Hi List,

I solved my original problem 2, allowing me to reuse the same \hpos labels in different equations without interference. I added an equation counter and set up my custom math version of \hpos to use the count as part of the label internally. I tried to do this with a regular ConTeXt counter, but had all sorts of mysterious, wrong behavior. When I switched to using a Lua counter, everything worked immediately. So, while there is nothing brilliant about this solution, I’ll share it for anyone who might want to do something similar in the future.

The code I added is below, with some comments. The complete example file is attached. The result is two equations.

[-- Attachment #2: hposQuestionEquations.pdf --]
[-- Type: application/pdf, Size: 6141 bytes --]

[-- Attachment #3: Type: text/plain, Size: 1139 bytes --]


Each equation was written using the same labels (X,Y,Z), but internally they have separate sets, (1:X and 2:X, etc.).

The moral of the story for me: Use more Lua.

Gavin


% Lua counts the spin formulas 
\ctxlua{sfnum = 0} % Count starts at zero
\def\sfID{\ctxlua{context(sfnum)}} % ConTeXt can call the count from Lua to use as an ID for each equation.

% Spin formulas increase the spin formula count and typeset the formula as usual.
\define\startspinformula{
  \ctxlua{sfnum = sfnum + 1}
  \startformula
}
\define\stopspinformula{\stopformula}

% My own \mpos uses the spin formula ID as part of the box label, then sets the contents as math.
\define[2]\mpos{\hpos{\sfID:#1}{$#2$}}

% Two commands for requesting contractions (the connections between spinors), using the spin formula ID.
\define[2]\contract{%
  \startpositionoverlay{graphics}%
    \setMPpositiongraphic{\sfID:#1}{mypos:contract}{to=\sfID:#2}%
  \stoppositionoverlay%
}
\define[2]\contractbelow{%
  \startpositionoverlay{graphics}%
    \setMPpositiongraphic{\sfID:#1}{mypos:contractbelow}{to=\sfID:#2}%
  \stoppositionoverlay%
}



[-- Attachment #4: hposQuestion.tex --]
[-- Type: application/octet-stream, Size: 3796 bytes --]

% !TEX useAlternatePath
% !TEX useConTeXtSyncParser

% Setting up the overlay for \hpos
\defineoverlay [graphics] [\positionoverlay{graphics}]
\setupbackgrounds
  [page]
  [background={foreground,graphics}]

% The MetaPost code for drawing the contractions.
\startMPpositiongraphic{mypos:contract}
     path pa, pb, pab ; numeric na, nb ; string ta, tb ;
     ta := mpvars("from") ;
     tb := mpvars("to") ;
     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
     z1 = 0.5[ulcorner pa,urcorner pa] ;
     z2 = 0.5[ulcorner pb,urcorner pb] ;
     y3 = max(y1,y2) + 3pt ; 
     if na = nb : % Check that positions are on the same page
       pab := z1 -- (x1,y3) -- (x2,y3) -- z2{down} ;
       pickup pencircle scaled 0.6pt ;
       draw pab yshifted 1pt ;
       positioninregion ;
     fi ;
\stopMPpositiongraphic

\startMPpositiongraphic{mypos:contractbelow}
     path pa, pb, pab ; numeric na, nb ; string ta, tb ;
     ta := mpvars("from") ;
     tb := mpvars("to") ;
     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
     z1 = 0.5[llcorner pa,lrcorner pa] ;
     z2 = 0.5[llcorner pb,lrcorner pb] ;
     y3 = min(y1,y2) - 3pt ; 
     if na = nb : % Check that positions are on the same page
       pab := z1 -- (x1,y3) -- (x2,y3) -- z2{down} ;
       pickup pencircle scaled 0.6pt ;
       draw pab yshifted -1pt ;
       positioninregion ;
     fi ;
\stopMPpositiongraphic

% Lua counts the spin formulas 
\ctxlua{sfnum = 0} % Count starts at zero
\def\sfID{\ctxlua{context(sfnum)}} % ConTeXt can call the count from Lua to use as an ID for each equation.

% Spin formulas increase the spin formula count and typeset the formula as usual.
\define\startspinformula{
  \ctxlua{sfnum = sfnum + 1}
  \startformula
}
\define\stopspinformula{\stopformula}

% My own \mpos uses the spin formula ID as part of the box label, then sets the contents as math.
\define[2]\mpos{\hpos{\sfID:#1}{$#2$}}

% Two commands for requesting contractions (the connections between spinors), using the spin formula ID.
\define[2]\contract{%
  \startpositionoverlay{graphics}%
    \setMPpositiongraphic{\sfID:#1}{mypos:contract}{to=\sfID:#2}%
  \stoppositionoverlay%
}
\define[2]\contractbelow{%
  \startpositionoverlay{graphics}%
    \setMPpositiongraphic{\sfID:#1}{mypos:contractbelow}{to=\sfID:#2}%
  \stoppositionoverlay%
}

% A textstyle fraction to make the normalization factor look nice.
\define[2]\textfrac{{\textstyle\frac{#1}{#2}}}


\starttext

\startspinformula
  \mpos{X}{e}_\alpha \mpos{Y}{e}^\mu \mpos{Z}{e}_{\dot\beta}
    = \textfrac{1}{\sqrt{2}}\sigma_{\alpha\dot\beta}^\mu
  \contract{X}{Y}
  \contractbelow{Y}{Z}
\stopformula

\startspinformula
  \mpos{X}{e}^{\dot\alpha} \mpos{Y}{e}_\mu \mpos{Z}{e}^{\beta}
    = \textfrac{1}{\sqrt{2}}\bar\sigma^{\dot\alpha\beta}_\mu
  \contractbelow{X}{Y}
  \contract{Y}{Z}
\stopformula

%\startformula
%  % Each \connectboxanchors works alone, but both together make trouble:
%    %\connectboxanchors[top][top]{X}{Y}
%    \connectboxanchors[bottom][bottom]{Y}{Z}
%  \mathboxanchored{X}{e}_\alpha \mathboxanchored{Y}{e}^\mu \mathboxanchored{Z}{e}_{\dot\beta}
%    = \textfrac{1}{\sqrt{2}}\sigma_{\alpha\dot\beta}^\mu
%\stopformula
%\blank[8mm]
%
%\startformula
%  % Each \connectboxanchors works alone, but both together make trouble:
%    \connectboxanchors[top][top]{X}{Y}
%    %\connectboxanchors[bottom][bottom]{Y}{Z}
%  \mathboxanchored{X}{e}_\alpha \mathboxanchored{Y}{e}^\mu \mathboxanchored{Z}{e}_{\dot\beta}
%    = \textfrac{1}{\sqrt{2}}\sigma_{\alpha\dot\beta}^\mu
%\stopformula

\stoptext

[-- Attachment #5: Type: text/plain, Size: 496 bytes --]

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / https://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : https://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : https://contextgarden.net
___________________________________________________________________________________

  reply	other threads:[~2022-12-07 12:42 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-05 23:39 \hpos in math Gavin via ntg-context
2022-12-06  9:15 ` Hans Hagen via ntg-context
2022-12-06 13:22   ` Gavin via ntg-context
2022-12-07 12:42     ` Gavin via ntg-context [this message]
2022-12-07 15:30       ` \hpos in math - Half solved Hans Hagen via ntg-context
2022-12-07 22:25       ` Hans Hagen via ntg-context
2022-12-08  0:03         ` Gavin via ntg-context
2022-12-08  6:14           ` Mikael Sundqvist via ntg-context
2022-12-08 19:54             ` Otared Kavian via ntg-context
2022-12-08 21:47               ` Hans Hagen via ntg-context

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=C197037B-6D29-472B-B43E-2A645CBA7E38@comcast.net \
    --to=ntg-context@ntg.nl \
    --cc=gavinpublic@comcast.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).