我想定義一個新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
如圖所示在朱博斯的評論中我會用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