两列图,列间有箭头

两列图,列间有箭头

我正在为密码学课程做笔记,希望下图能够编译。这应该代表 Diffie-Hellman 密钥交换,其中 Alice 和 Bob 交换各种信息

\begin{center}
  \begin{tikzcd}
    A & B \\
    \mathbb G,g,q\leftarrow G(1^n) & \\
    x\leftarrow\ZZ_q & \\
    h_A = g^x \arrow[r,"\mathbb{G},g,q,h_A"] & \\
    & y\leftarrow\ZZ_q \\
     & h_B = g^y\arrow[l,"h_B"] \\
    k = (h_B)^x = g^{xy} & k = (h_A)^y = g^{xy}
  \end{tikzcd}
\end{center}

到 为止,包括h_A所有内容似乎都正常工作,所以我猜想\arrow那行中的 可能出了问题。但我希望\mathbb{G}, g,q,h_A出现在箭头上方,我该如何实现呢?

我知道 tikzcd 不一定是用于此目的的最佳软件包,但我对它相当满意,而且在课堂上做笔记时通常时间紧迫。

编辑:我已采纳评论中建议的更改,但同一行仍然存在问题。

答案1

代替

h_A = g^x \arrow[r,"\mathbb{G},g,q,h_A"] & \\

应该

h_A = g^x \arrow[r,"{\mathbb{G},g,q,h_A}"] & {} \\

原因有二:首先,r,"\mathbb{G},g,q,h_A"有五种选择

  • r
  • "\mathbb{G}
  • g
  • q
  • h_A"

这毫无意义。所以你应该用花括号保护逗号。

第二,采用 TiZ 的\matrix。它的构造与你从tabulararrayalignbmatrix等中学到的非常不同。在 中\matrix,默认情况下,只有非空条目才会被输入nodes 中。因此,如果你试图画一个指向空条目的箭头,TiZ 会抱怨它找不到目的地。

通过给出一对孤独的花括号,TiZ 将生成一个空节点,现在它可以找到箭头的目的地。或者,按照@Torbjørn T 的建议,编写\begin{tikzcd}[nodes in empty cells]自动将空条目放入节点的代码。

相关内容