我想要生成网络协议,下面是一个非常简单的示例:
该协议有两方,每一方都进行一些计算,然后与另一方进行通信。
我可以使用 3 列表格,但我想知道是否有更好的解决方案。特别是,是否有任何特定的软件包可以实现这一点,或者在 TikZ 中是否有任何简单的方法可以做到这一点。
答案1
这是我的简单解决方案此处显示的方法:
\documentclass[a4paper,11pt]{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{matrix,shapes,arrows,positioning,chains, calc}
\begin{document}
\begin{tikzpicture}
\matrix (m)[matrix of nodes, column sep=2cm,row sep=8mm, nodes={draw=none, anchor=center,text depth=0pt} ]{
Prover & & Verifier\\[-4mm]
Choose a random number & & \\[-7mm]
$r \in \{0,1\}^{*}.$ & & \\
& Send $r$ & \\
& & Choose a random number \\[-7mm]
& &$s \in \{0,1\}^{*}.$\\
& Send $s$ & \\
};
\draw[shorten <=-1.5cm,shorten >=-1.5cm] (m-1-1.south east)--(m-1-1.south west);
\draw[shorten <=-1.5cm,shorten >=-1.5cm] (m-1-3.south east)--(m-1-3.south west);
\draw[shorten <=-1cm,shorten >=-1cm,-latex] (m-4-2.south west)--(m-4-2.south east);
\draw[shorten <=-1cm,shorten >=-1cm,-latex] (m-7-2.south east)--(m-7-2.south west);
\end{tikzpicture}
\end{document}
编辑图形结果为:
答案2
你看过了吗MSC(消息序列图)包 在 CTAN 中?我从来没有用过,但我们的一些学生用过。
编辑你的示例可以用这样的代码来完成
\documentclass[border=2mm]{standalone}
\usepackage{msc}
\begin{document}
\begin{msc}{Example}
\declinst{prover}{}{Prover}
\declinst{verifier}{}{Verifier}
\action*{%
\begin{minipage}{3cm}\centering
Choose a random number\\
$r\in\{0,1\}^*$
\end{minipage}%
}{prover}
\nextlevel[4]
\mess{Send $r$}{prover}{verifier}
\nextlevel
\action*{%
\begin{minipage}{3cm}\centering
Choose a random number\\
$r\in\{0,1\}^*$
\end{minipage}}{verifier}
\nextlevel[4]
\mess{Send $s$}{verifier}{prover}
\end{msc}
\end{document}
结果(使用 xelatex,因为 msc 使用 pstricks)是
外观不太灵活,因为 msc 图是通过国际电联(国际电信联盟)并且该包遵守该格式。