Ich möchte eine neue listings
Umgebung definieren, in der die Auflistung ein \hrule
Vorher 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}
}
\hrule
Das Problem besteht darin, dass der Abschluss manchmal auf die nächste Seite verschoben wird , wenn ein Eintrag am Ende einer Seite landet :
Wie Sie sehen, landete die hervorgehobene Regel am Anfang der neuen Seite, was einfach hässlich ist.
\nopagebreak
Wie kann ich einen Seitenumbruch zwischen der Auflistung und der Regel am Ende vermeiden? Ich habe bereits versucht, ein „Before“ hinzuzufügen, \hrule
aber das hat das Problem nicht gelöst.
Antwort1
Wie angegebenin den Kommentaren von JubobsIch würde verwendentcolorbox
dafür. Der folgende Code imitiert das in der Frage beschriebene Layout, aber es tcolorbox
sind 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}
breakable
Sofern Sie nicht die Option tcolorbox
(benötigt die Bibliothek) angeben, breakable
bleibt die vollständige Auflistung auf einer Seite.