我正在为密码学课程做笔记,希望下图能够编译。这应该代表 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"
这毫无意义。所以你应该用花括号保护逗号。
第二,tikz-cd采用 Ti钾Z 的\matrix
。它的构造与你从tabular
、array
、align
、bmatrix
等中学到的非常不同。在 中\matrix
,默认情况下,只有非空条目才会被输入node
s 中。因此,如果你试图画一个指向空条目的箭头,Ti钾Z 会抱怨它找不到目的地。
通过给出一对孤独的花括号,Ti钾Z 将生成一个空节点,现在它可以找到箭头的目的地。或者,按照@Torbjørn T 的建议,编写\begin{tikzcd}[nodes in empty cells]
自动将空条目放入节点的代码。