使用列表:“斑马效果”和行号

使用列表:“斑马效果”和行号

我刚刚制作了一个带有“斑马效果”的代码清单,就像这里一样:使用列表创建斑马效果

但此后,列表左侧的行号不再出现。

这是使数字消失的一些代码:

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

答案1

如果您不想使用该包lstlinebgrd,您可以使用从该答案借用的代码来执行此操作。

该命令\zebra需要三个参数。如果您只使用两个参数,如该答案中所述

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

你没有打印出行号。要获得它们,你必须给出第三个空参数,例如

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

MWE(部分借用自链接答案):

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

输出:

在此处输入图片描述

如果你不想给出第三个参数,请将以下行替换

\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

\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

并且你将只使用类似的东西来打印行号

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

编辑

如果我是你,我会看看包裹lstlinebgrd,但如果您仍想使用一些自定义代码,则以下内容应该可以满足您的设置。 试一试。

\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

注意

相关内容