MetaPost vardef:如何声明“expr”类型的变量?

MetaPost vardef:如何声明“expr”类型的变量?

我想制作一个宏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.

相关内容