我有以下代码:
\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}