我想将一个算法放在一个枚举列表中,如下面的代码所示。
\documentclass[10pt,a4paper]{article}
\usepackage[utf8x]{inputenc}
\usepackage{ucs}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[ruled,french]{algorithm2e}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\begin{enumerate}
\item Bla, bla...
\begin{algorithm}[H]
\caption{Le crible d'Eratosthène}
\KwData{la liste $L$ des naturels compris de $2$ à $N$.}
\KwResult{la liste $P$ des nombres premiers compris entre $2$ et $N$.}
\BlankLine
\For{$i = 2$ \KwTo $N$}{
\If{$i$ n'est pas barré dans la liste $L$}{
Barrer dans la liste $L$ les mutltiples $ki$ où $k \geq 2$.
}
}
\Return{la liste $P$ des nombres non barrés.}
\end{algorithm}
\item Bla, bla...
\end{enumerate}
\end{document}
我遇到的问题是,我获得了以下输出,其中算法放错了位置(或太宽)。
如果有人可以给出一个以页面为中心而不是以项目内容为中心的算法解决方案,那就太好了。
答案1
主要问题是其宏中的algorithm2e
使用\hsize
,即不是受到推崇的。
你可以通过以下方式解决问题
\usepackage{xpatch}
\xpretocmd{\algorithm}{\hsize=\linewidth}{}{}
但我不能保证这没有副作用。
另一种方法是使用全线宽度:定义一个listalgorithm
在列表内使用的环境
\makeatletter
\newenvironment{listalgorithm}
{\par\noindent\hspace*{-\@totalleftmargin}%
\minipage{\textwidth}\algorithm[H]}
{\endalgorithm\endminipage}
\makeatother
最后的评论。我会尽力避免将算法放在enumerate
或itemize
环境中。
答案2
另一种方法是将其包装在适当大小的minipage
环境中。
\documentclass[10pt,a4paper]{article}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[ruled,french]{algorithm2e}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\begin{enumerate}
\item Bla, bla...
\begin{minipage}{\linewidth} % <<<<< modify here <<<<<
\begin{algorithm}[H]
\caption{Le crible d'Eratosthène}
\KwData{la liste $L$ des naturels compris de $2$ à $N$.}
\KwResult{la liste $P$ des nombres premiers compris entre $2$ et $N$.}
\BlankLine
\For{$i = 2$ \KwTo $N$}{
\If{$i$ n'est pas barré dans la liste $L$}{
Barrer dans la liste $L$ les mutltiples $ki$ où $k \geq 2$.
}
}
\Return{la liste $P$ des nombres non barrés.}
\end{algorithm}
\end{minipage} % <<<<< modify here <<<<<
\item Bla, bla...
\end{enumerate}
\end{document}