在以下示例中:
\documentclass{article}
\usepackage{pstricks,pst-node}
\begin{document}
\def\working(#1,#2,#3, #4){
\rput(#1,#2){
\ovalnode{M5}{
#4
}
}
}
\def\notworking(#1,#2,#3,#4){
\rput(#1,#2){
\ovalnode{M#3}{
#4
}
}
}
\psset{unit=1cm}
\begin{pspicture}
\working(1,1, 5, WORKING)
\ovalnode{Start}{Start}
\ncarc{Start}{M5}
\end{pspicture}
\begin{pspicture}
\notworking(1,1, 5, NOTWORKING)
\ovalnode{Start}{Start}
\ncarc{Start}{M5}
\end{pspicture}
\end{document}
有两个非常相似的宏。在“工作”宏中,节点标签“M5”是硬编码的。第一张图片确实创建了“M5”节点并将其连接到“开始”节点:
但是,我希望节点标签是一个宏参数。这不起作用,如“notworking”宏所示。我看到了“NOTWORKING”和“Start”,但它们没有连接:
我怎样才能让它工作?
答案1
根据此定义,您期望第四个参数前有一个空格:
\def\working(#1,#2,#3, #4){
\rput(#1,#2){
\ovalnode{M5}{
#4
}
}
}
\working(1,1,5, WORKING)
可以,但\working(1,1,5,WORKING)
不是;“WORKING”前面的空格缺失。但是使用
\def\working(#1,#2,#3,#4){% NO SPACE HERE
\rput(#1,#2){%
\ovalnode{M5}{%
#4%
}%
}%
}
这些%
并不是真正需要的,因为如果您在 PSTricks 对象内,PSTricks 会删除尾随空格。如果不是,您会得到很多这样的空格。
答案2
这完美地工作:
\documentclass{article}
\usepackage{auto-pst-pdf}
\usepackage{pstricks,pst-node}
\begin{document}
\def\working(#1,#2,#3,#4){%
\rput(#1,#2){%
\ovalnode{M5}{%
#4%
}%
}%
}
\def\notworking(#1,#2,#3,#4){%
\rput(#1,#2){%
\ovalnode{M#3}{%
#4%
}%
}%
}
\psset{unit=1cm}
\begin{pspicture}
\working(1,1,5,WORKING)
\ovalnode{Start}{Start}
\ncarc{Start}{M5}
\end{pspicture}
\begin{pspicture}
\notworking(1,1,5,WORKING)
\ovalnode{Start}{Start}
\ncarc{Start}{M5}
\end{pspicture}
\end{document}
并对两张图片给出相同的结果。