Linha adicional criada ao usar equações no algoritmo2e

Linha adicional criada ao usar equações no algoritmo2e

Considere o seguinte exemplo, colocando equation*s dentro de um algorithmambiente:

\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}

Isso produz a seguinte saída:

Saída

O problema é o espaçamento das equações. Especificamente, na linha 2 vemos que muito espaço vertical é adicionado, onde nenhum é necessário. Na verdade, a linha 7 mostra que é possível adicionar algum texto antes do início da equação dentro do espaço em branco deixado no layout. Além disso, a linha número 2 está acima da equação, e não alinhada com ela.

Existe uma maneira de fazer com que as equações se comportem de forma mais natural e evitar a introdução de espaço adicional?

Responder1

Hack rápido:

\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}

insira a descrição da imagem aqui

Responder2

Eu definiria um ambiente específico.

\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}

insira a descrição da imagem aqui

Com uma simples alteração, você pode obter um recuo fixo:

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

insira a descrição da imagem aqui

É por isso que é recomendado definir um ambiente específico: você não está vinculado a uma representação específica e pode modificar facilmente a definição, mas não o código do documento.

Nota.Por favor, não use standalonepara tais exemplos.

informação relacionada