僅當沒有分頁符號時才添加垂直空間

僅當沒有分頁符號時才添加垂直空間

我想定義一個新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選項,否則完整清單將保留在一頁上。tcolorboxbreakable

在此輸入影像描述

相關內容