我想创建一个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 是一种良好的行为 - 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}
}