我正在尝试使用@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}