列表环境的页眉和页脚?

列表环境的页眉和页脚?

我需要做的是使用列表环境时应用页眉和页脚。我有几个要求:

  • 页眉和页脚应该位于列表本身之外,即,它们不是列表内容的一部分。
  • 页眉和列表之间的空间量应与页脚和列表之间的空间量相同。
  • 列表和页眉/页脚之间的空间量不应是弹性的,即 TeX 不应该能够调整页眉/页脚距离列表更近或更远。
  • 每个列表的页眉和页脚可能不相同。
  • 页眉/页脚和列表之间不应有分页符。
  • 列表本身内应该可以进行分页。

据我所知,如果使用以下方法,我可以达到大部分目的minipage

\usepackage{listings}

\newcommand{\codeHeaderFooter}{}

\lstnewenvironment{code}[2][]{
  \lstset{language=c++,aboveskip=12pt,belowskip=12pt,#1}
  \renewcommand{\codeHeaderFooter}{#2}
  \begin{minipage}[c]{\linewidth}
  \codeHeaderFooter{}
} {
  \end{minipage}
  \begin{flushright}
    \codeHeaderFooter{}
  \end{flushright}
}

\begin{code}{header/footer}
std::cout << "Hello, World!" << std::endl;
\end{code}

问题是 minipage 不允许分页符,因此列表不能跨越多页。我尝试过的其他解决方案(即\nopagebreak[4]\vspace、 和的组合\raggedbottom)要么无法 (a) 防止页眉/页脚和列表之间的分页符,要么无法 (b) 防止 TeX 调整页眉/页脚和列表之间的空间。浮动不是一种选择。

关于如何满足上述所有要求,您有什么想法吗?

答案1

我知道的唯一一个可以做你想做的事情的包是 package longtable。它有特殊的页眉和页脚,用于跨多页的表格。

该包中listings没有定义您想要的页眉和页脚,因此解决问题的一种方法是研究 longtable 和更改包中的页眉和页脚代码listings并在其中包含类似页眉和页脚的代码。

这两个软件包都很棘手,所以我想只有软件包的维护者才能帮助您。也许您可以要求维护者listings添加这样的功能?

相关内容