鉴于此 MWE(在 ConTeXt 下编译)
\starttext
\startMPpage
%variables
u:=1mm ;
numeric l[];
l[1]:=30 ;
l[2]:=70 ;
draw (0,0) -- (0,100u) ;
%this does not work
%fill unitsquare xscaled (l[2]-l[1])*u yscaled 100*u shifted (l[1]*u,0) withcolor red ;
%this does
fill unitsquare xscaled (l[2]*u-l[1]*u) yscaled 100u shifted (l[1]*u,0) withcolor red ;
\stopMPpage
\stoptext
你能解释一下为什么吗
fill unitsquare xscaled (l[2]-l[1])*u yscaled 100*u shifted (l[1]*u,0) withcolor red ;
失败,而
fill unitsquare xscaled (l[2]*u-l[1]*u) yscaled 100*u shifted (l[1]*u,0) withcolor red ;
能完成这个工作吗?
从我(数学不太好)的角度来看,(l[2]-l[1])*u 应该完全相同,而这种误解常常导致我犯令人沮丧的错误。
我希望这不是重复的,但不知道如何给出一个合适的标题。
答案1
根据 Metapost 手册xscaled
,基本的,因此它与乘法具有相同的优先级。
它以一对路径或图片和一个数字作为参数,分别返回一对路径或图片;使用“不起作用”的语法,Metapost 正在做
unitsquare xscaled (l[2]-l[1])
然后尝试将结果乘以u
,这是一个无效的操作。
当操作具有相同的优先级(例如所有主操作)时,Metapost 会在左侧关联。要获得不同的关联,您需要使用括号。
你得到的错误是
>> path
>> 2.83464
! Not implemented: (path)*(known numeric).
<to be read again>
yscaled
当然((l[2]-l[1])*u)
也可以,但是外面的括号不能省略。