在列表包裹画的背景颜色的条纹

时间:2010-07-30 17:54:34

标签: latex listings

我正在尝试创建一个带有彩色背景的逐字环境,它可以跨越页面(因此使用颜色框不是一种选择)。似乎列表包是一个很好的方法,但背景是一次绘制一行,这样,当我查看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}

是否有针对这些'条纹'的解决方法?

1 个答案:

答案 0 :(得分:2)

一个简单的解决方法是不为列表本身指定颜色,而是使用\colorbox,但要使用它,您需要使用\lstinputlisting或将结果存储在使用例如的盒子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's 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}