我的论文包含以下 PSTricks 图片。它在左侧显示一个正方形,在右侧显示两个正方形 - 顶部和底部。它描述了一个过程,其中左侧的正方形可以处于两种状态之一 - 右上角或右下角状态:
\begin{pspicture}(45,90)
\psframe[fillstyle=solid,fillcolor=green!20](0,20)(30,50)
\rput(15,35){V=3}
\psline{->}(35,25)(45,15)
\psline{->}(35,45)(45,55)
\end{pspicture}
\begin{pspicture}(45,90)
\psframe[fillstyle=solid,fillcolor=green!20](0,40)(30,70)
\psline[linecolor=black,linestyle=dotted](15,40)(15,70)
\rput{90}(7,55){V>2}
\rput{90}(22,55){V<1}
\psline{->}(35,55)(45,55)
\psframe[fillstyle=solid,fillcolor=green!20](0,0)(30,30)
\psline[linecolor=black,linestyle=dashed](15,0)(15,30)
\rput{90}(7,15){1$\leq$V$\leq$2}
\rput{90}(22,15){1$\leq$V$\leq$2}
\end{pspicture}
三个方块必须相同(它们代表同一个方块),因此我希望它们在 PSTricks 代码中看起来也相同。但是,为了垂直排列它们,我必须更改它们的坐标,因此左侧方块为“(0,20)(30,50)”,右上角为“(0,40)(30,70)”,右下角为“(0,0)(30,30)”。
有没有办法插入垂直移位,这样,我可以复制现有的 psframe,添加移位,然后它就会正确移位?
(我希望我说清楚了)
答案1
是的。插入\psframe
内部\rput{0}(<xshift>,<yshift>){<stuff>}
并在命令中定义框架,例如一致性:
\newcommand{\myframe}[1][]{%
\psframe[fillstyle=solid,fillcolor=green!20,#1](0,20)(30,50)}
%...
\begin{pspicture}(45,90)
\myframe
%...
\rput{0}(0,20){\myframe}% Translate \myframe vertically up 20 y-units
\rput{0}(0,-20){\myframe}% Translate \myframe vertically down 20 y-units
%...
\end{pspicture}
%...
的可选参数\myframe[<opt arg>]
允许您传递可选内容,例如fillcolor=green!50!red
根据需要更改其他框架的内容。考虑到这一点,请考虑在单个pspicture
环境中绘制整个图片。
答案2
将正方形定义为节点,然后可以使用符号坐标进行连接:
\documentclass[border=20pt]{standalone}
\usepackage{pstricks-add}
\psset{unit=1mm}
\makeatletter
\def\myframe{\@ifnextchar[\myframe@i{\myframe@i[]}}
\def\myframe@i[#1](#2)#3#4{%
\rput(#2){\rnode{#4}{%
\psTextFrame[fillstyle=solid,fillcolor=green!20,#1](-15,-15)(15,15){#3}}}}
\makeatother
\begin{document}
\begin{pspicture}(-20,-50)(80,50)
\myframe(0,0){V=3}{left}
\myframe[rot=90](50,-30){\parbox{30mm}{\centering
$1\leq V\leq2$\\ \psline[linestyle=dashed](-15,0)(15,0)\\[5pt]
$1\leq V\leq2$}}{down}
\myframe[rot=90](50,30){\parbox{30mm}{\centering
$V>2$\\ \psline[linestyle=dotted](-15,0)(15,0)\\[5pt]
$V>1$}}{up}
%
\ncline[nodesep=16,doubleline]{->}{left}{down}\naput{foo}
\ncline[nodesep=16,doubleline]{->}{left}{up}\nbput{bar}
\ncline[nodesepA=16,nodesepB=-30]{->}{up}{up}\ncput*{baz}
\end{pspicture}
\end{document}
语法\myframe
是:
\myframe[optarg](x,y){text}{node name}