我使用包中的许多算法algorithm2e
都无法扩展到整个页面宽度。如果我使用包boxruled
或ruled
选项,结果将是一个扩展页面宽度的框或规则,右侧有大量空白。
我已经使用 更改了算法本身的宽度\setlength{\algomargin}{2in}
,但这对规则的宽度没有影响。效果是将算法代码“居中”,但环境本身的宽度与页面宽度相同。
有没有办法可以改变它而不必将其挤进minipage
?
更新:最小示例:
\documentclass[10pt]{article}
\usepackage[ruled]{algorithm2e}
\begin{document}
\setlength{\algomargin}{2in}
\begin{algorithm}[t]
\caption{NaiveSelect}\label{algo:naive-option}
Some alg step \;
\end{algorithm}
\end{document}
答案1
根据@lockstep 的回答,我创建了一个包装器环境,允许将小页面宽度指定为参数。
%adds minipage to inside of algorithms
\newlength{\tightalgowidth}
\newlength{\tightalgoremainder}
% uncomment to use centered floating algorithms
\newenvironment{tightalgo}[2][]
{
\setlength{\tightalgowidth}{#2}
\setlength{\tightalgoremainder}{\linewidth-\tightalgowidth}
\begin{algorithm}[#1] }
{ \end{algorithm} }
\makeatletter
\patchcmd{\@algocf@start}{%
\begin{lrbox}{\algocf@algobox}%
}{%
\rule{0.5\tightalgoremainder}{\z@}%
\begin{lrbox}{\algocf@algobox}%
\begin{minipage}{\tightalgowidth}%
}{}{}
\patchcmd{\@algocf@finish}{%
\end{lrbox}%
}{%
\end{minipage}%
\end{lrbox}%
}{}{}
\makeatother
像这样使用
\begin{tightalgo}[ht]{0.5\linewidth}
\caption{NaiveSelect}\label{algo:naive-option}
Some alg step \;
Some other \;
\end{tightalgo}
对于这个结果
答案2
在我的解决方案中,我使用etoolbox
补丁包\algocf@start
和\algocf@finish
分别在内部环境的开头和结尾执行algocf
。我添加了一个minipage
。使用0.6\textwidth
长度为的隐形规则0.2\textwidth
将 minipage 居中。
\documentclass[10pt]{article}
\usepackage[ruled]{algorithm2e}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\@algocf@start}{%
\begin{lrbox}{\algocf@algobox}%
}{%
\rule{0.2\textwidth}{\z@}%
\begin{lrbox}{\algocf@algobox}%
\begin{minipage}{0.6\textwidth}%
}{}{}
\patchcmd{\@algocf@finish}{%
\end{lrbox}%
}{%
\end{minipage}%
\end{lrbox}%
}{}{}
\makeatother
\begin{document}
% \setlength{\algomargin}{2in}
\begin{algorithm}[t]
\caption{NaiveSelect}\label{algo:naive-option}
Some alg step \;
\end{algorithm}
\end{document}