Дополнительная строка, созданная при использовании уравнений в algorithm2e

Дополнительная строка, созданная при использовании уравнений в algorithm2e

Рассмотрим следующий пример, помещая equation*s внутрь algorithmокружения:

\documentclass{standalone}

\usepackage{amsmath}
\usepackage{algorithm2e}

\LinesNumbered

\begin{document}
\begin{algorithm}[H]
  \SetAlgoLined
  \KwData{this text}
  \KwResult{how to write algorithm with \LaTeX2e }
  \ForEach{first loop} {
    \begin{equation*}
      a^2 + b^2 = c^2
    \end{equation*}
    After \;
    After \;
    After \;
  }
  \ForEach{second loop} {
    Before
    \begin{equation*}
      a^2 + b^2 = c^2
    \end{equation*}
    After \;
    After \;
    After \;
  }
  \caption{How to write algorithms}
\end{algorithm}
\end{document}

Это дает следующий результат:

Выход

Проблема в интервалах между уравнениями. В частности, в строке 2 мы видим, что добавлено много вертикального пространства, хотя оно не требуется. Действительно, строка 7 показывает, что можно добавить текст до начала уравнения в пустом пространстве, оставленном в макете. Более того, строка номер 2 находится над уравнением, а не выровнена с ним.

Есть ли способ заставить уравнения вести себя более естественно и избежать введения дополнительного пространства?

решение1

Быстрый хак:

\documentclass{standalone}

\usepackage{amsmath}
\usepackage{algorithm2e}

\LinesNumbered

\begin{document}
\begin{algorithm}[H]
  \SetAlgoLined
  \KwData{this text}
  \KwResult{how to write algorithm with \LaTeX2e }
  \ForEach{first loop} {
    \parbox{\hsize}{%
      \[
      a^2 + b^2 = c^2
      \]
    }\par
    After \;
    After \;
    After \;
  }
  \ForEach{second loop} {
    Before\par
    \parbox{\hsize}{%
      \[
      a^2 + b^2 = c^2
      \]
    }\par
    After \;
    After \;
    After \;
  }
  \caption{How to write algorithms}
\end{algorithm}
\end{document}

введите описание изображения здесь

решение2

Я бы определил конкретную среду.

\documentclass{article}

\usepackage{amsmath}
\usepackage{algorithm2e}

\NewDocumentEnvironment{algoequation}{b}{%
  \par\makebox[\dimeval{\hsize}]{$\displaystyle#1$}\par
}{}


\LinesNumbered

\begin{document}
\begin{algorithm}[H]
  \SetAlgoLined
  \KwData{this text}
  \KwResult{how to write algorithm with \LaTeX2e }
  \ForEach{first loop} {
    \begin{algoequation}
      a^2 + b^2 = c^2
    \end{algoequation}
    After \;
    After \;
    After \;
  }
  \ForEach{second loop} {
    Before
    \begin{algoequation}
      a^2 + b^2 = c^2
    \end{algoequation}
    After \;
    After \;
    After \;
  }

\caption{How to write algorithms}
\end{algorithm}

\end{document}

введите описание изображения здесь

С помощью простого изменения вы можете получить фиксированный отступ:

\NewDocumentEnvironment{algoequation}{b}{%
  \par\hspace*{\algomargin}$\displaystyle#1$\par
}{}

введите описание изображения здесь

Вот почему рекомендуется определить конкретную среду: вы не привязаны к конкретному представлению и можете легко изменить определение, но не код документа.

Примечание.Пожалуйста, не используйте standaloneдля таких примеров.

Связанный контент