Hello List,
I am working on a project which combines graphics with formulas, like this:
My code for creating this formula is attached. It works well, but I have a couple of questions that could make it work better.
1) Is there a mathematics version of \hpos? The contents of \hpos are set as text, even when \hpos is in mathematics, so I wrote an \mpos macro that uses \hpos but sets the contents as display-style math. This isn’t great for spacing, and it does't adapt to different math styles. \framed has a math version, \mframed, that sets the contents in the appropriate math style. If anyone know a way to accomplish that with \hpos, I’d love to know.
2) Is there a way to limit the scope of the \hpos labels to a single formula. This could turn into a book length project, with several formulas per page and several connections per formula. If every \hpos in the entire book needs a unique identifier, I could go mad. Under no circumstances will I connect one formula to another, so I’d like to be able to use something like \hpos{A}{…}…\hpos{B}{…} in each formula. Any suggestions?
I’ve got to say, LMTX is an absolutely amazing tool for this project, which includes complicated networks of connections above and below many formulas. The integration of TeX, MetaPost, and Lua makes this project tremendous fun.
Thanks! Gavin
P.S. For the curious, I’m using a method for doing General Relativity based on spinors rather than tensors, following the methods of Penrose and Rindler in their 1985 books “Spinors and Space-time.” In the typesetting example above, the e_\alpha and e_{\dot\beta} are basis spinors (one left-handed, one right-handed). The e^\mu is the Infeld-van der Waerden symbol relating the spin basis to the coordinate basis. The connections are spinor index contractions. The formula above relates the components of the Infeld-van der Waerden symbol to the Pauli sigma matrices. This relationship only works in flat space, so this is an easy example! [Penrose and Rindler, vol 1 p. 125]
On 12/6/2022 12:39 AM, Gavin via ntg-context wrote:
Hello List,
I am working on a project which combines graphics with formulas, like this:
My code for creating this formula is attached. It works well, but I have a couple of questions that could make it work better.
- Is there a mathematics version of \hpos? The contents of \hpos are set as text, even when \hpos is in mathematics, so I wrote an \mpos macro that uses \hpos but sets the contents as display-style math. This isn’t great for spacing, and it does't adapt to different math styles. \framed has a math version, \mframed, that sets the contents in the appropriate math style. If anyone know a way to accomplish that with \hpos, I’d love to know.
there actually is a subsystem that keeps math as-is-it (styles and spacing and such), see attached
- Is there a way to limit the scope of the \hpos labels to a single formula. This could turn into a book length project, with several formulas per page and several connections per formula. If every \hpos in the entire book needs a unique identifier, I could go mad. Under no circumstances will I connect one formula to another, so I’d like to be able to use something like \hpos{A}{…}…\hpos{B}{…} in each formula. Any suggestions?
one problem is (and i'm working on that) that one could want multiple anchors on a math atom as well as pu tit on the nuclues only
I’ve got to say, LMTX is an absolutely amazing tool for this project, which includes complicated networks of connections above and below many formulas. The integration of TeX, MetaPost, and Lua makes this project tremendous fun.
that's the idea
P.S. For the curious, I’m using a method for doing General Relativity based on spinors rather than tensors, following the methods of Penrose and Rindler in their 1985 books “Spinors and Space-time.” In the typesetting example above, the e_\alpha and e_{\dot\beta} are basis spinors (one left-handed, one right-handed). The e^\mu is the Infeld-van der Waerden symbol relating the spin basis to the coordinate basis. The connections are spinor index contractions. The formula above relates the components of the Infeld-van der Waerden symbol to the Pauli sigma matrices. This relationship only works in flat space, so this is an easy example! [Penrose and Rindler, vol 1 p. 125]
in your example we need a way to anchor on just the 'e' right? or do you want it on the e + super/subscript?
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 -----------------------------------------------------------------
Hi Hans,
On Dec 6, 2022, at 2:15 AM, Hans Hagen via ntg-context ntg-context@ntg.nl wrote: On 12/6/2022 12:39 AM, Gavin via ntg-context wrote:
- Is there a mathematics version of \hpos? The contents of \hpos are set as text, even when \hpos is in mathematics, so I wrote an \mpos macro that uses \hpos but sets the contents as display-style math. This isn’t great for spacing, and it does't adapt to different math styles. \framed has a math version, \mframed, that sets the contents in the appropriate math style. If anyone know a way to accomplish that with \hpos, I’d love to know.
there actually is a subsystem that keeps math as-is-it (styles and spacing and such), see attached
I tried using \mathboxanchored, and was able to get the bottom two equations shown here. (The top equation uses \hpos, for comparison.)
There are two problems that I didn’t know how to fix.
1) The line connects to the box including the subscript or superscript, not just to the e. 2) I cannot make multiple connections to a single object, like the e^\mu in the center. If I try to connect top and bottom, I get no connections anywhere in the entire document.
The code for the formulas is:
\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
I added code to turn the arrow produced by \connectboxanchors into my contraction overlay, but that doesn’t affect these issues.
in your example we need a way to anchor on just the 'e' right? or do you want it on the e + super/subscript?
Yes, we only need to anchor to e.
Thanks! Gavin
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.
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% }
On 12/7/2022 1:42 PM, Gavin via ntg-context wrote:
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.
Using this could work
\newcount\SFNum
\global\advance\SFNum\plusone
\the\SFNum
(you now use a (global) lua counter
The code I added is below, with some comments. The complete example file is attached. The result is two equations.
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.
but ... work local ... so
document.sfnum
etc in order to avoid clashes
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% }
Attached what you can do in a next upload (on the million math test files MS and I have by now)
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 -----------------------------------------------------------------
On 12/7/2022 1:42 PM, Gavin via ntg-context wrote:
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.
attached an example by Mikael ... it should work with tonights update
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 -----------------------------------------------------------------
Hi Hans and Mikael,
This is amazing! Mikael's example works for me. I will start using these tools in my project, and I’ll tell you how it goes. It might be a couple weeks, because the physics is also quite challenging.
Thank you! Gavin
On Dec 7, 2022, at 3:25 PM, Hans Hagen via ntg-context ntg-context@ntg.nl wrote:
On 12/7/2022 1:42 PM, Gavin via ntg-context wrote:
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.
attached an example by Mikael ... it should work with tonights update
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
<221206-3.mkxl>___________________________________________________________________________________ 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 ___________________________________________________________________________________
Hi,
On Thu, Dec 8, 2022 at 1:07 AM Gavin via ntg-context ntg-context@ntg.nl wrote:
Hi Hans and Mikael,
This is amazing! Mikael's example works for me. I will start using these tools in my project, and I’ll tell you how it goes.
Very good that it works and that it gets tested!
It might be a couple weeks, because the physics is also quite challenging.
Haha, I can imagine that the spinors are even more challenging. Good luck!
/Mikael
Hi Hans, Mikael,
These features are amazing! Many many thanks! Thanks also to Gavin for having stated so precisely these kinds of needs, so that Hans and Mikael could come up with this solution. Gavin, good luck with your project, and plaese share what you get at the end.
Best regards : Otared
On 8 Dec 2022, at 07:14, Mikael Sundqvist via ntg-context ntg-context@ntg.nl wrote:
Hi,
On Thu, Dec 8, 2022 at 1:07 AM Gavin via ntg-context ntg-context@ntg.nl wrote:
Hi Hans and Mikael,
This is amazing! Mikael's example works for me. I will start using these tools in my project, and I’ll tell you how it goes.
Very good that it works and that it gets tested!
It might be a couple weeks, because the physics is also quite challenging.
Haha, I can imagine that the spinors are even more challenging. Good luck!
/Mikael ___________________________________________________________________________________ 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 ___________________________________________________________________________________
Otared Kavian e-mail: otared@gmail.com Phone: +33 6 88 26 70 95
On 12/8/2022 8:54 PM, Otared Kavian via ntg-context wrote:
Hi Hans, Mikael,
These features are amazing! Many many thanks! Thanks also to Gavin for having stated so precisely these kinds of needs, so that Hans and Mikael could come up with this solution. Gavin, good luck with your project, and plaese share what you get at the end.
For the record: this features is already there for a while, we also have some matrix specific trickery as well as for instance annotated fences and so. However, the interfaces will evolve and eventually get documented in the upcoming (big) math manual. It's mostly a matter of consistent interfacing i.e. it has to fit into the way we do things in context (it's of course easy to come up with a quick and dirty ugly non extensible and non standard interface).
What is new in the latest greatest is (1) namespaces, so that one can reuse the references, which Gavin needs, and (2) sourcing a nucleus and/or the whole atom including scripts, which Gavin also needs. Some more granularity might show up depending on needs. As some depends on the tex engine there are limitations (performance, memory and complexity constraints: adding features like these might definitely not impact performance).
Source and target properties were added in order to avoid interference with math spacing but can also be used in text, where they are part of the larger package of box properties that was already around.
\startTEXpage[offset=2cm]
\setbox 0 \ruledhbox source 123 anchors 1 2 {one} \setbox 2 \ruledhbox target 123 {test 1}
\dontleavehmode \box2 \box0
\setbox 0 \ruledhbox target 124 orientation 2 anchors 1 4 xoffset -10pt {two} \setbox 2 \ruledhbox source 124 {test 2}
\dontleavehmode \box2 \box0
\stopTEXpage
With sources and targets one has to keep in mind that they don't participate in the box dimensions! Although excessive usage puts some strain on the backend in practice it probably goes unnoticed. Also, be careful with the source and target id's! There is currently no low level allocation mechanism so stick to positive numbers.
So, lots to play with, if you're in the mood,
Hans
(There is quite some experimental code around but to what extend it ends up in the core depends on demand, time, motivation etc. As you can guess, Mikael and I having a lot of math fun is motivating.)
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------