\psframebox 中的文本对齐

\psframebox 中的文本对齐

我试图表示一个设备的功能。它有 2 个端口,并对数据包的有效载荷进行计算。

我使用pst-node套件PSTricks来实现它,但是我遇到了一些问题......

  1. 我想要一个由 2 个部分组成的数据包:headerpayload。但是y中的Payload导致两个单词对齐不良。此外,它还会打乱 的整个尺寸\psframebox。绘制的 2 个数据包具有 2 个问题。

  2. 我想将Payload框“连接”到Header框。我尝试使用命令的[tl]和选项,但在绑定框时会出错...此外,由于和不存在,数据包框不会与其他(和)垂直对齐[tr]rput[cr][cl]ProcessPort 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}

其输出如下: MWE 输出

关于如何纠正这个问题有什么想法吗?

答案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选项是不必要的,因为它现在是默认选项。我加载了 选项,因为它定义的颜色可能比 还多。usenamesxcolorx11namesdvipsnames

\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} 

在此处输入图片描述

相关内容