如何让 minted 跨页但保持标题与列表末尾在一起?

如何让 minted 跨页但保持标题与列表末尾在一起?

我想创建一个minted具有背景颜色并可跨页面拆分的列表。在这种情况下,通常的建议是使用环境mdframed,我已经编写了一个遵循此建议的命令

\newcommand{\clojurecode}[4]{
    \label{code:#2}
    \begin{mdframed}[backgroundcolor=LightGray,hidealllines=true,leftmargin=10mm]
      \clojurefile{#1}
    \end{mdframed}
    \captionof{code}[#3]
      {#4}
}

但在这种情况下,我似乎无法轻松地指定我希望标题保留在列表所在的同一页面上,并且环境samepage会阻止列表跨页面拆分,而这不是我想要的。

是否有任何解决方案可以将标题绑定到列表底部,以便它们始终出现在同一页面上,而不会让列表中断?

编辑:
\clojurefile通过以下调用生成命令\newmintedfile

\newmintedfile{clojure}{framesep=2mm,
                        baselinestretch=1.2,
                        numbersep=16pt,
                        fontsize=\footnotesize,
                        linenos,
                        breaklines,
                        breakanywhere}

EDIT2:我做了一个简单的例子来说明什么是错误的: https://gist.github.com/jaen/68c6fe78c83d5d58721f

Ch1 是一种良好的行为 - minted 中断,标题从列表末尾开始,
Ch2 与 samepage 相同且行为错误 - minted 不会中断(尽管标题从应有的位置开始),
Ch3 具有更长的代码 - minted 如我所料中断,但标题被推送到下一页并且不会在列表后立即开始,
Ch4 再次是 samepage - 它既不会让 minted 中断又将标题推送到下一页,
Ch5 仍然是一个更长的代码示例 - minted 再次中断,但标题被推送到下一页,
Ch6 是 samepage 并被注释掉,因为如果取消注释它,它甚至不会编译,似乎它进入了一个无限循环,试图将代码 + 标题放在一页上,但不能。

我想要的是实现以下行为:a) minted 跨页显示,b) 标题始终从列表末尾开始,而不是推到下一页。
但我似乎找不到。有人知道吗?

答案1

这是一个tcolorbox解决方案(仅相关代码,因为您的 MWE 不是最小的)。我删除了\usepackage{mdframed}并添加了以下内容:

\usepackage{tcolorbox}
\tcbuselibrary{breakable}

它使用包tcolorbox并使您能够拥有可破坏的框。它们在您的命令中使用(我不明白您的 samepage 版本的目的是什么)。以下示例排版了这样的框(请查看文档以tcolorbox了解如何自定义外观。我已将标题放入框的下部。这是一个设计决定,您当然可以按照自己的意愿进行更改。

\newcommand{\clojurecode}[4]{
    \label{code:#2}
    \begin{tcolorbox}[breakable,colback=LightGray,left=10mm]
        \clojurefile{#1}
        \tcblower
        \captionof{code}[#3]{#4}
    \end{tcolorbox}
}

相关内容