我刚刚制作了一个带有“斑马效果”的代码清单,就像这里一样:使用列表创建斑马效果
但此后,列表左侧的行号不再出现。
这是使数字消失的一些代码:
\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
注意