我试图表示一个设备的功能。它有 2 个端口,并对数据包的有效载荷进行计算。
我使用pst-node
套件PSTricks
来实现它,但是我遇到了一些问题......
我想要一个由 2 个部分组成的数据包:
header
和payload
。但是y
中的Payload
导致两个单词对齐不良。此外,它还会打乱 的整个尺寸\psframebox
。绘制的 2 个数据包具有 2 个问题。我想将
Payload
框“连接”到Header
框。我尝试使用命令的[tl]
和选项,但在绑定框时会出错...此外,由于和不存在,数据包框不会与其他(和)垂直对齐[tr]
rput
[cr]
[cl]
Process
Port 1
我的 MWE 总结了我遇到的所有问题:
\documentclass[pstricks, float]{standalone}
\usepackage{graphicx}
\usepackage[table, usenames, dvipsnames]{xcolor}
\usepackage{pstricks, pst-node, pst-circ, pst-plot, pst-3dplot, pst-solides3d, pst-sigsys, pstricks-add, pst-eucl}
\usepackage[frenchb]{babel}
\usepackage[locale=FR, per-mode=symbol, abbreviations]{siunitx}
\begin{document}
\bgroup
%\scalebox{0.8}{
\begin{pspicture}[labelangle=:U, showgrid=false](-5, 1)(13, 6)
\rput[c](-4,4.5){\rnode{priv}{Port 1}}
\rput[cl](12,2.5){\rnode{publ}{Port 1}}
\rput[c](5.5,4.5){\rnode{ipsec}{\psframebox[framesep=10pt,cornersize=absolute,linearc=0.2, linecolor=red]{\textcolor{red}{Process}}}}
\rput[tl](2,4.5){\rnode{header1}{\psframebox[framesep=4pt]{Header}}}
\rput[tr](2,4.5){\rnode{payload1}{\psframebox[framesep=4pt]{Payload 1}}}
\psframe[framearc=.3,linestyle=dashed, linecolor=black!40](-1.5, 1.5)(9.5,5.75)
\rput[c](5.6,2.5){\rnode{header2}{\psframebox[framesep=4pt]{Header}}}
\rput[c](7.25, 2.5){\rnode{payload2}{\psframebox[framesep=4pt]{Paload 2}}}
\ncline{<->}{payload1}{ipsec}
\ncangle[angleA=-90, angleB=180, armB=0, linearc=.5]{<->}{header1}{header2}
\ncangle[angleB=90, armB=0, linearc=.5]{<->}{ipsec}{payload2}
\ncline{<->}{payload2}{publ}
\ncline{<->}{header1}{priv}
\end{pspicture}
%}
\egroup
\end{document}
关于如何纠正这个问题有什么想法吗?
答案1
从端口 1 到进程有一条直线,这样可以吗?
\documentclass[pstricks, float]{standalone}
\usepackage{graphicx}
\usepackage[table, usenames, dvipsnames]{xcolor}
\usepackage{pstricks-add}
\usepackage[frenchb]{babel}
\usepackage[locale=FR, per-mode=symbol, abbreviations]{siunitx}
\begin{document}
\begin{pspicture}(-5, 1)(13, 6)
\rput[c](-4,4.5){\rnode{priv}{Port 1}}
\rput[cl](12,2.5){\rnode{publ}{Port 1}}
\rput[c](5.5,4.5){\rnode{ipsec}{\psframebox[framesep=10pt,
cornersize=absolute,linearc=0.2, linecolor=red]{\textcolor{red}{Process}}}}
\rput[l](2,4.5){\rnode{header1}{\psframebox[framesep=4pt]{Header\vphantom{y}}}}
\rput[r](2,4.5){\rnode{payload1}{\psframebox[framesep=4pt]{Payload 1}}}
\psframe[framearc=.3,linestyle=dashed, linecolor=black!40](-1.5, 1.5)(9.5,5.75)
\rput[r](7,2.5){\rnode{header2}{\psframebox[framesep=4pt]{Header}}}
\rput[l](7,2.5){\rnode{payload2}{\psframebox[framesep=4pt]{Paload 2}}}
\ncline{<->}{payload1}{priv}
\ncangle[angleA=-90,angleB=180, armB=0,linearc=.5]{<->}{header1}{header2}
\ncangle[angleB=90, armB=0, linearc=.5]{<->}{ipsec}{payload2}
\ncline{<->}{payload2}{publ}
\ncline{<->}{header1}{ipsec}
\end{pspicture}
\end{document}
答案2
这是你想要的吗?用 更容易做到psmatrix
。
请注意,您不必加载所有PSTricks
相关包,因为pstricks-add
已经加载了pstricks, pst-plot, pst-node, pst-3d, pst-math
和。此外,的multido
选项是不必要的,因为它现在是默认选项。我加载了 选项,因为它定义的颜色可能比 还多。usenames
xcolor
x11names
dvipsnames
\documentclass[pstricks, border=3pt]{standalone}
\usepackage[table, dvipsnames, x11names]{xcolor}
\usepackage{eqparbox}
\usepackage{pstricks-add,}%
\usepackage{auto-pst-pdf}
\begin{document}
\def\mylength{\dimexpr1.5cm + \pslinewidth\relax}
\def\pscolhookiii{\hspace*{-\mylength}}
\def\pscolhookv{\hspace*{-\mylength}}
\newlength\mysep
\psset{framesep=4pt, arrowinset=0.15, linejoin=1}
\begin{psmatrix}%
[name=priv] Port 1 & [name=payload1] \psframebox{Payload 1}& [name=header1] \psframebox{Header\vphantom{y}} & [name=ipsec]\makebox[0pt]{\psframebox[framesep=10pt,cornersize=absolute,linearc=0.2, linecolor=IndianRed3]{\eqmakebox[ips]{\color{IndianRed3}Process}}}& & \\ %
& & & [name=header2] \psframebox{Header\vphantom{y}} & [name=payload2] \psframebox{Payload 2} &
[name=publ] Port1
\setlength{\mysep}{\dimexpr\eqboxwidth{ips}/2+10pt +\pslinewidth\relax}
\ncline[nodesepB=\mysep]{<->}{header1}{ipsec}
\ncangle[angleA=-90, angleB=180, armB=0, linearc=.5]{<->}{header1}{header2}
\ncangle[angleB=90, armB=0, linearc=.3,nodesepA=\mysep]{<->}{ipsec}{payload2}
\pnode[-1.5,1](payload1){PL1}
\pnode[1.5,-1](payload2){PL2}
\psframe[framearc=.3,linestyle=dashed, linecolor=LightSteelBlue3](PL1)(PL2)
\psset{nodesepB=3pt}
\ncline{<->}{payload2}{publ}
\ncline{<->}{payload1}{priv}
\end{psmatrix}
\end{document}