我用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
需要包。记得将包语句添加到文档序言中。\caption
algpseudocode
下面是产生上述结果的代码示例。
代码
\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}