如何讓 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 是一個很好的行為 - 生成的中斷,標題在列表末尾旁邊開始,
Ch2 與同一頁面並且行為錯誤 - 生成不會中斷(儘管標題在應該的位置開始),
Ch3 有更長的代碼- 正如我預期的那樣,生成的中斷,但是標題被推送到下一頁並且不會在列表後立即開始,
Ch4 又是同一頁 - 它既不讓 minted 中斷並將標題推送到下一頁,
Ch5 仍然是一個更長的程式碼範例- 再次minted 中斷,但是標題被推到下一頁,
Ch6是同一頁並被註解掉,因為如果取消註釋它,它甚至不會編譯,似乎它進入了一個試圖將程式碼+標題放在一頁上的無限循環,它可以't。

我想要的是獲得一種行為,其中a)跨頁面創建中斷,b)標題始終從列表末尾旁邊開始,並且不會被推送到下一頁。
而且我似乎找不到一個。任何人?

答案1

這是一個tcolorbox解決方案(只有相關程式碼,因為您的 MWE 不是最小的)。我已刪除\usepackage{mdframed}並添加了以下內容:

\usepackage{tcolorbox}
\tcbuselibrary{breakable}

它使用包裝tcolorbox並使您能夠擁有易碎的盒子。它們在您的命令中使用(我不明白您的同一頁面版本的目的是什麼)。下面的範例排版了這樣一個框(請查看文件以tcolorbox了解如何自訂外觀。我已將標題放入框的下部。這是一個設計決定,您當然可以更改它你想要的方式。

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

相關內容