我需要做的是使用列表环境时应用页眉和页脚。我有几个要求:
- 页眉和页脚应该位于列表本身之外,即,它们不是列表内容的一部分。
- 页眉和列表之间的空间量应与页脚和列表之间的空间量相同。
- 列表和页眉/页脚之间的空间量不应是弹性的,即 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
添加这样的功能?