我想制作一个宏swap
:
vardef swap(expr a, b) =
save tmp;
expr tmp;
tmp := a;
a := b;
b := tmp;
enddef;
但是编译的时候出现错误:
! A statement can't begin with `expr'.
我以为我可以声明一个tmp
类型的变量expr
...我打算交换不同类型的变量。
答案1
没有expr
变量类型。你想要suffix a,b
,而不是expr
。你需要声明tmp
为与 相同的类型a
(当然b
,也可以是 )。
vardef swap(suffix a,b)=
save tmp;
if numeric a: numeric tmp;
elseif pair a: pair tmp;
elseif path a: pair tmp;
elseif transform a: transform tmp;
elseif color a: color tmp;
elseif cmykcolor a: cmykcolor tmp;
elseif string a: string tmp;
elseif boolean a: boolean tmp;
elseif picture a: picture tmp;
elseif pen a: pen tmp;
fi
tmp:=b;
b:=a;
a:=tmp;
enddef;
pair u;u=(1,0);
pair v;v=(0,1);
swap(u,v);
show u;show v;
end
控制台输出:
This is MetaPost, version 2.01 (TeX Live 2021) (kpathsea version 6.3.3)
(/usr/local/texlive/2021/texmf-dist/metapost/base/mpost.mp
(/usr/local/texlive/2021/texmf-dist/metapost/base/plain.mp
Preloading the plain mem file, version 1.005) ) (./swap.mp
>> (0,1)
>> (1,0) )
Transcript written on swap.log.