Я хочу создать список, используя 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}
}