在算法旁边添加方程编号

在算法旁边添加方程编号

使用包algorithm2e

想要在一个环境中编写算法equation,以便它在右边距有一个方程编号。

但是我不能将它包含在里面,LaTeX 会抱怨(可能是因为它algorithm不应该出现在等式中)。

我怎样才能做到这一点?

答案1

设置算法框内equation,然后使用该框作为方程内容。没有官方需要这样做,但这可能会让你的代码更简洁一些。或者,algorithm在适当大小的 内设置minipage

在此处输入图片描述

\documentclass{article}

\usepackage{algorithm2e}
\newsavebox{\algbox}

\begin{document}

\begin{lrbox}{\algbox}
\begin{minipage}{0.9\linewidth}
  \begin{algorithm}[H]
    \SetAlgoLined
    \KwData{this text}
    \KwResult{how to write algorithm with \LaTeX2e }
    initialization\;
    \While{not at end of this document}{
      read current\;
      \eIf{understand}{
        go to next section\;
        current section becomes this one\;
      }{
        go back to the beginning of current section\;
      }
    }
    \caption{How to write algorithms}
  \end{algorithm}
\end{minipage}
\end{lrbox}

\begin{equation}
  \usebox{\algbox}
\end{equation}

\end{document}

注意浮点说明符的使用[H]。这会从环境中移除任何浮动行为algorithm,这对于在框内捕获算法和/或使其停留在您想要的位置(例如在特定equation环境中)至关重要。

另请注意,我已将算法设置在minipage比文本块宽度略窄的范围内0.9\linewidth。这样可以确保方程编号适合算法旁边。如果您的方程编号更宽,则可能需要调整此长度。

答案2

Werner 代码的变体。我认为不应该尝试将算法置于页面的中心,而是将其设置为与页边距的固定距离(这里我将其设置为零)。输入也得到了简化。

我认为标题不是必需的。相反,我提供了对标准\label命令的支持。

\documentclass{article}
\usepackage{amsmath}
\usepackage{algorithm2e}

\usepackage{lipsum}

\newsavebox{\algbox}
\newenvironment{algoequation}
 {\begin{lrbox}{\algbox}
  \begin{minipage}{0.9\linewidth}
  \setlength{\algomargin}{0pt}% or the margin you want
  \begin{algorithm}[H]
  \let\label\algolabel\gdef\thisalgolabel{}}
 {\end{algorithm}
  \end{minipage}
  \end{lrbox}
  \begin{equation}
  \if\relax\detokenize\expandafter{\thisalgolabel}\relax
  \else
    \label{\thisalgolabel}
  \fi
  \hfilneg\usebox{\algbox}\hspace{10000pt minus 1fil}
  \end{equation}}
\newcommand{\algolabel}[1]{\gdef\thisalgolabel{#1}}

\begin{document}

Algorithm~\eqref{test} is important.

\lipsum*[2]
\begin{algoequation}\label{test}
  \SetAlgoLined
  \KwData{this text}
  \KwResult{how to write algorithm with \LaTeX2e }
  initialization\;
  \While{not at end of this document}{
    read current\;
    \eIf{understand}{
      go to next section\;
      current section becomes this one\;
    }{
      go back to the beginning of current section\;
    }
  }
\end{algoequation}
\lipsum[3]

\end{document}

\algoindent如果要实现与左边距不同的距离,请按照以下方式操作。

宽度0.9\linewidth应根据方程式数字的最大宽度进行调整。

在此处输入图片描述

相关内容