如何使用 tikzpicture 绘制协议交互

如何使用 tikzpicture 绘制协议交互

我对使用 tikzpicture 包有疑问。

我有一个协议交互,其中两个参与者想要交换一些数字,比如αβ我需要双箭头,而且在它上面α以及其下方β。这意味着这两个参与者正在同时交换数字。顺便说一句,我不需要箭头边上的点,而是需要一些计算,从而得出α或者β必须放在那里。

替代文本

我如何得到这个输出?我不知道我是否选择了正确的包,但在我看来这是正确的选择。到目前为止,我看到的每个示例都使用一些点并创建一个矩阵,但我不知道如何用这些项替换点。顺便说一句,我不知道如何得到那个箭头,甚至让它变大。
任何有接近我需要的例子的优秀教程都将不胜感激。

答案1

您不需要 TikZ。如果您使用 LaTeX,您只需要amsmathmathtools包(您可能都有):

\documentclass{minimal}
\usepackage{amsmath}
\usepackage{mathtools}

\begin{document}
  \[\begin{matrix}
      x \xleftarrow{\quad R\quad} \mathcal{Z}_q            &\quad
      \xrightleftharpoons[\beta=g^y]{\quad\alpha=g^x\quad} \quad&
      y \xleftarrow{\quad R\quad} \mathcal{Z}_q            \\
      g^{xy} & & g^{xy} \\
  \end{matrix}\]
\end{document}

这将产生以下输出:

可伸缩的箭和鱼叉。

amsmath 包提供了\xleftarrow\xrigharrow命令,分别设置可扩展的\leftarrow\righarrow;它们的强制参数设置在顶部,可选参数设置在下方(\xleftarrow[below]{above})。通常,它的宽度与文本的需要一样宽,因此我\quad在文本周围插入了 s 以将其隔开。mathtools扩展的包amsmath提供了更多可扩展的箭头,包括\xleftrightarrow(用于可扩展的 ↔)、\xLeftrightarrow(用于可扩展的 ⇔)、\xleftrighharpoons(用于可扩展的 ⇋;示例图片中符号的倒置版本)和\xrightleftharpoons(用于可扩展的 ⇌,如示例图片所示),您可以根据自己的喜好在这里使用其中任何一个。

