我创建了一个宏,\piece
将较长的部分组织成较小的、编号的部分。(我在一组讲义中使用了这个宏,我试图在每个部分中介绍一个概念。)这段代码基本上是从 中偷来的\@startsection
,到目前为止运行良好,但现在我在与包相关的方面遇到了问题。当我在 之后立即listings
开始 时,列表和新部分之间的垂直空间太大。\piece
lstlisting
之前已经讨论过与垂直空间相关的类似问题lstlisting
,但我无法从答案中得出我的问题的答案:
我怎样才能使代码\piece
更加健壮,以便这个问题消失?
这是一个说明该问题的最小工作示例:
\documentclass{minimal}
\usepackage{listings}
\makeatletter
\newcounter{piece}
\def\thepiece{\arabic{piece}}
\newcommand*{\piece}{%
\if@noskipsec \leavevmode \fi
\par
\@afterindentfalse
\if@nobreak
\everypar{}%
\else
\addvspace\belowdisplayskip
\fi
\refstepcounter{piece}%
\@afterheading
\makebox[0pt][r]{\thepiece\quad}%
}
\makeatother
\begin{document}
\piece Piece 1
\piece Piece 2
\begin{lstlisting}
Listing
\end{lstlisting}
\piece Piece 3
\end{document}
最小示例的输出: