Zusätzliche Zeile, die bei Verwendung von Gleichungen in Algorithmus2e erstellt wird

Zusätzliche Zeile, die bei Verwendung von Gleichungen in Algorithmus2e erstellt wird

Betrachten Sie das folgende Beispiel zum Platzieren von equation*s innerhalb einer algorithmUmgebung:

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

Dies erzeugt die folgende Ausgabe:

Ausgabe

Das Problem ist der Abstand zwischen den Gleichungen. Insbesondere in Zeile 2 sehen wir, dass viel vertikaler Platz hinzugefügt wurde, wo keiner benötigt wird. Tatsächlich zeigt Zeile 7, dass es möglich ist, vor Beginn der Gleichung innerhalb des im Layout verbleibenden Leerraums etwas Text hinzuzufügen. Darüber hinaus steht die Zeilennummer 2 über der Gleichung und nicht mit ihr ausgerichtet.

Gibt es eine Möglichkeit, die Gleichungen natürlicher zu gestalten und den zusätzlichen Platzbedarf zu vermeiden?

Antwort1

Schneller Hack:

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

Bildbeschreibung hier eingeben

Antwort2

Ich würde eine bestimmte Umgebung definieren.

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

Bildbeschreibung hier eingeben

Mit einer einfachen Änderung können Sie stattdessen eine feste Einrückung erhalten:

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

Bildbeschreibung hier eingeben

Aus diesem Grund empfiehlt es sich, eine bestimmte Umgebung zu definieren: Sie sind nicht an eine bestimmte Darstellung gebunden und können die Definition problemlos ändern, nicht jedoch den Dokumentcode.

Randnotiz.Bitte nicht standalonefür solche Beispiele verwenden.

verwandte Informationen