Como permitir que a cunhagem se espalhe pelas páginas, mas manter a legenda junto com o final da listagem?

Como permitir que a cunhagem se espalhe pelas páginas, mas manter a legenda junto com o final da listagem?

Quero criar uma listagem mintedque tenha cor de fundo e possa ser dividida em páginas. O conselho usual nesse caso é usar o mdframedambiente e eu escrevi um comando que segue este conselho

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

Mas, nesse caso, não consigo especificar facilmente que desejo que a legenda seja mantida na mesma página em que a listagem está e o samepageambiente evitaria que a listagem se dividisse nas páginas, o que não é o que eu quero .

Existe alguma solução para vincular a legenda ao final da listagem para que sempre apareçam na mesma página e, mesmo assim, deixe a listagem quebrar?

EDIT:
\clojurefileo comando é gerado com esta \newmintedfilechamada:

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

EDIT2: Fiz um exemplo mínimo para demonstrar o que há de errado: https://gist.github.com/jaen/68c6fe78c83d5d58721f

Ch1 é um bom comportamento - quebras cunhadas, a legenda começa próximo ao final da listagem,
Ch2 está na mesma página e se comporta de maneira errada - cunhada não quebra (embora as legendas comecem onde deveriam),
Ch3 tem código mais longo - quebras cunhadas como eu esperava, mas a legenda é empurrada para a próxima página e não começa imediatamente após a listagem,
o Ch4 é a mesma página novamente - não permite a quebra cunhada e empurra a legenda para a próxima página,
o Ch5 ainda é um exemplo de código mais longo - novamente quebras cunhadas, mas a legenda é empurrada para a próxima página,
Ch6 é a mesma página e comentada, porque se você descomentar, ele nem vai compilar, parece que entra em um loop infinito de tentar encaixar o código + legenda em uma página e pode 't.

O que eu quero é obter um comportamento em que a) haja quebras nas páginas, b) a legenda sempre comece próximo ao final da listagem e não seja empurrada para a próxima página.
E não consigo encontrar um. Qualquer um?

Responder1

Aqui está uma tcolorboxsolução (apenas código relevante, pois seu MWE não é mínimo). Eu removi \usepackage{mdframed}e adicionei o seguinte:

\usepackage{tcolorbox}
\tcbuselibrary{breakable}

Isso usa o pacote tcolorboxe permite que você tenha caixas quebráveis. Eles são usados ​​dentro dos seus comandos (não entendi qual é o objetivo da sua versão da mesma página). O exemplo a seguir compõe essa caixa (dê uma olhada na documentação de tcolorboxpara ver como personalizar a aparência. Coloquei a legenda na parte inferior da caixa. Esta é uma decisão de design, é claro que você pode alterá-la no do jeito que você quiser.

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

informação relacionada