有没有办法禁止在lstlisting
环境开始/结束时进行分页?
我试图将以下两对线放在一起:
- 第一行
lstlisting
和前一行 - 最后一行
lstlisting
和下一行
但是分页功能应该可用(因此使用minipage
不是一个解决方案) - 有超过一页长的代码片段。
据我所知 \end{lstlisting}
隐式添加了一个可行的断点,因此必须撤消它才能执行此操作。
\documentclass{article}
\usepackage[a6paper]{geometry}
\usepackage{listings}
\begin{document}
\textbf{Keep the first two together}
\vspace{22\baselineskip}
\noindent Line Before
\begin{lstlisting}
First line
Middle lines
Middle lines
Middle lines
Last line
\end{lstlisting}
Line After
\newpage
\textbf{Keep the last two together}
\vspace{17\baselineskip}
\noindent Line Before
\begin{lstlisting}
First line
Middle lines
Middle lines
Middle lines
Last line
\end{lstlisting}
Line After
\end{document}
答案1
我老爸还有个未解答的问题listings
。真好。
取代现任者vspace
——取决于你怎么看——listings.sty分别与abovedisplayskip
和belowdisplayskip
。
总结一下,我们要到第 1723 行:
\else
\lst@ifdisplaystyle
\lst@EveryDisplay
\par\penalty-50\relax
\vspace\lst@aboveskip
并将其修改为:
\else
\lst@ifdisplaystyle
\lst@EveryDisplay
\par\penalty-50\relax
\lst@belowskip\lst@aboveskip
然后到第 1776 行,不管其历史背景如何:
\else
\lst@ifdisplaystyle
\par\penalty-50\vspace\lst@belowskip
并对其进行修改:
\else
\lst@ifdisplaystyle
\par\penalty-50\lst@aboveskip\lst@belowskip
您的样品:
\documentclass{article}
\usepackage[a6paper]{geometry}
\usepackage{listings}
\begin{document}
\textbf{Keep the first two together}
\vspace{15\baselineskip}
\noindent Line Before
\begin{lstlisting}
First line
Middle lines
Middle lines
Middle lines
Last line
\end{lstlisting}
Line After
\newpage
\textbf{Keep the last two together}
\vspace{15\baselineskip}
\noindent Line Before
\begin{lstlisting}
First line
Middle lines
Middle lines
Middle lines
Last line
\end{lstlisting}
Line After
\end{document}