2010-07-30 58 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