![当 lstlisting 跳页时如何显示提示?](https://linux22.com/image/257054/%E5%BD%93%20lstlisting%20%E8%B7%B3%E9%A1%B5%E6%97%B6%E5%A6%82%E4%BD%95%E6%98%BE%E7%A4%BA%E6%8F%90%E7%A4%BA%EF%BC%9F.png)
我使用带标题的内联列表块。我有几个列表跨越多个页面或从页面末尾开始。现在我想给读者一个提示,列表还没有结束,还会继续到下一页。这个提示应该是“下一页/第二页有进一步的列表”。
我在 listings 包手册的第 4 部分搜索过,还没有找到这个参数。是否有可能显示这样的提示?
答案1
你可以使用mdframed
尤其是它的选项singleextra
、firstextra
和。不同的选项允许您为单个页面上的框架和分布在两个或多个页面上secondextra
的middleextra
框架设置不同的样式。
当mdframed
与 一起使用时framemethod=tikz
,您可以访问框架的角落。左下角的节点称为(O)
,右上角的节点称为(P)
。因此,右下角的节点可以通过 访问(O -| P)
,左上角的节点可以通过访问(P -| O)
。
这可以与使用来\lstnewenvironment
获得一个可以根据需要定制的列表环境。
下面我定义了一种mdframed
样式,如果框架被拆分,它会添加一些连续的信息,以及一个listings
使用此框架样式的新环境。它看起来如下:
代码如下:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[framemethod=tikz]{mdframed}
% define the frame style for the listing:
\mdfdefinestyle{note}
{
hidealllines = true ,
skipabove = .5\baselineskip ,
skipbelow = .5\baselineskip ,
singleextra = {} ,
firstextra = {
\node[below right,overlay,align=left,font=\continuingfont]
at (O) {\continuingtext};
} ,
secondextra = {
\node[above right,overlay,align=left,font=\continuingfont]
at (O |- P) {\continuedtext};
} ,
middleextra = {
\node[below right,overlay,align=left,font=\continuingfont]
at (O) {\continuingtext};
\node[above right,overlay,align=left,font=\continuingfont]
at (O |- P) {\continuedtext};
}
}
% customize the appearance of the continuing notes:
\newcommand*\continuingfont{\footnotesize\itshape}
\newcommand*\continuingtext{Listing continues on next page}
\newcommand*\continuedtext{Continuing from last page}
\usepackage{listings}
% define the listings style:
\lstdefinestyle{code}{
language = [LaTeX]TeX,
basicstyle = \small\ttfamily ,
numbers = left,
numberstyle = \tiny,
numberblanklines = true,
breaklines = true,
keepspaces = true,
columns = fullflexible,
% whatever else you want ...
}
% define the environment:
\lstnewenvironment{listing}
{%
\lstset{style=code}%
\mdframed[style=note]%
}
{%
\endmdframed
}
\usepackage{lipsum}% dummy text
\begin{document}
\lipsum[1-2]
\begin{listing}
\usepackage[framemethod=tikz]{mdframed}
\mdfdefinestyle{note}
{
hidealllines = true ,
skipabove = .5\baselineskip ,
skipbelow = .5\baselineskip ,
singleextra = {} ,
firstextra = {
\node[below right,overlay,align=left,font=\continuingfont]
at (O) {\continuingtext};
} ,
secondextra = {
\node[above right,overlay,align=left,font=\continuingfont]
at (O |- P) {\continuedtext};
} ,
middleextra = {
\node[below right,overlay,align=left,font=\continuingfont]
at (O) {\continuingtext};
\node[above right,overlay,align=left,font=\continuingfont]
at (O |- P) {\continuedtext};
}
}
\newcommand*\continuingfont{\footnotesize\itshape}
\newcommand*\continuingtext{Listing continues on next page}
\newcommand*\continuedtext{Continuing from last page}
\usepackage{listings}
\lstdefinestyle{code}{
language = [LaTeX]TeX,
basicstyle = \small\ttfamily ,
numbers = left,
numberstyle = \tiny,
numberblanklines = true,
breaklines = true,
keepspaces = true,
columns = fullflexible,
% whatever else you want ...
}
\lstnewenvironment{listing}
{%
\lstset{style=code}%
\mdframed[style=note]%
}
{%
\endmdframed
}
\end{listing}
\lipsum[2]
\end{document}
答案2
好吧,我主要使用行号,所以行号是一个很好的提示。而且我也经常使用框架,你可以在我的例子中看到。在我看来,这是一种很好的方式,可以表明代码尚未完成并延续分页符。
使用您listings
可以设置frame=single
或以下选项之一:none
,,,,,leftline
topline
bottomline
shadowbox
。有关更多详细信息,您可以查看列表文档,我在第 15 页还找到了可能的框架。
这\lstset
是我的常用设置,源代码来自回答我在这里给出了 TeX.sx。
代码
\documentclass{article}
\usepackage{lipsum}
\usepackage{listings}
\usepackage{xcolor}
\definecolor{gray}{rgb}{0.25,0.25,0.25}
\lstset{
basicstyle=\footnotesize,
breakatwhitespace=false,
breaklines=true,
frame=shadowbox,
language=[LaTeX]{TeX},
numbers=left,
numbersep=5pt,
numberstyle=\tiny\color{gray},
title=\lstname
}
\begin{document}
\lipsum[1-3]
\begin{lstlisting}
\documentclass{article}
\usepackage[dvipsnames]{xcolor}
\input{kvmacros}
\begin{document}
\karnaughmap{5}{$f(x_i)$}%
{{$x_1$}{$x_2$}{$x_3$}{$x_4$}{$x_5$}}%
{%
0011011001100110%
0110011001000110%
}%
{%
%Single Ones
\textcolor{Blue}{
\put(2.5,3.5){\oval(0.9,0.9)[]}
\put(7.5,2.5){\oval(0.9,0.9)[]}
\put(0.5,1.5){\oval(0.9,0.9)[]}}
%Pairs of Ones
\put(1,2.5){\oval(1.9,0.9)[]}
%Quadruples of Ones
\textcolor{Yellow}{
\put(4,2){\oval(1.9,1.9)[]}}%
\textcolor{Green}{
\put(6,4){\oval(1.9,1.9)[b]}
\put(6,0){\oval(1.9,1.9)[t]}}%
\textcolor{Red}{
\put(5,0.5){\oval(3.9,0.9)[r]}
\put(3,0.5){\oval(3.9,0.9)[l]}}
\end{lstlisting}
\lipsum[4]
\end{document}
結果