Рассмотрим следующий пример, помещая 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
для таких примеров.