我正在尝试将一个新点初始化为另外两个点的线性组合,作为绘制一条花式线的第一步。
目前我正在尝试这个:
vardef line(expr pfirst, psecond)=
tangent := psecond-pfirst;
draw u*pfirst--u*psecond withpen pencircle scaled 1 withcolor black;
enddef;
我也尝试过不使用冒号,而是将表达式放在括号中。
我得到的错误是:
>> tangent
(luamplib) >> (-1,-1)
(luamplib) ! Equation cannot be performed (numeric=pair).
(luamplib) <to be read again>
答案1
中未声明的变量metapost
被假定为numeric
。因此,类似
beginfig(0);
% myvar undeclared-> assumed to be numeric
myvar:=0;
endfig;
不会产生错误。但是,
beginfig(0);
% myvar undeclared-> assumed to be numeric
% error because assigning the pair (0,0) to the numeric variable myvar.
myvar:=(0,0);
endfig;
将产生与上述相同的错误。因此,可以通过告知metapost
这tangent
是一个pair
变量来解决您的问题:
vardef line(expr pfirst, psecond)=
save tangent; % make tangent local to the vardef (if this is desired)
pair tangent; % tell metapost that tangent will hold a pair
tangent := psecond-pfirst;
draw u*pfirst--u*psecond withpen pencircle scaled 1 withcolor black;
enddef;