tcolorbox 中的算法:如何将标签放在算法上,但将标题作为 tcolorbox 的标题?

tcolorbox 中的算法:如何将标签放在算法上,但将标题作为 tcolorbox 的标题?

这个问题是在关于 tcolorboxes 内部算法的问题

在提问之前,最好先解释一下我现在所拥有的。我有一个包含算法的文件q-learning.tex

\documentclass{standalone}
\usepackage[utf8]{inputenc}
\usepackage[longend]{algorithm2e}
\usepackage{textgreek}
\usepackage{amssymb}

\begin{document}
\begin{algorithm}[H]
Algorithm parameters: step size $\alpha \in (0, 1]$\;
Initialize $Q(s, a)$, for all $s \in \mathcal{S}^+, a \in \mathcal{A}(s)$, arbitrarily except that $Q(\mathrm{terminal}, \cdot) = 0$\;

\ForEach{episode}{
    Initialize S\;
    \ForEach{step of episode}{
        Choose $A$ from $S$ using policy derived from $Q$ (e.g. \textepsilon-greedy)\;
        Take action $A$, observe $R$, $S'$\;
        $Q(S, A) \leftarrow Q(S, A) + \alpha [R + \gamma \max_a Q(S', a) - Q(S, A)]$\;
        $S \leftarrow S'$\;
    }
}
\end{algorithm}
\end{document}

并且我将其包含到我的主文件中standalone

\documentclass{book}
\usepackage[utf8]{inputenc}
\usepackage[subpreambles,sort]{standalone}
\usepackage{tcolorbox}
\usepackage{algorithm2e}

\begin{document}
\begin{tcolorbox}[fonttitle=\bfseries, title=Q-learning for estimating $\pi \approx \pi^*$]
  \input{q-learning}
\end{tcolorbox}
\end{document}

裁剪后的效果如下。

算法

algorithm2e我不知道为什么我需要再次加载,但这不是现在困扰我的原因。我希望对算法进行编号,然后列出它们\listofalgorithms,并且我还希望能够引用这种图形。但是,在这个实现中,我没有标题,也不知道把它放在哪里。标题应该是title的字段tcolorbox,即标题应该显示为“算法 3.2 Q 学习...”,但标签应该引用里面的算法。

总结一下:

  • 标签应该引用算法,我应该能够用列出算法列表\listofalgorithms
  • 算法的说明应该显示为tcolorbox

到目前为止,我所做的最佳更改是在算法中插入一个空白标题和一个标签,并在标题中引用它。它也会正确显示在算法列表中。但是,我无法删除底部烦人的“算法 1:”。

这是视觉效果:

示例2

示例3

代码如下:

q-学习.tex

\documentclass{standalone}
\usepackage[utf8]{inputenc}
\usepackage[longend]{algorithm2e}
\usepackage{textgreek}
\usepackage{amssymb}

\begin{document}
\begin{algorithm}[H]
Algorithm parameters: step size $\alpha \in (0, 1]$\;
Initialize $Q(s, a)$, for all $s \in \mathcal{S}^+, a \in \mathcal{A}(s)$, arbitrarily except that $Q(\mathrm{terminal}, \cdot) = 0$\;

\ForEach{episode}{
    Initialize S\;
    \ForEach{step of episode}{
        Choose $A$ from $S$ using policy derived from $Q$ (e.g. \textepsilon-greedy)\;
        Take action $A$, observe $R$, $S'$\;
        $Q(S, A) \leftarrow Q(S, A) + \alpha [R + \gamma \max_a Q(S', a) - Q(S, A)]$\;
        $S \leftarrow S'$\;
    }
}
\caption[Q-learning for estimating $\pi \approx \pi^*$]{}
\label{alg:q-learning}
\end{algorithm}
\end{document}

主文本

\documentclass{book}
\usepackage[utf8]{inputenc}
\usepackage[subpreambles,sort]{standalone}
\usepackage{tcolorbox}
\usepackage{algorithm2e}

\begin{document}
\frontmatter
\listofalgorithms
\mainmatter
\chapter{First chapter}
\begin{tcolorbox}[fonttitle=\bfseries, title=Algorithm \ref{alg:q-learning}: Q-learning for estimating $\pi \approx \pi^*$]
  \input{q-learning}
\end{tcolorbox}
\end{document}

当然,现在的结果还不适合我的需要。

答案1

找到了解决方案。虽然不完美,但还是有用的。

q-学习.tex

\documentclass{standalone}
\usepackage[utf8]{inputenc}
\usepackage[longend]{algorithm2e}
\usepackage{textgreek}
\usepackage{amssymb}

\begin{document}
\begin{algorithm}[H]
Algorithm parameters: step size $\alpha \in (0, 1]$\;
Initialize $Q(s, a)$, for all $s \in \mathcal{S}^+, a \in \mathcal{A}(s)$, arbitrarily except that $Q(\mathrm{terminal}, \cdot) = 0$\;

\ForEach{episode}{
    Initialize S\;
    \ForEach{step of episode}{
        Choose $A$ from $S$ using policy derived from $Q$ (e.g. \textepsilon-greedy)\;
        Take action $A$, observe $R$, $S'$\;
        $Q(S, A) \leftarrow Q(S, A) + \alpha [R + \gamma \max_a Q(S', a) - Q(S, A)]$\;
        $S \leftarrow S'$\;
    }
}
\caption[Q-learning for estimating $\pi \approx \pi^*$]{}
\label{alg:q-learning}
\end{algorithm}
\end{document}

主文本

\documentclass{book}
\usepackage[utf8]{inputenc}
\usepackage[subpreambles,sort]{standalone}
\usepackage{tcolorbox}
\usepackage{algorithm2e}
    \NoCaptionOfAlgo
\usepackage{hyperref}

\begin{document}
\frontmatter
\listofalgorithms
\mainmatter
\chapter{First chapter}
\begin{tcolorbox}[fonttitle=\bfseries, title=Algorithm~\ref*{alg:q-learning}: Q-learning for estimating $\pi \approx \pi^*$]
  \input{q-learning}
\end{tcolorbox}
\end{document}

基本上,它的工作原理如下:

  • \NoCaptionOfAlgo不会在标题中打印算法及其编号。此宏仅适用于“algoruled”或“ruled”算法(请参阅文档)。
  • 在算法中,我只设置了标签和可选参数\caption。第一个用于参考,第二个用于在打印的算法列表中显示\listofalgorithms
  • 我在 tcolorbox 的标题中手动输入了标题前缀以及算法编号。如果hyperref加载了该包,我建议使用带星号的版本\ref以避免超链接。

这个解决方案很好用。唯一让我不满意的是最后一点:标题、参考资料和标题中的标题前缀都是手动设置的。这意味着很容易出错。如果有人能提出更好的自动化解决方案,我将不胜感激。

相关内容