我不喜欢环境中赋值语句之间经常出现轻微错位的情况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
使用l
eft over lap
(在math
-mode 中;通过\mathllap
来自mathtools
)。它占用零宽度,因此不会影响间距或“移动光标”。其余设置与往常一样。