我正在尝试使用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;
前两个参数需要一对后缀。有什么方法可以将一些变量的值传递给这个宏吗?我试过expandafter
s 但失败了。
\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}