每当我使用分页符将列表拆分到不同的页面上时,我都希望自动插入一个符号或一般所说的某个命令。我可以使用列表的转义字符手动完成此操作:
\begin{lstlisting}[language=cs]
class MyClass
{
// assume this is on one page
´
\begin{flushright}
$\blacktriangledown$
\end{flushright}
´
// assume this is on the other page
}
\end{lstlisting}
但是,当我在列表前添加足够多的文本时,符号将不再放置在正确的位置。它将被移动到下一页,在那里它不再有意义。为了解决这个问题,我需要动态放置一些用户定义的乳胶,将其插入到分页符将我的列表分开的位置。
更新:有一个formfeed
可以在 中设置的参数lstset
。它默认为 \bigbreak,尽管\bigbreak
在列表中以转义模式插入会导致列表拆分的视觉效果与分页符相同,但更改formfeed
不会改变输出,真的很遗憾。
有解决办法吗?
答案1
为了表示代码列表从上一页继续,我让 MWE\nabla
在页面的右上角粘贴一个(倒三角形),其中lstlisting
跨越页面边界。我不得不使用 David Carlisle 技巧来让 afterpage 和列表很好地协同工作(空白页页后列表)。我还临时修改了的定义,\thepage
将相同的符号放在列表中断的页面末尾。
但是,在这两种情况下,用户都必须选择插入它们,只有当他注意到代码在页面上中断时才可以。因此,从这个意义上说,它们不是自动化的。但是,这比提问者一开始的做法有所改进,因为他必须将符号准确地放在分页符的确切行上才能获得所需的外观。至少使用这种解决方案,添加一行文本通常不会像他原来的方法那样搞砸结果。
\documentclass{article}
\usepackage{afterpage}
\usepackage{listings}
\let\svthepage\thepage
\begin{document}
Normal text
% https://tex.stackexchange.com/questions/78794/empty-page-afterpage-listings
\def\thepage{\hfill\svthepage\hfill$\nabla$}
\setbox0\vbox{
\afterpage{\hfill$\nabla$}
\begin{lstlisting}%[language=cs]
class MyClass
{
// assume this is on one page
// assume this is on one page
// assume this is on one page
// assume this is on one page
// assume this is on one page
// assume this is on one page
// assume this is on one page
// assume this is on one page
// assume this is on one page
// assume this is on one page
// assume this is on one page
// assume this is on the other page
// assume this is on the other page
// assume this is on the other page
}
\end{lstlisting}
}
\unvbox0
\let\thepage\svthepage
Back to normal text
\end{document}