Как сделать так, чтобы заголовок переносился на другие страницы, но при этом сохранялся в конце списка?

Как сделать так, чтобы заголовок переносился на другие страницы, но при этом сохранялся в конце списка?

Я хочу создать список, используя 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не даст листингу разделиться по страницам, а это не то, что мне нужно.

Есть ли решение, как привязать заголовок к нижней части листинга, чтобы он всегда отображался на одной странице, но при этом листинг не прерывался?

EDIT:
\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}
}

Связанный контент