Línea adicional creada al usar ecuaciones en el algoritmo2e

Línea adicional creada al usar ecuaciones en el algoritmo2e

Considere el siguiente ejemplo, colocando equation*s dentro de un algorithmentorno:

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

Esto produce el siguiente resultado:

Producción

El problema es el espaciamiento de las ecuaciones. En concreto, en la línea 2 vemos que se añade mucho espacio vertical, donde no se necesita ninguno. De hecho, la línea 7 muestra que es posible agregar algo de texto antes de que comience la ecuación dentro del espacio en blanco que queda en el diseño. Es más, la línea número 2 está encima de la ecuación en lugar de alinearse con ella.

¿Hay alguna manera de hacer que las ecuaciones se comporten de forma más natural y evitar la introducción de espacio adicional?

Respuesta1

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

ingrese la descripción de la imagen aquí

Respuesta2

Definiría un entorno 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}

ingrese la descripción de la imagen aquí

Con un simple cambio, puedes obtener una sangría fija:

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

ingrese la descripción de la imagen aquí

Es por eso que se recomienda definir un entorno específico: no está atado a una representación particular y puede modificar fácilmente la definición, pero no el código del documento.

Nota al margen.Por favor, no lo utilice standalonepara tales ejemplos.

información relacionada