代码包中的列表生成背景色条纹

10
我正在尝试创建一个带有彩色背景并可跨页的抄录环境(因此不使用colorbox)。看起来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}

有什么方法可以对抗这些“条纹”吗?

离题了,应该发到tex.SE上去。 - Cole Tobin
LaTeX 从何时开始成为这里的离题话题了... - Michael Mrozek
它在tex.SE上:https://tex.stackexchange.com/questions/403147/. - RikH
1个回答

3
一个简单的解决方法是不为列表本身指定颜色,而是使用\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的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}

1
问题在于,通过将其包装在\colorbox中,lstlisting环境失去了跨越页面的可能性。 - Eduardo Dobay
2
嗨grddev。我喜欢你使用framed包的解决方案。一个问题是行号和lstlistings标题被阴影框完全或部分遮挡。你知道有什么解决方法吗?谢谢。 - user001

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接