Fügen Sie vertikalen Abstand nur hinzu, wenn kein Seitenumbruch vorhanden ist.

Fügen Sie vertikalen Abstand nur hinzu, wenn kein Seitenumbruch vorhanden ist.

Ich möchte eine neue listingsUmgebung definieren, in der die Auflistung ein \hruleVorher und ein Nachher der Auflistung selbst hat. Zu diesem Zweck habe ich diese Umgebung definiert:

\lstnewenvironment{haskell}[1][]
    {
        \vspace{0.4cm}
        \mathligsoff
        \hrule
        \lstset{language=haskell, basicstyle=\small, #1}
    }{
        \hrule
        \mathligson
        \vspace{0.4cm}
}

\hruleDas Problem besteht darin, dass der Abschluss manchmal auf die nächste Seite verschoben wird , wenn ein Eintrag am Ende einer Seite landet :

Bild, das die zusätzliche Regel am Anfang der neuen Seite zeigt

Wie Sie sehen, landete die hervorgehobene Regel am Anfang der neuen Seite, was einfach hässlich ist.

\nopagebreakWie kann ich einen Seitenumbruch zwischen der Auflistung und der Regel am Ende vermeiden? Ich habe bereits versucht, ein „Before“ hinzuzufügen, \hruleaber das hat das Problem nicht gelöst.

Antwort1

Wie angegebenin den Kommentaren von JubobsIch würde verwendentcolorboxdafür. Der folgende Code imitiert das in der Frage beschriebene Layout, aber es tcolorboxsind problemlos viel ausgefallenere Layouts möglich.

\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}

breakableSofern Sie nicht die Option tcolorbox(benötigt die Bibliothek) angeben, breakablebleibt die vollständige Auflistung auf einer Seite.

Bildbeschreibung hier eingeben

verwandte Informationen