这是我的代码的最小可行代码
\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}