在算法中使用幻影后如何进行左对齐?

在算法中使用幻影后如何进行左对齐?

我有以下代码:

\usepackage[linesnumbered,ruled,vlined]{algorithm2e}
\usepackage{algpseudocode}
\usepackage{mathtools}

\begin{algorithm}
\caption{XEdDsa Sign}
\SetAlgoLined
\DontPrintSemicolon

$A,a \gets functionCall(5)$\;
$\hphantom{A,a}\mathllap{v} \gets hash(a)$\;
$\hphantom{A,a}\mathllap{b} \gets 15$\;
\textbf{return} $whatever$

\end{algorithm}

然而,当编译时我得到:
在此处输入图片描述

我真的不喜欢 v 和 b 在这里没有左对齐。有什么方法可以解决这个问题,让它们左对齐吗?

答案1

这是一个采用适当定义的\parbox指令的解决方案。它还用于\mathit键入“functionCall”、“hash”和“whatever”。

在此处输入图片描述

\documentclass{article} % or some other suitable document class
\usepackage[linesnumbered,ruled,vlined]{algorithm2e}
\usepackage{algpseudocode}
\usepackage{mathtools,calc}
\newcommand\myAAbox[1]{\parbox{\widthof{$A,a$}}{$#1$}} % <-- new

\begin{document}
\begin{algorithm}
\caption{XEdDsa Sign}
\SetAlgoLined
\DontPrintSemicolon

$A,a         \gets \mathit{functionCall}(5)$\;
$\myAAbox{v} \gets \mathit{hash}(a)$\;
$\myAAbox{b} \gets 15$\;
\textbf{return} $\mathit{whatever}$

\end{algorithm}
\end{document}

答案2

您可以使用eqparbox包获得通用解决方案:我定义了一个\eqmathbox具有左对齐内容的命令,使用标签而不是长度,并且共享相同标签的所有框都具有最大内容的自然宽度:

\documentclass{article}
\usepackage[linesnumbered,ruled,vlined]{algorithm2e}
\usepackage{algpseudocode}
\usepackage{mathtools}
\usepackage{eqparbox}
\newcommand{\eqmathbox}[2][A]{\eqmakebox[#1][l]{$\displaystyle#2$}}

\begin{document}

\begin{algorithm}
\caption{XEdDsa Sign}
\SetAlgoLined
\DontPrintSemicolon

$\eqmathbox{A,a} \gets \operatorname{functionCall}(5)$\;
$\eqmathbox{v} \gets \operatorname{hash}(a)$\;
$\eqmathbox{b} \gets 15$\;
\textbf{return} $whatever$
\end{algorithm}

\end{document} 

在此处输入图片描述

相关内容