另外,请注意不应该需要像我一样分开\xrightleftharpoons(这就是为什么有&\quad ... \quad&),但显然我需要在这里(虽然在拉特西我没有,所以只要做一些小改动,你可能就不需要了。你只需要这里的矩阵,因为你想将 sg^{xy}与第一个和第三个箭头对齐;如果你只想要顶线,你就不需要费心了。

答案2

这是一个带有eplain的:

\input eplain
$$
  \matrix{x \mapleft^R {\cal Z}_q &
  \adjmapleft^{\mathstrut\alpha = g^x}_{\beta = g^y} &
  y \mapleft^R {\cal Z}_q \cr
  g^{xy} && g^{xy}}
$$
\bye

看起来像:

但没有鱼叉 :-(

更新:关于某些箭头等扩展到“内容”的方式,我只是想指出,似乎有几种方法可以实现这一点:

  1. 字符组合\leaders
    • 赞成:可以很好地扩展——根据需要尽可能长或尽可能短
    • 反对:可以清楚地看到组合展示中由于某种原因(未打印)。根据缩放级别和使用的阅读器,效果可能会令人不快。我记得看到过关于此问题的讨论,但不记得是否取得了一些好的结果。
  2. 根据内容选择合适的变体
    • 赞成:在屏幕上看起来也很漂亮、很清晰
    • 反对:没有必要按需要进行扩展。

现在,关于 XeTeX 和 Unicode 上下文中的第二个列表项,一些字符似乎支持自动变体选择。我不知道这是否发生在字体本身、XeTeX 或其他地方。无论如何,我已经编译了一组宏来支持\rightleftharpoonsXeTeX 中的扩展。冒着成为 tex.SE 笑柄的风险,我想分享它们:

\input something_that_sets_up_fonts_and_mathchars_etc_with_say_XITS_Math
\def\buildharpoons#1#2{$\vcenter{\hbox{\ooalign{%
  \lower1.25\fontdimen5\textfont1\hbox{$#1$}\crcr
  $#2$\crcr}}}$}
\def\rlshortharpoons{\buildharpoons{%
  \XeTeXmathchar"3"1"E049}{\XeTeXmathchar"3"1"E04D}}
\def\rlmedharpoons{\buildharpoons{%
  \XeTeXmathchar"3"1"E092}{\XeTeXmathchar"3"1"E096}}
\def\rlMedharpoons{\buildharpoons{%
  \XeTeXmathchar"3"1"E0C7}{\XeTeXmathchar"3"1"E0CB}}
\def\rllongharpoons{\buildharpoons{%
  \XeTeXmathchar"3"1"E0FB}{\XeTeXmathchar"3"1"E0FF}}
\def\rlLongharpoons{\buildharpoons{%
  \XeTeXmathchar"3"1"E126}{\XeTeXmathchar"3"1"E12A}}
\def\buildharprel#1#2#3{\mathrel{\mathop{#1}\limits^{#2}_{#3}}}
\def\harpoons#1#2{%
  \setbox0=\hbox{\rlshortharpoons}\setbox1=\hbox{\rlmedharpoons}
  \setbox2=\hbox{\rlMedharpoons}  \setbox3=\hbox{\rllongharpoons}
  \setbox4=\hbox{\rlLongharpoons}
  \setbox5=\hbox{$#1$} \setbox6=\hbox{$#2$}
  \ifdim\wd5<\wd6 \dimen7=\wd6 \else\dimen7=\wd5 \fi
  \ifdim\dimen7<\wd0 \buildharprel{\box0}{#1}{#2}
    \else\ifdim\dimen7<\wd1 \buildharprel{\box1}{#1}{#2}
      \else\ifdim\dimen7<\wd2 \buildharprel{\box2}{#1}{#2}
        \else\ifdim\dimen7<\wd3 \buildharprel{\box3}{#1}{#2}
          \else\buildharprel{\box4}{#1}{#2}\fi\fi\fi\fi}
$$
  x \mathop{\longleftarrow}\limits^R {\cal Z}
  \harpoons{\alpha=g^x}{\beta = g^y} y
  \harpoons{\alpha}{\beta} q
  \mathop{\longleftarrow}\limits^R {\cal Z_q}
$$
\bye

看起来像这样(我修改了公式只是为了显示扩展,很可能在此过程中使其变得毫无意义):

我意识到\harpoons-macro 肯定可以使用一些优化,但你就这样了。

答案3

以下是我根据要求使用 TikZ 的尝试:

\begin{tikzpicture}

      \node (A) at (0,0) {$x$};
      \node (B) at (1,-1) {$g^{xy}$};
      \node (C) at (2,0) {$Z_{q}$};
      \node (D) at (4,0) {$y$};
      \node (E) at (5,-1) {$g^{xy}$};
      \node (F) at (6,0) {$Z_{q}$};

  \begin{scope}[every node/.style={font= \scriptsize}]

     \draw [latex-] (A) -- node[above]{$R$}  (C);
     \draw[transform canvas={yshift=0.2ex},-left to] (C) -- node[above]{$\alpha=g^{x}$} (D);
     \draw[transform canvas={yshift=-0.2ex},left to-] (C) -- node[below]{$\beta=g^{y}$} (D);
     \draw[latex-] (D) -- node[above]{$R$}  (F);

   \end{scope}

 \end{tikzpicture}

生成结果: 在此处输入图片描述

诀窍是transform canvas获得rightleftharpoon等效命令。可以通过更改设置来调整间距,以满足个人需求\node

相关内容