列表和部分之间的奇怪互动

列表和部分之间的奇怪互动

考虑这个例子:

\documentclass[a4paper]{article}
\usepackage{listings}
\lstnewenvironment{shell}{}{}
%\usepackage{verbatim}
%\let\shell\verbatim
%\let\endshell\endverbatim
\begin{document}

\subsubsection{Test1}

\begin{shell}
test
\end{shell}
Some text

\subsubsection{Test2}

More text, Test2 has no spacing above

\subsubsection{Test3}

Looks ok
\end{document}

当我编译这个时我得到

在此处输入图片描述

上面部分的空间Test2去哪了?如果我不使用listings,说一下注释的内容,一切就都好了。

有任何想法吗?

下面列出了版本。

 article.cls    2007/10/19 v1.4h Standard LaTeX document class
  size10.clo    2007/10/19 v1.4h Standard LaTeX file (size option)
listings.sty    2013/08/26 1.5b (Carsten Heinz)
  keyval.sty    1999/03/16 v1.13 key=value parser (DPC)
 lstmisc.sty    2013/08/26 1.5b (Carsten Heinz)
listings.cfg    2013/08/26 1.5b listings configuration

答案1

环境lstlisting不会\if@nobreak在章节标题之后立即重置。不幸的是,我几年前的错误报告落入了超空间。

一个“糟糕”的修复方法是自己添加缺少的操作:

\documentclass[a4paper]{article}
\usepackage{listings,etoolbox}
\makeatletter
\newcommand{\fixspacing}{\@nobreakfalse}
\makeatother
\lstnewenvironment{shell}{}{\fixspacing}

\begin{document}

\subsubsection{Test1}

\begin{shell}
test
\end{shell}
Some text

\subsubsection{Test2}

More text, Test2 has no spacing above

\subsubsection{Test3}

Looks ok
\end{document}

不太干净的补丁是

\documentclass[a4paper]{article}
\usepackage{listings}
\makeatletter
\g@addto@macro\lst@DeInit{\@nobreakfalse}{}{}
\makeatother

\lstnewenvironment{shell}{}{}

\begin{document}

\subsubsection{Test1}

\begin{shell}
test
\end{shell}
Some text

\subsubsection{Test2}

More text, Test2 has no spacing above

\subsubsection{Test3}

Looks ok
\end{document}

不幸的是,\lstnewenvironment@该操作更合适的命令无法修补,因此修复实际上应该在包级别。我的印象是,在应该设置为 false 的\lst@DeInit地方调用了。但我可能错了。\if@nobreak

在此处输入图片描述

相关内容