算法环境中的对齐

算法环境中的对齐

我不喜欢环境中赋值语句之间经常出现轻微错位的情况algorithmic。例如,下面给出的算法的第一个版本在我看来很奇怪。我希望能够对齐这两个语句,但我的示例中注释的版本甚至无法编译。我总是可以手动添加一些空格来使事情对齐(参见下面的最后一个版本),但由于多种原因,这显然不是一种好的方法。有人有让赋值语句对齐的好方法吗?

\documentclass{article}
    \usepackage{algorithm}
    \usepackage{algorithmicx}
    \usepackage{amsmath}

\begin{document}

\begin{algorithm}
    \caption{Compute some stuff}
    \begin{algorithmic}
        \State \( x \gets 1 \)
        \State \( m \gets 2 \)
    \end{algorithmic}
\end{algorithm}

%\begin{algorithm}
%   \caption{Compute some stuff}
%   \begin{algorithmic}
%       \begin{align*}
%           x & \gets 1 \\
%           m & \gets 2
%       \end{align*}
%   \end{algorithmic}
%\end{algorithm}

\begin{algorithm}
    \caption{Compute some stuff}
    \begin{algorithmic}
        \State \( \hspace{3pt} x \gets 1 \)
        \State \( m \gets 2 \)
    \end{algorithmic}
\end{algorithm}

\end{document}

答案1

您需要使用一些“盒子操作”:

在此处输入图片描述

\documentclass{article}
\usepackage{algorithm,algorithmicx}% http://ctan.org/pkg/{algorithms,algorithmicx}
\usepackage{mathtools}% http://ctan.org/pkg/mathtools

\begin{document}

\begin{algorithm}
    \caption{Compute some stuff}
    \begin{algorithmic}
        \State \( x \gets 1 \)
        \State \( m \gets 2 \)
    \end{algorithmic}
\end{algorithm}

\begin{algorithm}
    \caption{Compute some stuff}
    \begin{algorithmic}
        \State \( \phantom{m}\mathllap{x} \gets 1 \)
        \State \( m \gets 2 \)
    \end{algorithmic}
\end{algorithm}

\end{document}

我使用 插入一个宽度与最宽元素 (m在本例中)相同的框\phantom。这会将设置推到所需的深度。然后我x使用left over lap(在math-mode 中;通过\mathllap来自mathtools)。它占用零宽度,因此不会影响间距或“移动光标”。其余设置与往常一样。

相关内容