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}
編集2: 何が間違っているかを示すために、最小限の例を作成しました。 https://gist.github.com/jaen/68c6fe78c83d5d58721f
Ch1 は適切な動作です - minted は中断し、キャプションはリストの終わりの次に始まります、
Ch2 は同じページで動作し、正しく動作しません - minted は中断しません (ただし、キャプションは必要な場所から始まり)、
Ch3 はコードが長く、minted は予想どおりに中断しますが、キャプションは次のページにプッシュされ、リストの直後には開始されません、
Ch4 は再び同じページです - minted は中断せず、キャプションは次のページにプッシュされます、
Ch5 は依然として長いコード サンプルです - 再び minted は中断しますが、キャプションは次のページにプッシュされます、
Ch6 は同一ページでコメント アウトされています。コメントを外すとコンパイルすら行われないためです。1 ページにコード + キャプションを収めようとしてそれができないという無限ループに陥っているようです。
私が求めているのは、a) ページをまたいで改行する、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}
}