목록 자체의 전후가 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