Metapost:在被宏使用之前用值替换变量

Metapost:在被宏使用之前用值替换变量

我正在尝试使用metaflow的宏集metapost。它及其文档可从以下位置获取:

https://personal.utdallas.edu/~hamlen/projects.html

我不太理解的相关定义是

538 vardef connector@#(suffix $,$$)(expr dsrc,ddst) =
539 if (str @#)="":
540 numeric x[]cp.tmp, y[]cp.tmp;
541 path cp.tmp;
542 _connector.tmp
543 else:
544 if known cp@#:
545 errmessage("redundant connector name: " & (str @#));
546 fi;
547 _connector@#
548 fi($,$$,dsrc,ddst)
549 enddef;

前两个参数需要一对后缀。有什么方法可以将一些变量的值传递给这个宏吗?我试过expandafters 但失败了。

\documentclass{article}
\usepackage{luamplib}
\begin{document}

\begin{mplibcode}
input metaflow.mp;
beginfig(0);
z1c=origin;
z2c=(5cm,0);
draw rrect1("1");
draw rrect2("2");
%draw connector(1,2,right,right);% <=====works
a:=1;
b:=2;
draw connector(a,b,right,right);
endfig;
\end{mplibcode}

\end{document}

答案1

您可以将命令构建为字符串,在其中可以使用它格式化数字decimal并通过管道scantokens将提供的文本读取为常规输入。

\documentclass{article}
\pagestyle{empty}
\usepackage{luamplib}
\begin{document}

\begin{mplibcode}
input metaflow.mp;

beginfig(0);
    z1c = origin ;
    z2c = (5cm,0) ;
    draw rrect1("1") ;
    draw rrect2("2") ;
    a := 1 ;
    b := 2 ;
    scantokens("draw connector(" & decimal a & "," & decimal b & ",right,right) ;") ;
endfig;
\end{mplibcode}

\end{document}

在此处输入图片描述

相关内容