我想定义一个新listings
环境,其中列表\hrule
本身有前后内容。为了做到这一点,我定义了这个环境:
\lstnewenvironment{haskell}[1][]
{
\vspace{0.4cm}
\mathligsoff
\hrule
\lstset{language=haskell, basicstyle=\small, #1}
}{
\hrule
\mathligson
\vspace{0.4cm}
}
问题是,有时当列表位于页面底部时,结束\hrule
会移动到下一页:
正如您所看到的,突出显示的规则最终出现在新页面的开始处,这很丑陋。
如何避免在列表和最后的规则之间产生分页符?我\nopagebreak
之前已经尝试添加\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
选项,否则完整列表将保留在一页上。tcolorbox
breakable