使用包algorithm2e
。
想要在一个环境中编写算法equation
,以便它在右边距有一个方程编号。
但是我不能将它包含在里面,LaTeX 会抱怨(可能是因为它algorithm
不应该出现在等式中)。
我怎样才能做到这一点?
答案1
设置算法前框内equation
,然后使用该框作为方程内容。没有官方需要这样做,但这可能会让你的代码更简洁一些。或者,algorithm
在适当大小的 内设置minipage
:
\documentclass{article}
\usepackage{algorithm2e}
\newsavebox{\algbox}
\begin{document}
\begin{lrbox}{\algbox}
\begin{minipage}{0.9\linewidth}
\begin{algorithm}[H]
\SetAlgoLined
\KwData{this text}
\KwResult{how to write algorithm with \LaTeX2e }
initialization\;
\While{not at end of this document}{
read current\;
\eIf{understand}{
go to next section\;
current section becomes this one\;
}{
go back to the beginning of current section\;
}
}
\caption{How to write algorithms}
\end{algorithm}
\end{minipage}
\end{lrbox}
\begin{equation}
\usebox{\algbox}
\end{equation}
\end{document}
注意浮点说明符的使用[H]
。这会从环境中移除任何浮动行为algorithm
,这对于在框内捕获算法和/或使其停留在您想要的位置(例如在特定equation
环境中)至关重要。
另请注意,我已将算法设置在minipage
比文本块宽度略窄的范围内0.9\linewidth
。这样可以确保方程编号适合算法旁边。如果您的方程编号更宽,则可能需要调整此长度。
答案2
Werner 代码的变体。我认为不应该尝试将算法置于页面的中心,而是将其设置为与页边距的固定距离(这里我将其设置为零)。输入也得到了简化。
我认为标题不是必需的。相反,我提供了对标准\label
命令的支持。
\documentclass{article}
\usepackage{amsmath}
\usepackage{algorithm2e}
\usepackage{lipsum}
\newsavebox{\algbox}
\newenvironment{algoequation}
{\begin{lrbox}{\algbox}
\begin{minipage}{0.9\linewidth}
\setlength{\algomargin}{0pt}% or the margin you want
\begin{algorithm}[H]
\let\label\algolabel\gdef\thisalgolabel{}}
{\end{algorithm}
\end{minipage}
\end{lrbox}
\begin{equation}
\if\relax\detokenize\expandafter{\thisalgolabel}\relax
\else
\label{\thisalgolabel}
\fi
\hfilneg\usebox{\algbox}\hspace{10000pt minus 1fil}
\end{equation}}
\newcommand{\algolabel}[1]{\gdef\thisalgolabel{#1}}
\begin{document}
Algorithm~\eqref{test} is important.
\lipsum*[2]
\begin{algoequation}\label{test}
\SetAlgoLined
\KwData{this text}
\KwResult{how to write algorithm with \LaTeX2e }
initialization\;
\While{not at end of this document}{
read current\;
\eIf{understand}{
go to next section\;
current section becomes this one\;
}{
go back to the beginning of current section\;
}
}
\end{algoequation}
\lipsum[3]
\end{document}
\algoindent
如果要实现与左边距不同的距离,请按照以下方式操作。
宽度0.9\linewidth
应根据方程式数字的最大宽度进行调整。