在 tcolorbox 中使用 algorithm2e

在 tcolorbox 中使用 algorithm2e

我用algorithm2e包来排版算法。现在我想把tcolorbox算法放在周围。我的第一个方法看起来像这样:

\begin{tcolorbox}
    \begin{algorithm}
        $a \leftarrow 1$
        \caption{My Algorithm}
    \end{algorithm}
\end{tcolorbox}

这会产生以下错误:LaTeX Error: Not in outer par mode.我的理解是,发生这种情况是因为和tcolorbox都是algorithm无法嵌套的浮动环境。

已经有一个类似的问题:如何将 \algorithm 和 \algorithmic 环境放入盒子内?那里接受的答案对我不起作用,因为它只是描述了如何在算法周围放置一个任意的框。我也尝试过使用\RestyleAlgo{tcolorbox},但无济于事。我正在寻找一种专门使用的方法tcolorbox

最后要说的是,我不需要特别排版算法algorithm2e,任何其他算法包也可以。

答案1

错误“不在外部 par 模式”是因为algorithm环境想要浮动,但它包含在非浮动的 内tcolorbox。唯一的方法是algorithm2e不是浮点数,其算法是使用[H]浮点数说明符:

在此处输入图片描述

\documentclass{article}
\usepackage[paper size={15cm,10cm}]{geometry}
\usepackage[most]{tcolorbox}
\usepackage{algorithm2e}

\begin{document}

\begin{tcolorbox}
  \begin{algorithm}[H]
    $a \leftarrow 1$
    \caption{My Algorithm}
  \end{algorithm}
\end{tcolorbox}
\end{document}

答案2

这是一种替代方案。LaTeX Wikibook 上的算法部分有以下声明。

algorithmicx软件包提供了许多用于算法设计的流行构造。\usepackage{algpseudocode}在序言中提到使用算法环境编写算法伪代码(\begin{algorithmic}...\end{algorithmic})。您可能希望使用算法环境(\usepackage{algorithm})将您的算法代码包装在算法环境中(\begin{algorithm}...\end{algorithm})以生成具有编号算法的浮动环​​境。

话虽如此,没有algorithm环境意味着非浮动。因此,它可以放在tcolorbox环境内,因此,算法caption需要包。记得将包语句添加到文档序言中。\captionalgpseudocode

在此处输入图片描述

下面是产生上述结果的代码示例。

代码

\documentclass{article}
\usepackage[paper size={15cm,10cm}]{geometry}
\usepackage[most]{tcolorbox}
\usepackage{algpseudocode}
\usepackage{caption}

\DeclareCaptionType{mytype}[Algorithm][List of MyType]
\newenvironment{myenv}{}{}

\begin{document}
\listofmytypes

\begin{tcolorbox}
    \centering
\begin{algorithmic}
\If {$i\geq maxval$}
    \State $i\gets 0$
\Else
    \If {$i+k\leq maxval$}
        \State $i\gets i+k$
    \EndIf
\EndIf
\end{algorithmic}
\captionof{mytype}{My Algorithm}
\end{tcolorbox}
\end{document}

相关内容