考虑以下示例,将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
这样的例子。