Metapost:在 vardef 中传递二维数组

Metapost:在 vardef 中传递二维数组

我们可以传入二维数组吗vardef?下面是一小段代码。编译失败。

outputtemplate := "%j-%c.eps";
prologues := 3;
input boxes

beginfig(1)

vardef table (expr upper_left_centre, row, col, data) =
  label(data[0][0], upper_left_centre);
enddef;

string data[][];
% title
data[0][0] := "Wall height";

table (origin, 2, 6, data);

endfig;

答案1

为此,您可以将此数组声明为后缀范围。

outputtemplate := "%j-%c.eps";
prologues := 3;

beginfig(1)

vardef table (expr upper_left_centre)(suffix data) =
  label(data[0][0], upper_left_centre);
enddef;

string data[][];
% title
data[0][0] := "Wall height";

table (origin, data);

endfig;

end.

在此处输入图片描述

引用MetaPost 手册,第 56 页:

如果你只是想将变量名传递给宏,最好将其声明为后缀参数。例如,

def incr(suffix $) = begingroup $:=$+1; $ endgroup enddef;

定义一个宏,它将接受任何数字变量,向其添加一个,并返回新值。

相关内容