代码列表上方和下方有额外的空白行

代码列表上方和下方有额外的空白行

我正在尝试使用@egreg的答案来这个问题关于如何通过软件包获得统一的背景颜色listings。在我的 MSE 中,我使用的是艾克玛特类来重现原始问题中的问题(从而tcolorbox首先激发我使用),但问题也出现了article

问题是,使用tcolorbox提供列表环境会在列出的代码上方和下方产生额外的“填充”空白行,如下面的第二个清单所示:

在此处输入图片描述

该解决方案还有另外两个问题tcolorbox:行号的位置与普通lstlistings版本不同,阴影区域的宽度没有完全延伸到列的边缘。(后者问题不大。)

\documentclass{acmart}

\usepackage{xcolor}
\usepackage{listings}
\usepackage[many]{tcolorbox}
\tcbuselibrary{listings}

\definecolor{verylightgray}{gray}{0.9}

\newtcblisting{graylstlisting}[1][]
{
  spartan,
  frame empty,
  boxsep=0mm,
  listing only,
  colback=verylightgray,
  listing options={
    #1
  },
}

\begin{document}

\begin{lstlisting}[
  numbers=left,
  backgroundcolor=\color{verylightgray}
]
f g h
\end{lstlisting}

\begin{graylstlisting}[
  numbers=left,
  backgroundcolor=\color{verylightgray}
]
f g h
\end{graylstlisting}

\end{document}

有没有办法使用该tcolorbox解决方案来解决列表背景问题,而不会引入这些其他差异?

答案1

\documentclass{article}

\usepackage{xcolor}
\usepackage{listings}
\usepackage[many]{tcolorbox}
\tcbuselibrary{listings}

\definecolor{verylightgray}{gray}{0.9}

\newtcblisting{graylstlisting}[1][]
{
  spartan,
  frame empty,
  boxsep=0mm,
  listing only,
  colback=verylightgray,
  top = 0pt, %<-
  bottom = 0pt,%<- 
  left=0pt,%<- 
  listing options={
   numbersep=10pt,% <-
   xleftmargin=0pt,%<-
   aboveskip = 0pt,%<-
   belowskip = 0pt,%<-
    #1
  },
}

\begin{document}

\begin{lstlisting}[
  numbers=left,
  backgroundcolor=\color{verylightgray}
]
f g h
\end{lstlisting}

\begin{graylstlisting}[
  numbers=left,
  backgroundcolor=\color{verylightgray}
]
f g h
\end{graylstlisting}

\end{document}

在此处输入图片描述

相关内容