Considere o seguinte exemplo, colocando equation*
s dentro de um algorithm
ambiente:
\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:
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}
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}
Com uma simples alteração, você pode obter um recuo fixo:
\NewDocumentEnvironment{algoequation}{b}{%
\par\hspace*{\algomargin}$\displaystyle#1$\par
}{}
É 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 standalone
para tais exemplos.