9

我正在尝试创建一个带有彩色背景并且可以跨页面的逐字环境(因此不能选择使用颜色框)。似乎列表包是实现它的好方法,但背景一次绘制一条线,这样,当我查看 PDF 时,我看到行之间以及在哪里出现恼人的白色“条纹”不绘制不可见(0pt)框架规则:

http://a.imageshack.us/img202/9928/lststrips.png

这是我用来创建图像中显示的输出的最小代码:

\documentclass{minimal}
\usepackage[pdftex]{xcolor}
\usepackage[a4paper,hmargin=6cm]{geometry}
\usepackage{listings}
\lstset{backgroundcolor=\color{gray},
  frame=single, framerule=0pt, framesep=5pt}
\begin{document}

\begin{lstlisting}
 if (a < b)
 {
    printf("A is smaller than  B!\n");
 }
 a = b;
\end{lstlisting}

\end{document}

有没有针对这些“条纹”的解决方法?

4

1 回答 1

2

一个简单的解决方法是不为列表本身指定颜色,而是使用 a \colorbox,但要使其正常工作,您需要使用\lstinputlisting或将结果存储在使用 eg 的框中lrbox

\newbox{\mybox}
\begin{lrbox}{\mybox}
\begin{minipage}{\linewidth}
\begin{lstlisting}
 if (a < b)
 {
    printf("A is smaller than  B!\n");
 }
 a = b;
\end{lstlisting}
\end{minipage}
\end{lrbox}
\colorbox{gray}{\usebox{\mybox}}

更新:然而,一个更漂亮的解决方案是使用Donald Arseneau 的 framed.sty,它还允许源代码跨越多个页面。

\documentclass{minimal}
\usepackage[pdftex]{xcolor}
\usepackage[a4paper,hmargin=6cm]{geometry}
\usepackage{listings}
\usepackage{framed}
\begin{document}

\definecolor{shadecolor}{named}{gray} 
\begin{shaded}
\begin{lstlisting}
 if (a < b)
 {
    printf("A is smaller than  B!\n");
 }
 a = b;
\end{lstlisting}
\end{shaded}

\end{document}
于 2010-08-03T15:40:01.783 回答