! Declared variable conflicts with previous vardef [Metapost]
Hi, I have a problem compiling this file. Thanks. Fabrice ###### test file ################################################ \starttext \setupbodyfont [pagella,9pt] \startMPpage[offset=2pt] path p, q, r, b ; pair z[]; p := unitsquare xyscaled (9cm,5cm) ; z[0] = (2cm,0cm) ; z[1] = (2cm,2cm) ; z[2] = (0cm,2cm) ; q := llcorner p--z[0]--z[1]--z[2]--cycle ; r := unitsquare xyscaled (7cm,3cm) shifted(2cm,2cm) ; b := z[2]--z[1]--ulcorner r--urcorner p--lrcorner r--z[1]--z[0]--llcorner p--cycle ; draw p ; draw b numberstriped (.25,15,5) withcolor magenta ; label.llft("A", p) ; label.lrt("D", p) ; label.ulft("C", p) ; label.urt("B", p) ; label.lft("M", z[2]) ; label.ulft("N", z[1]) ; label.bot("P", z[0]) ; label.top("J", ulcorner r) ; label.rt("I", lrcorner r) ; label.bot(btex $x$ etex,(llcorner p+z[0])/2); label.lft(btex $x$ etex,(llcorner p+z[2])/2); \stopMPpage \stoptext ############################################################# ! Declared variable conflicts with previous vardef. <to be read again> ; <*> path p, q, r, b ; pair z[] ; z[0] = (2cm,0cm) ; z[1] = (2cm,2cm) ; z[2] ... You can't use, e.g., `numeric foo[]' after `vardef foo'. Proceed, and I'll ignore the illegal redeclaration.
z is a MetaPost intrinsic, something along the lines of vardef z@#=(x@#,y@#) enddef; so you can't use the same name for a pair. Actually you can simply delete the declaration pair z[]; from your file and it will work as intended. If you insist on using your own declaration of z, then you have to stash away MetaPost's definition using save z; pair z[]; I recommend the former, just delete pair z[]; On 3/01/19 2:43 PM, Fabrice Couvreur wrote:
Hi, I have a problem compiling this file. Thanks. Fabrice
###### test file ################################################ \starttext \setupbodyfont [pagella,9pt] \startMPpage[offset=2pt] path p, q, r, b ; pair z[]; p := unitsquare xyscaled (9cm,5cm) ; z[0] = (2cm,0cm) ; z[1] = (2cm,2cm) ; z[2] = (0cm,2cm) ; q := llcorner p--z[0]--z[1]--z[2]--cycle ; r := unitsquare xyscaled (7cm,3cm) shifted(2cm,2cm) ; b := z[2]--z[1]--ulcorner r--urcorner p--lrcorner r--z[1]--z[0]--llcorner p--cycle ; draw p ; draw b numberstriped (.25,15,5) withcolor magenta ; label.llft("A", p) ; label.lrt("D", p) ; label.ulft("C", p) ; label.urt("B", p) ; label.lft("M", z[2]) ; label.ulft("N", z[1]) ; label.bot("P", z[0]) ; label.top("J", ulcorner r) ; label.rt("I", lrcorner r) ; label.bot(btex $x$ etex,(llcorner p+z[0])/2); label.lft(btex $x$ etex,(llcorner p+z[2])/2); \stopMPpage
\stoptext ############################################################# ! Declared variable conflicts with previous vardef. <to be read again> ; <*> path p, q, r, b ; pair z[] ; z[0] = (2cm,0cm) ; z[1] = (2cm,2cm) ; z[2] ... You can't use, e.g., `numeric foo[]' after `vardef foo'. Proceed, and I'll ignore the illegal redeclaration.
___________________________________________________________________________________ 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 ___________________________________________________________________________________
On Thu, 3 Jan 2019 16:22:06 +1300 (UTC)
Henri Menke
z is a MetaPost intrinsic, something along the lines of
vardef z@#=(x@#,y@#) enddef;
so you can't use the same name for a pair. Actually you can simply delete the declaration
pair z[];
I had already told Fabrice this a couple of days ago... Alan
Hi,
It is true that Alan has already answered this question but I was misled
because the file that I compiled without problem is this one, even leaving
pair z[ ] (I can think that it is because of this instruction z := point
3.6 of p ;)
\starttext
\startMPpage[offset=2pt]
path p, q, r, b ; pair z ;
p := unitsquare scaled 4cm ;
* z := point 3.6 of p ;*
q := z--urcorner p ;
r := z--urcorner p-- reverse bottomboundary p--cycle ;
b := reverse bottomboundary p ;
%r := q -- reverse bottomboundary p -- cycle ; definition of Hans
draw b--q withpen pencircle scaled 1mm withcolor red ;
draw p ;
draw r numberstriped (.25,10,5) withcolor magenta ;
label.llft("B", p) ;
label.lrt("C", p) ;
label.ulft("A", p) ;
label.urt("D", p) ;
label.lft("M", p) ;
\stopMPpage
\startMPpage[offset=2pt]
defaultfont := "texgyrepagella-regular*default" ;
defaultscale :=0.8 ;
path p, q, r, b ;* pair z[];*
p := unitsquare xyscaled (9cm,5cm) ;
z[0] = (2cm,0cm) ;
z[1] = (2cm,2cm) ;
z[2] = (0cm,2cm) ;
q := llcorner p--z[0]--z[1]--z[2]--cycle ;
r := unitsquare xyscaled (7cm,3cm) shifted(2cm,2cm) ;
b := z[2]--z[1]--ulcorner r--urcorner p--lrcorner r--z[1]--z[0]--llcorner
p--cycle ;
draw p ;
draw b numberstriped (.25,15,5) withcolor magenta ;
label.llft("A", p) ;
label.lrt("D", p) ;
label.ulft("C", p) ;
label.urt("B", p) ;
label.lft("M", z[2]) ;
label.ulft("N", z[1]) ;
label.bot("P", z[0]) ;
label.top("J", ulcorner r) ;
label.rt("I", lrcorner r) ;
label.bot(btex $x$ etex,(llcorner p+z[0])/2);
label.lft(btex $x$ etex,(llcorner p+z[2])/2);
\stopMPpage
\stoptext
Le jeu. 3 janv. 2019 à 07:12, Alan Braslau
On Thu, 3 Jan 2019 16:22:06 +1300 (UTC) Henri Menke
wrote: z is a MetaPost intrinsic, something along the lines of
vardef z@#=(x@#,y@#) enddef;
so you can't use the same name for a pair. Actually you can simply delete the declaration
pair z[];
I had already told Fabrice this a couple of days ago...
Alan
___________________________________________________________________________________ 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
___________________________________________________________________________________
Hi,
On 3 Jan 2019, at 11:31, Fabrice Couvreur
wrote: Hi, It is true that Alan has already answered this question but I was misled because the file that I compiled without problem is this one, even leaving pair z[ ] (I can think that it is because of this instruction z := point 3.6 of p ;)
It works because of the "pair z” statement. Attempted explanation: Metapost variable names are built up hierarchically. When you say “path p” or “color V.Q” or “numeric z[]” or “vardef z”, it changes the type of just the last segment, not other segments (not even the immediately preceding one). Note that in the case of z[], the last variable segment is the common subscript [] not the ‘alphabetical segment’ “z”. It is actually OK to say e,g, pair z ; color z[]; numeric z[].a; z := point 3.6 of p ; z[1] := red; path z[]; % z[1] is now undefined again after this line, % but z[].a is still numeric z[3] = unitsquare; z[2].a = 5; Redeclaration of intermediate segments works for all declarations except for ‘vardef’. The reason behind this is that vardefs can have suffixes, and metapost does not really differentiate between vardefs defined with and without suffixes (except when called). Of course actual suffixes would interfere with the parsing of any potentially following name segments, which is why re-declarations ‘below’ a vardef’d segment are illegal. I hope that makes sense, it is not the easiest thing to explain. Best wishes, Taco
\starttext \startMPpage[offset=2pt] path p, q, r, b ; pair z ; p := unitsquare scaled 4cm ; z := point 3.6 of p ; q := z--urcorner p ; r := z--urcorner p-- reverse bottomboundary p--cycle ; b := reverse bottomboundary p ; %r := q -- reverse bottomboundary p -- cycle ; definition of Hans draw b--q withpen pencircle scaled 1mm withcolor red ; draw p ; draw r numberstriped (.25,10,5) withcolor magenta ; label.llft("B", p) ; label.lrt("C", p) ; label.ulft("A", p) ; label.urt("D", p) ; label.lft("M", p) ; \stopMPpage \startMPpage[offset=2pt] defaultfont := "texgyrepagella-regular*default" ; defaultscale :=0.8 ; path p, q, r, b ; pair z[]; p := unitsquare xyscaled (9cm,5cm) ; z[0] = (2cm,0cm) ; z[1] = (2cm,2cm) ; z[2] = (0cm,2cm) ; q := llcorner p--z[0]--z[1]--z[2]--cycle ; r := unitsquare xyscaled (7cm,3cm) shifted(2cm,2cm) ; b := z[2]--z[1]--ulcorner r--urcorner p--lrcorner r--z[1]--z[0]--llcorner p--cycle ; draw p ; draw b numberstriped (.25,15,5) withcolor magenta ; label.llft("A", p) ; label.lrt("D", p) ; label.ulft("C", p) ; label.urt("B", p) ; label.lft("M", z[2]) ; label.ulft("N", z[1]) ; label.bot("P", z[0]) ; label.top("J", ulcorner r) ; label.rt("I", lrcorner r) ; label.bot(btex $x$ etex,(llcorner p+z[0])/2); label.lft(btex $x$ etex,(llcorner p+z[2])/2); \stopMPpage
\stoptext
Le jeu. 3 janv. 2019 à 07:12, Alan Braslau
a écrit : On Thu, 3 Jan 2019 16:22:06 +1300 (UTC) Henri Menke wrote: z is a MetaPost intrinsic, something along the lines of
vardef z@#=(x@#,y@#) enddef;
so you can't use the same name for a pair. Actually you can simply delete the declaration
pair z[];
I had already told Fabrice this a couple of days ago...
Alan ___________________________________________________________________________________ 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 ___________________________________________________________________________________
Taco Hoekwater Elvenkind BV
participants (4)
-
Alan Braslau
-
Fabrice Couvreur
-
Henri Menke
-
Taco Hoekwater