listings
当我更改背景颜色时,代码块中出现水平间隙。此最小工作示例代码和屏幕截图演示了此问题。
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{
basicstyle=\linespread{0.67}\ttfamily,
backgroundcolor=\color{gray}
}
\begin{document}
\begin{lstlisting}
n := 42;
for i in [1,2,3,4,5] do
n := n+i;
od;
\end{lstlisting}
\end{document}
我知道 ⅔ 的行距太荒谬了,我只是想用这个例子来强调这个问题。真正的问题是尽管线宽为 1,但这些间隙仍然会出现,尽管非常微弱!
这是怎么回事?我该如何解决?
答案1
您可以将lstlistings
其包装起来tcolorbox
。
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\usepackage[many]{tcolorbox}
\tcolorboxenvironment{lstlisting}{
spartan,
frame empty,
boxsep=0mm,
left=1mm,right=1mm,top=-1mm,bottom=-1mm,
colback=gray!45,
}
\lstset{
basicstyle=\linespread{0.67}\ttfamily,
}
\begin{document}
\begin{lstlisting}
n := 42;
for i in [1,2,3,4,5] do
n := n+i;
od;
\end{lstlisting}
\end{document}
答案2
这不是我最喜欢的解决方案,因为它涉及包含另一个包并将每个lstlisting
环境包装在另一个环境中,但是Ulrike Fischer 在评论中的建议使用tcolorbox
作品,它为代码块添加了令人愉悦的边距。
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{
basicstyle=\linespread{0.67}\ttfamily,
%backgroundcolor=\color{gray},
}
\usepackage{tcolorbox}
\newtcolorbox{tcolorbox-code}{%
colback=gray, %
colframe=gray, %
sharp corners %
}
\begin{document}
\begin{tcolorbox-code}
\begin{lstlisting}
n := 42;
for i in [1,2,3,4,5] do
n := n+i;
od;
\end{lstlisting}
\end{tcolorbox-code}
\end{document}
答案3
我找到了这个解决方法。我们可以给线条添加框架,并将框架的边框宽度设置为 0。它帮我消除了线条之间的垂直间隙。
\usepackage{listings}
\lstset{
basicstyle=\small\ttfamily,
columns=flexible,
breaklines=true,
backgroundcolor=\color{lightgray},
frame=ltb,
framerule=0pt,
}