如何重新缩放 pspicture 内的 pstricks 对象?

如何重新缩放 pspicture 内的 pstricks 对象?

这是我的代码的最小可行代码

\documentclass{article}
\usepackage{pstricks-add,pst-plot}
\usepackage[paperheight=16cm,paperwidth=21cm,margin=0pt]{geometry}

\pagestyle{empty}

\def\prism{\pspolygon[](0.62,0.62)(4.62,0.62)(4,0)(0,0)} % prism

\begin{document}

\psset{algebraic,xunit=1cm,yunit=1cm}
\noindent
\begin{pspicture}(0,0)(21,16)
\uput[r](0.85,1.2){
\rput(8,10){\psrotate(0,0){0}{\prism}}
}
\end{pspicture}

\end{document}

如您所见,我在之前定义了一个 pspolygon,\begin{document}然后在里面用pspicture命令调用它rput。这样我就可以只绘制一次多边形,然后在图片中随意使用它。我必须在我的代码中放置几个​​,一些旋转,一些平移,而我的代码现在这样,我可以毫无问题地做到这一点。

问题是我希望某些多边形比其他多边形大。我如何\prism在 中重新缩放这样的对象pspicture?例如,如果我希望多边形的大小减半,我需要使用如下命令

\rput[scale=0.5](8,10){\psrotate(0,0){0}{\prism}}

你能帮我吗?

谢谢。

答案1

您可以使用\psscalebox{<scale>}{<stuff>}来缩放<stuff><scale>您选择的值:

在此处输入图片描述

\documentclass{article}

\usepackage{pstricks-add}

\def\prism{\pspolygon(0.62,0.62)(4.62,0.62)(4,0)(0,0)} % prism

\begin{document}

\psset{algebraic,unit=1cm}

\begin{pspicture}(0,0)(5,5)
  \rput(2,2){\psrotate(0,0){0}{\prism}}
  \rput(2,4){\psscalebox{0.5}{\psrotate(0,0){30}{\prism}}}
  \rput(4,4){\psset{unit=5mm}\psrotate(0,0){30}{\prism}}
\end{pspicture}

\end{document}

请注意缩放某些内容(也会缩放线宽)和调整unit为原始单位的 50%(保持相同的线宽)之间的区别。


您可以定义自己的宏来调整内容。下面我使用了xkeyval为单个宏定义多个键,名为\psaction[<options>]{<object>}

\usepackage{xkeyval}

\makeatletter
\define@cmdkey{psaction}[psaction@]{orotate}{}
\define@cmdkey{psaction}[psaction@]{rotangle}{}
\define@cmdkey{psaction}[psaction@]{scale}{}
\define@cmdkey{psaction}[psaction@]{put}{}
\newcommand{\psaction}[2][]{%
  \setkeys{psaction}{%
    orotate={(0,0)}, % Default origin of rotation
    rotangle=0, % Default angle of rotation
    scale=1, % Default scale factor
    put={(0,0)}, % Default location for \rput
    #1 % Local modifications
  }%
  \begingroup
  \gdef\psaction@object{#2}%
  \edef\x{\endgroup
    \noexpand\rput\psaction@put{%
      \noexpand\psscalebox{\psaction@scale}{%
        \noexpand\psrotate\psaction@orotate{\psaction@rotangle}{%
          \noexpand\psaction@object}}}}\x
}
\makeatother

例如,你可以使用

\begin{pspicture}(0,0)(5,5)
  % Similar to \rput(2,2){\psrotate(0,0){0}{\prism}}:
  \psaction[put={(2,2)}]{\prism}
  % Similar to \rput(2,4){\psscalebox{0.5}{\psrotate(0,0){30}{\prism}}}:
  \psaction[put={(2,4)},scale=0.5,rotangle=30]{\prism}
\end{pspicture}

答案2

使用可选参数unit=...

\documentclass{article}
\usepackage{pstricks-add}
\newcommand\prism[1][]{%
    \pspolygon[#1](0.62,0.62)(4.62,0.62)(4,0)(0,0)} % prism    
\begin{document}

\begin{pspicture}[showgrid](7,6)
\rput(1,1){\prism}
\rput{30}(2,4){\prism[unit=0.5]}
\rput{-30}(4,4){%
     \prism[unit=6mm,linecolor=red,fillstyle=solid,fillcolor=red!40]}
\end{pspicture}

\end{document}

在此处输入图片描述

相关内容