我想創建一個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}
}