在 metapost 脚本中输入变量作为参数?

在 metapost 脚本中输入变量作为参数?

我想将输入参数传递到我的 .mp 脚本中。例如,不要运行:

mpost script.mp

我想要运行类似这样的操作:

mpost script.mp 1 1 2 diamand

其中“1 1 2 diamond”是 4 个输入参数,告诉脚本要做什么。

目前我有以下情况:

numeric showindices
showindices := 0;
%showindices := 1;

string drawingmode
drawingmode := "diamond";
%drawingmode := "square";

然后我运行“mpost script.mp”,取消注释 showindices=0,然后单独取消注释 showindices=1。同样,我运行它时取消注释 drawingmode=diamond,然后单独取消注释 drawingmode=square。

有 10 种绘图模式和各种类似于 showindices 的“开关”,所以我不想一直取消注释并重新注释不同的行。我也不想多次复制和粘贴整个脚本。也许你会说我可以在循环中运行所有这些组合,但是有没有办法只从命令行传递参数,例如,如果我想要“正方形”绘图模式和 showindices 的“1”?


注意:此问题与以下内容不重复: 传递变量作为参数
注意:此问题也不是重复的: 输入命令并声明变量

答案1

您可以mpost使用命令行调用

mpost '\numeric showindices;showindices:=1;string drawingmode;drawingmode:="diamond";input script'

需要初始反斜杠,以便mpost不会将其解释numeric为文件名。

如果参数超过两个,情况就会变得复杂,因此你可以编写一个 shell 脚本,例如

#!/usr/bin/env sh
mpost "\\ \
numeric showindices; showindices:=$2; \
string drawingmode; drawingmode:="$3"; \
input $1"

将其保存为文件runscript并从命令行调用它,如

sh runscript script.mp 1 \"diamond\"

shell 将在 at 个单词后拆分输入sh runscript,并将它们分配给变量12等等3。请注意应如何使用引号,以便将“真实”引号传递给脚本。

如果你使文件runscript可执行,你也可以像这样调用它

./runscript script.mp 1 \"diamond\"

你可以保存runscript在 shell 寻找可执行程序或脚本的地方,然后调用它

runscript script.mp 1 \"diamond\"

相关内容