如何使用宏参数作为 pst-node 标签?

如何使用宏参数作为 pst-node 标签?

在以下示例中:

\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}

并对两张图片给出相同的结果。

在此处输入图片描述

相关内容