定义“正方形”命令

定义“正方形”命令

我尝试定义以下命令,用于在 pstricks 中绘制正方形:

\newcommand{\square}[4] {
  \rput(#1,#2){\psframe[linecolor=#4](0,0)(#3,#3)}
}

我像这样使用它(绘制一个角位于(1,1)且边长为 3 的红色正方形):

\square(1,1,3,red)

并得到以下错误:

Package xcolor error: Undefined color '1'.
Missing number, treated as zero.
Illegal unit of measure (pt inserted).

我究竟做错了什么?

(此外,如果有更简单的方法来编写这个方形命令,我会很乐意学习..)

答案1

使用 PSTricks 对象定义。然后你就有了相同的选项和星号版本的语法:

\documentclass{article}
\usepackage{pstricks}

\makeatletter
\def\square{\pst@object{square}}% reads star and options and continues with \square@i
\def\square@i(#1,#2)#3{{\use@par\solid@star\psframe[origin={#1,#2}](#3,#3)}}
\makeatother

\begin{document}

\begin{pspicture}[showgrid](0,0)(4,4)
\square(1,1){3}
\square[linecolor=red](0,0.5){2}
\square[linecolor=blue,fillcolor=red!40,fillstyle=solid,opacity=0.5](2,0){2}
\square*[linecolor=cyan,opacity=0.4](0,2){2}
\end{pspicture}

\end{document}

在此处输入图片描述

答案2

当然调用:

\square(1,1,3,red)

如果您定义以下内容则无法工作:

\newcommand{\square}[4] {
  \rput(#1,#2){\psframe[linecolor=#4](0,0)(#3,#3)}
}

因为 LaTeX 处理参数的方式与其他编程语言不同。你应该调用:

\square{1}{1}{3}{red}

完整示例:

\documentclass{article}
\usepackage{pstricks}

\newcommand{\square}[4] {
  \rput(#1,#2){\psframe[linecolor=#4](0,0)(#3,#3)}
}

\begin{document}

\begin{pspicture}(0,0)(3,3)
\square{1}{1}{3}{red}
\end{pspicture}
\end{document}

如果你确实希望使用:

\square(1,1,3,red)

您有可能,但您应该使用以下内容修改定义:

\def\square(#1,#2,#3,#4){
  \rput(#1,#2){\psframe[linecolor=#4](0,0)(#3,#3)}
}

示例变为:

\documentclass{article}
\usepackage{pstricks}

\def\square(#1,#2,#3,#4){
  \rput(#1,#2){\psframe[linecolor=#4](0,0)(#3,#3)}
}

\begin{document}

\begin{pspicture}(0,0)(3,3)
\square(1,1,3,red)
\end{pspicture}
\end{document}

答案3

只是为了宣传新宏的存在,\reversepath它是在 2013 年底推出的。

\documentclass[pstricks,border=12pt]{standalone}
\def\RightWing{\psline(0,.5)(.5,.5)(.5,-.5)(0,-.5)}
\def\square(#1,#2)#3#4{%
    \pscustom[linecolor=#4,origin={#1,#2}]
    {
        \scale{#3 #3}
        \RightWing
        \reversepath
        \scale{-1 1}
        \RightWing
        \closepath
    }
    \ignorespaces
}

\begin{document}
\begin{pspicture}[showgrid](-5,-5)(5,5)
    \square(0,0){3}{red}
    \square(3,3){2}{blue}
\end{pspicture}
\end{document}

在此处输入图片描述

相关内容