2010-07-30 9 views
8

Estoy tratando de crear un entorno literal con un fondo de color y que puede abarcar varias páginas (por lo que usar un colorbox no es una opción). Parecía que el paquete de listados era una buena forma de hacerlo, pero el fondo se dibuja una línea a la vez, de modo que, cuando veo el PDF, veo molestas "rayas" blancas entre las líneas, así como también norma marco invisible (0pt) no se que se puede extraer:Rayas en el color de fondo dibujado por el paquete de listados

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

Aquí está el código mínimo que usé para crear el resultado que se muestra en la imagen:

\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} 

¿hay alguna solución contra estos ' rayas'?

+0

Tema aparte. Pertenece a tex.SE –

Respuesta

2

Una solución sencilla sería la de no especificar un color para los propios anuncios, poner en su lugar utilizar un \colorbox, pero para que eso funciona, ya sea que tenga que utilizar \lstinputlisting o almacenar el resultado en una caja utilizando, por ejemplo, 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}} 

ACTUALIZACIÓN: Sin embargo, una solución más bella es utilizar Donald Arseneau's framed.sty, que también permite que el código fuente para abarcar varias páginas.

\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

El problema es que, al envolverlo dentro de un \ colorbox, el entorno de la lista baja pierde la posibilidad de abarcar varias páginas. –

+2

Hola, grddev. Me gusta su solución usando el paquete 'framed'. Un problema es que los números de línea y los subtítulos de lstlistings están ocluidos, en todo o en parte, por el cuadro sombreado. ¿Conoces una solución temporal? Gracias. – user001

Cuestiones relacionadas