如何撤销`lstlisting`的可行断点?

如何撤销`lstlisting`的可行断点?

有没有办法禁止在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分别与abovedisplayskipbelowdisplayskip

总结一下,我们要到第 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}

在此处输入图片描述

相关内容