我正在使用该包cryptocode
以一种很好的方式排版协议,但我遇到了矩阵问题。以下是显示该问题的 MWE:
\documentclass{article}
\usepackage{cryptocode}
\begin{document}
\begin{figure}%[ht]
\begin{center}
\fbox{%
\pseudocode{%
\textbf{Sender} \<\< \textbf{Receiver} \\[][\hline]
\<\< \text{compute } P = \begin{pmatrix}
A \\ B + C
\end{pmatrix} \\
\text{compute } Q = R+S-T \<\< \\
\< \sendmessageright*{Q} \< \\
\< \sendmessageleft*{P} \< \\
}
}
\end{center}
\end{figure}
\end{document}
结果是
并且,如您所见,矩阵排版不正确(对齐错误)。我该如何解决这个问题?
答案1
显然,该命令\pseudocode
与 的定义\\
和其他与 相关的内部结构混在一起\pmatrix
。我无法提供通用解决方案。一个快速的方法是保存矩阵外部放在\pseudocode
一个框中,并在里面使用这个框\pseudocode
,就像这样:在伪代码之前,添加
\newsavebox\Pmatrix
\setbox\Pmatrix\hbox
{$\begin{pmatrix}
A \\ B + C
\end{pmatrix}$%
}
在伪代码中,使用\Pmatrix
矩阵代替:
\<\< \text{compute } P = \usebox\Pmatrix \\
答案2
正如 gernot 所解释的那样,它pseudocode
与 的定义相混合\\
。使用 之外定义的框的另一种解决方案\pseudocode
是使用\pclb
而不是\\
矩阵内的 。这可以\pclb
(或多或少)映射到 的原始定义\\
。
因此
\pseudocode{%
\textbf{Sender} \<\< \textbf{Receiver} \\[][\hline]
\<\< \text{compute } P = \begin{pmatrix}
A \pclb B + C
\end{pmatrix} \\
\text{compute } Q = R+S-T \<\< \\
\< \sendmessageright*{Q} \< \\
\< \sendmessageleft*{P} \< \\
}
产量