12

I just made a code listing with a "zebra effect", just like here: Creating a zebra effect using listings

But afterwards, the line numbers at the left side of the listing don't appear any more.

This is some of the code that makes the numbers dissapear:

\documentclass[a4paper, 10pt]{article}
\usepackage[T1]{fontenc}
\usepackage{beramono}
                            % monospaced font with bold variant

\usepackage[usenames,dvipsnames]{xcolor}
\colorlet{keyword}  {blue!100!black!80}
\colorlet{comment}  {green!70!black!100}
\colorlet{STD}        {Yellow}

\usepackage{color}
\usepackage{xcolor}
\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}

\usepackage[top     =   2.5 cm,
        bottom  =   2.5 cm, 
        left    =   2.5 cm, 
        right   =   2.5 cm]{geometry}

\usepackage{listings}

\newcommand\realnumberstyle[1]{}
\makeatletter
\newcommand{\zebra}[3]{%
    {\realnumberstyle{#3}}%
    \begingroup
    \lst@basicstyle
    \ifodd\value{lstnumber}%
        \color{#1}%
    \else
        \color{#2}%
    \fi
        \rlap{\hspace*{\lst@numbersep }%
        \color@block{\linewidth}{\ht\strutbox}{\dp\strutbox}%
        }%
    \endgroup
}
\makeatother


\lstset
{                                                           %
    language            =   C,                      % the     language of the code
    basicstyle          =   \ttfamily\footnotesize,     % the size of the fonts that are used for the code
    numbers             =left  ,                    % where to put the line-numbers
    numberstyle         =   \tiny\color{black},         % the style that is used for the line-numbers
    stepnumber          =   1,                          % the step between two line-numbers. If it's 1, each line 
                                                            % will be numbered
    numbersep           =   25pt,                       % how far the line-numbers are from the code
    backgroundcolor     =   \color{white},              % choose the background color. You must add \usepackage{color}
    showspaces          =   false,                      % show spaces adding particular underscores
    showstringspaces    =   false,                      % underline spaces within strings
    showtabs            =   false,                      % show tabs within strings adding particular underscores
    frame               =   single,                     % adds a frame around the code
    rulecolor           =   \color{black},              % if not set, the frame-color may be changed on line-breaks within not-black text (e.g. comments (green here))
    tabsize             =   4,                          % sets default tabsize to 4 spaces
    captionpos          =   b,                          % sets the caption-position to bottom
    breaklines          =   true,                       % sets automatic line breaking
    breakatwhitespace   =   false,                      % sets if automatic breaks should only happen at whitespace
    title               =   \lstname,                   % show the filename of files included with \lstinputlisting;
                                                            % also try caption instead of title
    keywordstyle        =   [1]\color{keyword}
                                \bfseries,                  % keyword style
    keywordstyle        =   [2]\color{STD}
                        \bfseries,                  % keyword style
    commentstyle        =   \color{comment},            % comment style
    stringstyle         =   \color{mauve},              % string literal style
    escapeinside        =   {\%*}{*)},                  % if you want to add LaTeX within your code
    %morekeywords       =   [1]{*, 
    %                           bla,
    %                           },                      % keywords to the set
    %morekeywords       =   [2]{
    %                           bla,
    %                           },                      % keywords to the set
    %morecomment            =   [l]//,                  % if you want to add comments to the set
    deletekeywords      =   {...}                   % if you want to delete keywords from the given language
}    




\begin{document}

% version with number highlighting "zebra"-style
% this is already part of the first answer
\lstinputlisting[firstline = 0, lastline = 100,numberstyle=\zebra{gray!20}{lightgray!15}{}]{test.txt}

% version without: missing third brackets {}
\lstinputlisting[firstline = 0, lastline = 100,numberstyle=\zebra{gray!20}{lightgray!15}]{test.txt}


\end{document}
  • 2
    Welcome to TeX.SX! Can you supplement the code with a full (minimal) example from \documentclass to \end{document}? – egreg Jan 20 '14 at 18:55
  • i've edited it to the code which i'm using to test the listing. the original code and the current solution are in it. – Faekynn Jan 21 '14 at 16:37
14

If you don't want to use the package lstlinebgrd, this is what you can do with the code borrowed from that answer.

The command \zebra takes three arguments. If you use only two as in that answer

numberstyle=\zebra{green!35}{yellow!35}

you don't get the line numbers printed. To have them you have to give a third empty argument like

numberstyle=\zebra{green!35}{yellow!35}{}

MWE (partially borrowed from the linked answer):

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage{listings}
\usepackage{xcolor}

\newcommand\realnumberstyle[1]{}

\makeatletter
\newcommand{\zebra}[3]{%
    {\realnumberstyle{#3}}%
    \begingroup
    \lst@basicstyle
    \ifodd\value{lstnumber}%
        \color{#1}%
    \else
        \color{#2}%
    \fi
        \rlap{\hspace*{\lst@numbersep}%
        \color@block{\linewidth}{\ht\strutbox}{\dp\strutbox}%
        }%
    \endgroup
}
\makeatother


\begin{document}

\begin{lstlisting}[language=C,basicstyle=\ttfamily,numberstyle=\zebra{green!35}{yellow!35}{},numbers=left]
/**
* Prints Hello World.
**/
#include <stdio.h>

int main(void) {
   printf("Hello World!");
   return 0;
}
\end{lstlisting}

\end{document} 

Output:

enter image description here

If you don't want to give the third argument, replace the lines

\newcommand\realnumberstyle[1]{}

\makeatletter
\newcommand{\zebra}[3]{%
    {\realnumberstyle{#3}}%
    \begingroup
    \lst@basicstyle
    \ifodd\value{lstnumber}%
        \color{#1}%
    \else
        \color{#2}%
    \fi
        \rlap{\hspace*{\lst@numbersep}%
        \color@block{\linewidth}{\ht\strutbox}{\dp\strutbox}%
        }%
    \endgroup
}
\makeatother

with

\makeatletter
\newcommand{\zebra}[2]{%
    \begingroup
    \lst@basicstyle
    \ifodd\value{lstnumber}%
        \color{#1}%
    \else
        \color{#2}%
    \fi
        \rlap{\hspace*{\lst@numbersep}%
        \color@block{\linewidth}{\ht\strutbox}{\dp\strutbox}%
        }%
    \endgroup
}
\makeatother

and you will have the line numbers printed only using things like

numberstyle=\zebra{green!35}{yellow!35}

EDIT

If I was you, I would have a look at the package lstlinebgrd, but if you still want to use some custom code, the following should meet your settings. Try it.

\makeatletter
\newcommand{\zebra}[2]{%
    \begingroup
    \lst@basicstyle
    \ifodd\value{lstnumber}%
        \color{#1}%
    \else
        \color{#2}%
    \fi
    \ifnum\value{lstnumber}>9
        \rlap{\hspace*{\lst@numbersep}\hspace*{1.14em}%
        \color@block{\linewidth}{\ht\strutbox}{\dp\strutbox}%
        }%
    \else
        \rlap{\hspace*{\lst@numbersep}\hspace*{0.6em}%
        \color@block{\linewidth}{\ht\strutbox}{\dp\strutbox}%
        }%
    \fi
    \endgroup
}
\makeatother

Note that

  • @Jubobs Thanks for the appreciation. I've added a solution which doesn't require the empty argument. – karlkoeller Jan 20 '14 at 19:44
  • Thank you! It's already better (as there ARE numbers now:), but i've still got two problems: First, the background color now goes out of my frame. Second, with a number higher then nine, the background color has got a step. i just made a pdf: dropbox.com/s/x58cepcbt23f3it/Syntax.pdf – Faekynn Jan 21 '14 at 16:41
  • 1
    @user44467 see the edit. – karlkoeller Jan 21 '14 at 17:23
  • very good. now it works fine. i have a closer look at the named package, too. :) – Faekynn Jan 21 '14 at 18:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.