"Redundant equation" is a MetaPost bug in MkIV?
Hi, See the following example: \starttext \startMPcode u = 1cm; xmin = -2.6u; xmax = 4u; drawarrow (xmin,0)--(xmax,0); \stopMPcode \stoptext It can be compiled rightly. But when I add the 'label' line into it, see: \starttext \startMPcode u = 1cm; xmin = -2.6u; xmax = 4u; drawarrow (xmin,0)--(xmax,0); label.lft("hello",(0, 0)); \stopMPcode \stoptext Now it can not be compiled and luatex outputs: mplib : loading 'metafun.mp' (experimental metapost version two) mplib > mp terminal: ! Redundant equation. <to be read again> ; <*> u = 1cm; xmin = -2.6u; xmax = 4u; drawarrow (xmin,0)--(xmax,0); label.lf... ! Redundant equation. <to be read again> Is this a bug or it always need to use 'save' macro to hold these local variable in metafun? -- Best regards, Li Yanrui
On Sun, 5 Dec 2010, Li Yanrui (李延瑞) wrote:
Hi,
See the following example:
¥starttext ¥startMPcode u = 1cm; xmin = -2.6u; xmax = 4u; drawarrow (xmin,0)--(xmax,0); ¥stopMPcode ¥stoptext
It can be compiled rightly. But when I add the 'label' line into it, see:
¥starttext ¥startMPcode u = 1cm; xmin = -2.6u; xmax = 4u; drawarrow (xmin,0)--(xmax,0); label.lft("hello",(0, 0)); ¥stopMPcode ¥stoptext
Now it can not be compiled and luatex outputs:
mplib : loading 'metafun.mp' (experimental metapost version two) mplib > mp terminal: ! Redundant equation. <to be read again> ; <*> u = 1cm; xmin = -2.6u; xmax = 4u; drawarrow (xmin,0)--(xmax,0); label.lf...
! Redundant equation. <to be read again>
Is this a bug or it always need to use 'save' macro to hold these local variable in metafun?
When a label (or btex ... etex) is present, ConTeXt processes the MP code twice: once to typeset the labels and then to place to labels. You get a redundant equation in the second pass. The easiest way to prevent this is to use := instead of = Aditya
2010/12/5 Aditya Mahajan
On Sun, 5 Dec 2010, Li Yanrui (李延瑞) wrote:
When a label (or btex ... etex) is present, ConTeXt processes the MP code twice: once to typeset the labels and then to place to labels. You get a redundant equation in the second pass.
The easiest way to prevent this is to use := instead of =
I see now. Thank you Aditya and others ! -- Best regards, Li Yanrui
On 12/05/2010 04:14 AM, Li Yanrui (李延瑞) wrote:
Is this a bug or it always need to use 'save' macro to hold these local variable in metafun?
It is a side-effect of MkIV running your code through metapost multiple times. But why it does that, I am not sure. Best wishes, Taco
Li Yanrui (李延瑞) wrote:
Hi,
Now it can not be compiled and luatex outputs:
mplib : loading 'metafun.mp' (experimental metapost version two) mplib > mp terminal: ! Redundant equation. <to be read again> ; <*> u = 1cm; xmin = -2.6u; xmax = 4u; drawarrow (xmin,0)--(xmax,0); label.lf...
! Redundant equation. <to be read again>
Is this a bug or it always need to use 'save' macro to hold these local variable in metafun? ConTeXt compiles all metapost code in one long run, so you have to re- declare 'u' to avoid this error (e.g. 'save' or 'numeric u;').
Hello, You should change all of the "=" to ":=", as in u := 1cm; This instructs metapost to assign a value to the variable; the standard form "u = 1cm" is a formula for metapost to solve. It tries then to resolve u = 1cm; xmin = -2.6u; and xmax = 4u; as a coupled set of equations. Sometimes you can get away with this but in general one should use the := (assignment) form. Consider, for example: u = u + 1; (a standard programming statement but nonsense for a mathematician). Alan On Sunday 05 December 2010 04:14:01 Li Yanrui (李延瑞) wrote:
Hi,
See the following example:
\starttext \startMPcode u = 1cm; xmin = -2.6u; xmax = 4u; drawarrow (xmin,0)--(xmax,0); \stopMPcode \stoptext
It can be compiled rightly. But when I add the 'label' line into it, see:
\starttext \startMPcode u = 1cm; xmin = -2.6u; xmax = 4u; drawarrow (xmin,0)--(xmax,0); label.lft("hello",(0, 0)); \stopMPcode \stoptext
Now it can not be compiled and luatex outputs:
mplib : loading 'metafun.mp' (experimental metapost version two) mplib > mp terminal: ! Redundant equation. <to be read again> ; <*> u = 1cm; xmin = -2.6u; xmax = 4u; drawarrow (xmin,0)--(xmax,0); label.lf...
! Redundant equation. <to be read again>
Is this a bug or it always need to use 'save' macro to hold these local variable in metafun?
2010/12/5 Alan BRASLAU
Hello,
You should change all of the "=" to ":=", as in u := 1cm;
This instructs metapost to assign a value to the variable; the standard form "u = 1cm" is a formula for metapost to solve. It tries then to resolve u = 1cm; xmin = -2.6u; and xmax = 4u; as a coupled set of equations. Sometimes you can get away with this but in general one should use the := (assignment) form.
Consider, for example: u = u + 1; (a standard programming statement but nonsense for a mathematician).
I know the difference between "=" and ":=". But that example shows the metafun in MkIV is abnormal since it can be compiled rightly in MkII, which should not have any syntax error. In fact, the following example can be compiled rightly in MkIV. \starttext \startMPcode save u, xmin, xmax; u = 1cm; xmin = -2.6u; xmax = 4u; drawarrow (xmin,0)--(xmax,0); label.lft("hello",(0, 0)); \stopMPcode \stoptext -- Best regards, Li Yanrui (李延瑞)
participants (5)
-
Aditya Mahajan
-
Alan BRASLAU
-
Li Yanrui (李延瑞)
-
Taco Hoekwater
-
Yury G. Kudryashov