リスト自体の前後にlistings
リストがある新しい環境を定義したいと思います。これを実現するために、次の環境を定義しました。\hrule
\lstnewenvironment{haskell}[1][]
{
\vspace{0.4cm}
\mathligsoff
\hrule
\lstset{language=haskell, basicstyle=\small, #1}
}{
\hrule
\mathligson
\vspace{0.4cm}
}
問題は、リストがページの下部に表示されると、結びの言葉が\hrule
次のページに移動する場合があることです。
ご覧のとおり、強調表示されたルールが新しいページの先頭に配置されてしまい、見苦しい状態になっています。
リストと最後のルールの間に改ページが発生しないようにするにはどうすればよいですか? すでに\nopagebreak
beforeを追加しようとしました\hrule
が、問題は解決しませんでした。
答え1
示されているようにJubobsのコメント私はtcolorbox
このため、次のコードは質問で概説されているレイアウトを模倣していますが、tcolorbox
より凝ったレイアウトも簡単に可能です。
\documentclass{article}
\usepackage{tcolorbox,listings}
\tcbuselibrary{listings,xparse}
\tcbset{listing engine=listings}
\NewTCBListing{haskell}{O{}}{%
% colors:
colback = white , colframe = black , coltitle = black ,
% rules:
boxrule = 0pt , toprule = 1pt , bottomrule = 1pt , arc = 0pt ,
% spacing:
boxsep = 0pt , left = 0pt , right = 0pt ,
% listing options:
listing options = {
language = haskell ,
basicstyle = \small ,
gobble = 2 ,%
#1%
} ,
listing only
}
\begin{document}
\begin{haskell}
sums = zipWith (\x y -> x + y) numbers1 numbers2
products = zipWith (\x y -> x * y) numbers1 numbers2
pairs = zipWith (\x y -> (x, y)) numbers1 numbers2
\end{haskell}
\end{document}
(ライブラリが必要)breakable
オプションを指定しない限り、完全なリストは 1 ページに残ります。tcolorbox
breakable