Quero criar uma listagem minted
que tenha cor de fundo e possa ser dividida em páginas. O conselho usual nesse caso é usar o mdframed
ambiente 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 samepage
ambiente 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:
\clojurefile
o comando é gerado com esta \newmintedfile
chamada:
\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 tcolorbox
soluçã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 tcolorbox
e 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 tcolorbox
para 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}
}