* Metafun: is it possible to redefine dotlabel to draw a square ? @ 2020-12-10 17:30 Otared Kavian 2020-12-10 17:44 ` Aditya Mahajan 0 siblings, 1 reply; 8+ messages in thread From: Otared Kavian @ 2020-12-10 17:30 UTC (permalink / raw) To: mailing list for ConTeXt users Hi all, In Metafun when representing a point I woul dlike to have some dots represented by a square (or even by another scalable symbol): for instance in the following I would like the dot at the point B to be a square: \starttext \startMPcode draw (2cm,3cm) -- (3cm,5cm) ; dotlabel(textext("\switchtobodyfont[8pt]" & "A"), (2cm,3cm)) withpen pencircle scaled 12pt withcolor transparent("exclusion",.5,red) ; dotlabel(textext("\switchtobodyfont[8pt]" & "B"), (3cm,5cm)) withpen pencircle scaled 12pt withcolor transparent("exclusion",.5,red) ; \stopMPcode \stoptext I wonder whether it is possible to define something like « drawsquaredot » or « squaredotlabel » in order to do this. If I use for B the command withpen pensquare scaled 12pt then the dot is a square, but the label B is drawn in a strange way. Thanks for any help: Otared ___________________________________________________________________________________ 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 ___________________________________________________________________________________ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Metafun: is it possible to redefine dotlabel to draw a square ? 2020-12-10 17:30 Metafun: is it possible to redefine dotlabel to draw a square ? Otared Kavian @ 2020-12-10 17:44 ` Aditya Mahajan 2020-12-10 17:57 ` Otared Kavian 2020-12-10 18:07 ` Hans Hagen 0 siblings, 2 replies; 8+ messages in thread From: Aditya Mahajan @ 2020-12-10 17:44 UTC (permalink / raw) To: mailing list for ConTeXt users [-- Attachment #1: Type: text/plain, Size: 2104 bytes --] On Thu, 10 Dec 2020, Otared Kavian wrote: > Hi all, > > In Metafun when representing a point I woul dlike to have some dots represented by a square (or even by another scalable symbol): for instance in the following I would like the dot at the point B to be a square: > > \starttext > \startMPcode > draw (2cm,3cm) -- (3cm,5cm) ; > dotlabel(textext("\switchtobodyfont[8pt]" & "A"), (2cm,3cm)) > withpen pencircle scaled 12pt > withcolor transparent("exclusion",.5,red) ; > > dotlabel(textext("\switchtobodyfont[8pt]" & "B"), (3cm,5cm)) > withpen pencircle scaled 12pt > withcolor transparent("exclusion",.5,red) ; > \stopMPcode > \stoptext > > I wonder whether it is possible to define something like « drawsquaredot » or « squaredotlabel » in order to do this. dotlabel uses a pen to draw the dot, and I am not sure why it uses that rather than a path. Here is a (to me) simpler definition, where you can change the shape: \startMPdefinitions newpath dotlabelshape; dotlabelshape := fullcircle; vardef dotlabel@#(expr s,z) text t_ = label@#(s,z) t_ ; fill (dotlabelshape scaled 2dotlabeldiam) shifted z t_; enddef ; \stopMPdefinitions \starttext \startMPcode newpath p ; p := (2cm, 3cm) -- (3cm, 5cm); dotlabeldiam := 12pt; % Default draw p; dotlabel(textext("\switchtobodyfont[8pt]" & "A"), point 0 of p) withcolor transparent("exclusion",.5,red) ; dotlabel(textext("\switchtobodyfont[8pt]" & "B"), point 1 of p) withcolor transparent("exclusion",.5,red) ; % Using a square "dot" p := p shifted (5cm, 0); dotlabelshape := fullsquare; draw p; dotlabel(textext("\switchtobodyfont[8pt]" & "A"), point 0 of p) withcolor transparent("exclusion",.5,red) ; dotlabel(textext("\switchtobodyfont[8pt]" & "B"), point 1 of p) withcolor transparent("exclusion",.5,red) ; \stopMPcode \stoptext These types of macros are also a good candidate for the new LMTX syntax, where we can make all components configurable via a key-value interface (labeldistance etc. as well). Aditya [-- Attachment #2: Type: text/plain, Size: 493 bytes --] ___________________________________________________________________________________ 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 ___________________________________________________________________________________ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Metafun: is it possible to redefine dotlabel to draw a square ? 2020-12-10 17:44 ` Aditya Mahajan @ 2020-12-10 17:57 ` Otared Kavian 2020-12-10 18:04 ` Aditya Mahajan 2020-12-10 18:07 ` Hans Hagen 1 sibling, 1 reply; 8+ messages in thread From: Otared Kavian @ 2020-12-10 17:57 UTC (permalink / raw) To: mailing list for ConTeXt users Hi Aditya, Thank you very much ! That's great indeed, you gave me an elegant solution. One more question, in order for me to understand a little more: when defining a new dotlabel as you do, might it not conflict with the internal definitions of dotlabel in Metafun in some other place? Maybe it is safer for me to call it something like « dotshapelabel » ? Best regards and agin many thanks: Otared > On 10 Dec 2020, at 18:44, Aditya Mahajan <adityam@umich.edu> wrote: > > On Thu, 10 Dec 2020, Otared Kavian wrote: > >> Hi all, >> >> In Metafun when representing a point I woul dlike to have some dots represented by a square (or even by another scalable symbol): for instance in the following I would like the dot at the point B to be a square: >> >> \starttext >> \startMPcode >> draw (2cm,3cm) -- (3cm,5cm) ; >> dotlabel(textext("\switchtobodyfont[8pt]" & "A"), (2cm,3cm)) >> withpen pencircle scaled 12pt >> withcolor transparent("exclusion",.5,red) ; >> >> dotlabel(textext("\switchtobodyfont[8pt]" & "B"), (3cm,5cm)) >> withpen pencircle scaled 12pt >> withcolor transparent("exclusion",.5,red) ; >> \stopMPcode >> \stoptext >> >> I wonder whether it is possible to define something like « drawsquaredot » or « squaredotlabel » in order to do this. > > dotlabel uses a pen to draw the dot, and I am not sure why it uses that rather than a path. Here is a (to me) simpler definition, where you can change the shape: > > \startMPdefinitions > newpath dotlabelshape; > > dotlabelshape := fullcircle; > > vardef dotlabel@#(expr s,z) text t_ = > label@#(s,z) t_ ; > fill (dotlabelshape scaled 2dotlabeldiam) shifted z t_; > enddef ; > \stopMPdefinitions > > \starttext > \startMPcode > newpath p ; > p := (2cm, 3cm) -- (3cm, 5cm); > dotlabeldiam := 12pt; > > % Default > draw p; > dotlabel(textext("\switchtobodyfont[8pt]" & "A"), point 0 of p) > withcolor transparent("exclusion",.5,red) ; > > dotlabel(textext("\switchtobodyfont[8pt]" & "B"), point 1 of p) > withcolor transparent("exclusion",.5,red) ; > > % Using a square "dot" > p := p shifted (5cm, 0); > dotlabelshape := fullsquare; > > draw p; > dotlabel(textext("\switchtobodyfont[8pt]" & "A"), point 0 of p) > withcolor transparent("exclusion",.5,red) ; > > dotlabel(textext("\switchtobodyfont[8pt]" & "B"), point 1 of p) > withcolor transparent("exclusion",.5,red) ; > \stopMPcode > \stoptext > > These types of macros are also a good candidate for the new LMTX syntax, where we can make all components configurable via a key-value interface (labeldistance etc. as well). > > Aditya > > ___________________________________________________________________________________ > 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 > ___________________________________________________________________________________ ___________________________________________________________________________________ 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 ___________________________________________________________________________________ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Metafun: is it possible to redefine dotlabel to draw a square ? 2020-12-10 17:57 ` Otared Kavian @ 2020-12-10 18:04 ` Aditya Mahajan 2020-12-10 18:50 ` Hans Hagen 0 siblings, 1 reply; 8+ messages in thread From: Aditya Mahajan @ 2020-12-10 18:04 UTC (permalink / raw) To: mailing list for ConTeXt users [-- Attachment #1: Type: text/plain, Size: 625 bytes --] On Thu, 10 Dec 2020, Otared Kavian wrote: > Hi Aditya, > Thank you very much ! > That's great indeed, you gave me an elegant solution. > > One more question, in order for me to understand a little more: when defining a new dotlabel as you do, might it not conflict with the internal definitions of dotlabel in Metafun in some other place? > Maybe it is safer for me to call it something like « dotshapelabel » ? In general, I agree. Redefining internal macros has the advantage that your code doesn't have to change. See, for example: https://github.com/adityam/mp-sketch/blob/master/mp-sketch.mp Aditya [-- Attachment #2: Type: text/plain, Size: 493 bytes --] ___________________________________________________________________________________ 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 ___________________________________________________________________________________ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Metafun: is it possible to redefine dotlabel to draw a square ? 2020-12-10 18:04 ` Aditya Mahajan @ 2020-12-10 18:50 ` Hans Hagen 0 siblings, 0 replies; 8+ messages in thread From: Hans Hagen @ 2020-12-10 18:50 UTC (permalink / raw) To: mailing list for ConTeXt users, Aditya Mahajan On 12/10/2020 7:04 PM, Aditya Mahajan wrote: > On Thu, 10 Dec 2020, Otared Kavian wrote: > >> Hi Aditya, >> Thank you very much ! >> That's great indeed, you gave me an elegant solution. >> >> One more question, in order for me to understand a little more: when defining a new dotlabel as you do, might it not conflict with the internal definitions of dotlabel in Metafun in some other place? >> Maybe it is safer for me to call it something like « dotshapelabel » ? > > In general, I agree. Redefining internal macros has the advantage that your code doesn't have to change. See, for example: it depends a bit ... redefing dotlabel in a compatible way is kind of ok, but using/redefining \foo_bar_something_internal is a real bad idea as that is not part of the interface (okay, i know that there are macro packages out there where it's part of the concept to redefine low level stuff for styles but in context we should try to avoid it ... we should then adapt the high level interface to suport something) it also depends who does it ... i know that aditya knows the internals well enough to deal with it (one of my concerns is always that while we try to come up with efficient solutions it's easy to make things inefficient but that's not the case here ... unless of course we want to nurture the 'context is slow' meme) 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 ___________________________________________________________________________________ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Metafun: is it possible to redefine dotlabel to draw a square ? 2020-12-10 17:44 ` Aditya Mahajan 2020-12-10 17:57 ` Otared Kavian @ 2020-12-10 18:07 ` Hans Hagen 2020-12-10 19:37 ` Aditya Mahajan 1 sibling, 1 reply; 8+ messages in thread From: Hans Hagen @ 2020-12-10 18:07 UTC (permalink / raw) To: mailing list for ConTeXt users, Aditya Mahajan On 12/10/2020 6:44 PM, Aditya Mahajan wrote: > On Thu, 10 Dec 2020, Otared Kavian wrote: > >> Hi all, >> >> In Metafun when representing a point I woul dlike to have some dots represented by a square (or even by another scalable symbol): for instance in the following I would like the dot at the point B to be a square: >> >> \starttext >> \startMPcode >> draw (2cm,3cm) -- (3cm,5cm) ; >> dotlabel(textext("\switchtobodyfont[8pt]" & "A"), (2cm,3cm)) >> withpen pencircle scaled 12pt >> withcolor transparent("exclusion",.5,red) ; >> >> dotlabel(textext("\switchtobodyfont[8pt]" & "B"), (3cm,5cm)) >> withpen pencircle scaled 12pt >> withcolor transparent("exclusion",.5,red) ; >> \stopMPcode >> \stoptext >> >> I wonder whether it is possible to define something like « drawsquaredot » or « squaredotlabel » in order to do this. > > dotlabel uses a pen to draw the dot, and I am not sure why it uses that rather than a path. Here is a (to me) simpler definition, where you can change the shape: just look in the pdf ... in your case the dot is a n point path while otherwise it uses the default postscript pen (which is a dot) actually fullcircle is pencircle so you can ponder why that is the case -) > \startMPdefinitions > newpath dotlabelshape; > > dotlabelshape := fullcircle; > > vardef dotlabel@#(expr s,z) text t_ = > label@#(s,z) t_ ; > fill (dotlabelshape scaled 2dotlabeldiam) shifted z t_; > enddef ; > \stopMPdefinitions > > \starttext > \startMPcode > newpath p ; > p := (2cm, 3cm) -- (3cm, 5cm); > dotlabeldiam := 12pt; > > % Default > draw p; > dotlabel(textext("\switchtobodyfont[8pt]" & "A"), point 0 of p) > withcolor transparent("exclusion",.5,red) ; > > dotlabel(textext("\switchtobodyfont[8pt]" & "B"), point 1 of p) > withcolor transparent("exclusion",.5,red) ; > > % Using a square "dot" > p := p shifted (5cm, 0); > dotlabelshape := fullsquare; > > draw p; > dotlabel(textext("\switchtobodyfont[8pt]" & "A"), point 0 of p) > withcolor transparent("exclusion",.5,red) ; > > dotlabel(textext("\switchtobodyfont[8pt]" & "B"), point 1 of p) > withcolor transparent("exclusion",.5,red) ; > \stopMPcode > \stoptext > > These types of macros are also a good candidate for the new LMTX syntax, where we can make all components configurable via a key-value interface (labeldistance etc. as well). it surprised me that a math guru like you doesn't do this: vardef dotlabel@#(expr s,z) text t_ = % draw textext("$\bullet$") scaled (1/2) shifted z ; % draw textext("$\blacktriangle$") scaled (1/4) shifted z ; draw textext("$\blacksquare$") scaled (1/4) shifted z ; label@#(s,z) t_ ; enddef ; \stopMPdefinitions ----------------------------------------------------------------- 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 ___________________________________________________________________________________ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Metafun: is it possible to redefine dotlabel to draw a square ? 2020-12-10 18:07 ` Hans Hagen @ 2020-12-10 19:37 ` Aditya Mahajan 2020-12-10 21:36 ` Hans Hagen 0 siblings, 1 reply; 8+ messages in thread From: Aditya Mahajan @ 2020-12-10 19:37 UTC (permalink / raw) To: mailing list for ConTeXt users On Thu, 10 Dec 2020, Hans Hagen wrote: > > dotlabel uses a pen to draw the dot, and I am not sure why it uses that rather > > than a path. Here is a (to me) simpler definition, where you can change the > > shape: > > just look in the pdf ... in your case the dot is a n point path while otherwise > it uses the default postscript pen (which is a dot) Ah, that makes sense. > it surprised me that a math guru like you doesn't do this: > > vardef dotlabel@#(expr s,z) text t_ = > % draw textext("$\bullet$") scaled (1/2) shifted z ; > % draw textext("$\blacktriangle$") scaled (1/4) shifted z ; > draw textext("$\blacksquare$") scaled (1/4) shifted z ; > label@#(s,z) t_ ; > enddef ; > \stopMPdefinitions Ha! I know that you said this as a joke, but as someone who did try to use the old font-based picture environment in LaTeX back in the day, I would never try to use fonts for "drawing". Especially, math fonts, where every designer has a different idea of what the shape should look like. Aditya ___________________________________________________________________________________ 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 ___________________________________________________________________________________ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Metafun: is it possible to redefine dotlabel to draw a square ? 2020-12-10 19:37 ` Aditya Mahajan @ 2020-12-10 21:36 ` Hans Hagen 0 siblings, 0 replies; 8+ messages in thread From: Hans Hagen @ 2020-12-10 21:36 UTC (permalink / raw) To: mailing list for ConTeXt users, Aditya Mahajan On 12/10/2020 8:37 PM, Aditya Mahajan wrote: > On Thu, 10 Dec 2020, Hans Hagen wrote: > >>> dotlabel uses a pen to draw the dot, and I am not sure why it uses that rather >>> than a path. Here is a (to me) simpler definition, where you can change the >>> shape: >> >> just look in the pdf ... in your case the dot is a n point path while otherwise >> it uses the default postscript pen (which is a dot) > > Ah, that makes sense. > >> it surprised me that a math guru like you doesn't do this: >> >> vardef dotlabel@#(expr s,z) text t_ = >> % draw textext("$\bullet$") scaled (1/2) shifted z ; >> % draw textext("$\blacktriangle$") scaled (1/4) shifted z ; >> draw textext("$\blacksquare$") scaled (1/4) shifted z ; >> label@#(s,z) t_ ; >> enddef ; >> \stopMPdefinitions > > Ha! I know that you said this as a joke, but as someone who did try to use the old font-based picture environment in LaTeX back in the day, I would never try to use fonts for "drawing". Especially, math fonts, where every designer has a different idea of what the shape should look like. ah pictex memories ... drawing lines with cmr5 periods ... but actually, we can define a stable font with symbols in metafun and use that (quite efficient too) and then one can even cut'n'paste those tiny symbols (don't worry ... not much of a challenge so low on my list) 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 ___________________________________________________________________________________ ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2020-12-10 21:36 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-12-10 17:30 Metafun: is it possible to redefine dotlabel to draw a square ? Otared Kavian 2020-12-10 17:44 ` Aditya Mahajan 2020-12-10 17:57 ` Otared Kavian 2020-12-10 18:04 ` Aditya Mahajan 2020-12-10 18:50 ` Hans Hagen 2020-12-10 18:07 ` Hans Hagen 2020-12-10 19:37 ` Aditya Mahajan 2020-12-10 21:36 ` Hans Hagen
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).