Listings package – avoid white lines in between lines of code

colorlistings

I'm using Listings to display some JavaScript code. Here are my settings, which I changed a little from those found here: https://mysnippets443.wordpress.com/2015/11/28/latex-insert-javascript-code-with-lstlisting-package/

\usepackage{listings}
\usepackage{xcolor} %use color
\definecolor{mygreen}{rgb}{0,0.6,0}
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
\definecolor{mymauve}{rgb}{0.58,0,0.82}
\definecolor{darkyellow}{RGB}{247, 127, 0}
\definecolor{niceblue}{RGB}{0, 150, 199}
\definecolor{pink}{RGB}{247, 37, 133}
 
%Customize a bit the look
\lstset{ %
upquote=true,
backgroundcolor=\color{mygray}, % choose the background color; you must add \usepackage{color} or \usepackage{xcolor}
basicstyle=\footnotesize, % the size of the fonts that are used for the code
breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
breaklines=false, % sets automatic line breaking
captionpos=b, % sets the caption-position to bottom
commentstyle=\color{mygreen}, % comment style
deletekeywords={...}, % if you want to delete keywords from the given language
escapeinside={\%*}{*)}, % if you want to add LaTeX within your code
extendedchars=true, % lets you use non-ASCII characters; for 8-bits encodings only, does not work with UTF-8
frame=single, % adds a frame around the code
keepspaces=true, % keeps spaces in text, useful for keeping indentation of code (possibly needs columns=flexible)
keywordstyle=\color{niceblue}, % keyword style
% language=Octave, % the language of the code
morekeywords={*,...}, % if you want to add more keywords to the set
numbers=left, % where to put the line-numbers; possible values are (none, left, right)
numbersep=5pt, % how far the line-numbers are from the code
numberstyle=\tiny\color{mygray}, % the style that is used for the line-numbers
rulecolor=\color{mygray}, % if not set, the frame-color may be changed on line-breaks within not-black text (e.g. comments (green here))
showspaces=false, % show spaces everywhere adding particular underscores; it overrides 'showstringspaces'
showstringspaces=false, % underline spaces within strings only
showtabs=false, % show tabs within strings adding particular underscores
stepnumber=1, % the step between two line-numbers. If it's 1, each line will be numbered
stringstyle=\color{mymauve}, % string literal style
tabsize=2, % sets default tabsize to 2 spaces
title=\lstname % show the filename of files included with \lstinputlisting; also try caption instead of title
}
%END of listing package%
 
\definecolor{darkgray}{rgb}{.4,.4,.4}
\definecolor{purple}{rgb}{0.65, 0.12, 0.82}
 
%define Javascript language
\lstdefinelanguage{JavaScript}{
keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break},
keywordstyle=\color{niceblue}\bfseries,
ndkeywords={class, export, boolean, throw, implements, import, this},
ndkeywordstyle=\color{darkgray}\bfseries,
identifierstyle=\color{black},
sensitive=false,
comment=[l]{//},
morecomment=[s]{/*}{*/},
commentstyle=\color{pink}\ttfamily,
stringstyle=\color{darkyellow}\ttfamily,
morestring=[b]',
morestring=[b]"
}
 
\lstset{
language=JavaScript,
extendedchars=true,
basicstyle=\footnotesize\ttfamily,
showstringspaces=false,
showspaces=false,
numbers=left,
numberstyle=\footnotesize,
numbersep=9pt,
tabsize=2,
breaklines=false,
showtabs=false,
captionpos=b,
upquote=true,
}

This is the output:
enter image description here

I don't want those white / grey lines to show in between the lines of code. I've played around with the settings but can't find out how to remove them, can anyone suggest a way?

Best Answer

The white lines are an artifact of the PDF viewer (as long as the font size of the numbers is not larger than the basic style) enhanced by the dark background style.

For example, they are not visible at all with Adobe Acrobat at 400% magnification. Barely visible with Sumatra, they will not change with further magnifications.

Acrobat 4x

a

Sumatra 4x

4x

UPDATE

To make all the artifacts disappear one could always add another background layer, although I don't think it's worth the trouble, except perhaps before publishing the pdf.

Using mdframed for example, with

\usepackage[framemethod=tikz]{mdframed}

\begin{document}
    
\begin{mdframed}[backgroundcolor=black!50,
    hidealllines=true,%
    innerleftmargin=0.1cm,
    innerrightmargin=0.1cm,
    innertopmargin=-0.1cm,
    innerbottommargin=-0.8cm]   
    \begin{lstlisting}[language=JavaScript]
        var foo = function(){
            console.log('foo');
        }
        foo();
    \end{lstlisting}

\end{mdframed}

See https://tex.stackexchange.com/a/129651/161015

SUMATRA again

sx