2010-07-30 67 views
8

我想创建一个带有彩色背景的逐字环境,并且可以跨页面(因此使用colorbox不是选项)。似乎上市包是一个很好的方式,但是背景是一次绘制一条线的,这样,当我查看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} 

有任何解决方法对这些“条纹?

+0

偏离主题。属于tex.SE – 2013-06-05 13:05:34

回答

2

一个简单的解决方法是不为列表本身指定颜色,而是使用\colorbox,但为了使其工作,您需要使用\lstinputlisting或使用例如\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}} 

UPDATE:然而,更漂亮的解决方案是使用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} 
+0

问题是,通过将它包装在\ colorbox中,lstlisting环境失去了跨页面的可能性。 – 2010-08-04 04:02:37

+2

嗨grddev。我喜欢使用'framed'软件包的解决方案。一个问题是行号和列表标题全部或部分被阴影框遮挡住。你知道解决方法吗?谢谢。 – user001 2012-04-13 02:44:17