\documentclass{article}
\usepackage{listings}
\usepackage{color}
\begin{document}
\definecolor{light-gray}{gray}{0.95}
\lstset{basicstyle=\ttfamily\footnotesize,
backgroundcolor=\color{light-gray}, xleftmargin=0.7cm,
frame=tlbr, framesep=0.2cm, framerule=0pt,
}
\begin{lstlisting}[mathescape]
k = $\lfloor (10\log n \cdot \log\log n)^{1/3} \rfloor$;
k = $\lfloor (4\log n \cdot \log n)^{1/3} \rfloor$;
\end{lstlisting}
\end{document}
生产
类似问题的答案说“这条线只是观看者的假象”。但这条线出现在两个观看器和各种缩放步骤中。最重要的是,人们可以清楚地看到它1/3
与白线重叠。所以我不再接受它只是一个假象。
如何解决这个问题?是否可以以某种方式在 lstlisting 环境下方放置另一个灰色层,以“吞噬”所有白线?
编辑:有没有一种不需要编辑每一行代码的解决方案?
答案1
该问题与“背景颜色和 mathescape 损坏的列表“。那里的答案解释了原因。简而言之:
背景是通过在每行开头放置彩色规则(钩子EveryLine
)来绘制的。然后排版该行。因此,它listings
不知道该行的最大高度和深度。超出支柱盒高度和深度的所有内容都保持白色。
解决方法\smash
\smash
创建一个盒子,其高度和深度为零:
\documentclass{article}
\usepackage{listings}
\usepackage{color}
\begin{document}
\definecolor{light-gray}{gray}{0.95}
\lstset{basicstyle=\ttfamily\footnotesize,
backgroundcolor=\color{light-gray}, xleftmargin=0.7cm,
frame=tlbr, framesep=0.2cm, framerule=0pt,
}
\begin{lstlisting}[mathescape]
k = $\smash{\lfloor (10\log n \cdot \log\log n)^{1/3}\rfloor}$;
k = $\smash{\lfloor (4\log n \cdot \log n)^{1/3} \rfloor}$;
\end{lstlisting}
\end{document}
通过增加行距来解决
如果您担心线条太窄可能会接触,则可以使用较大的行距。设置\baselineskip
不会basicstyle
产生影响,但\fontsize
或\linespread
可以显式/隐式地\selectfont
工作。以下示例使用\linespread
(参见egreg 的回答)\footnotesize
包含隐含的\selectfont
:
\documentclass{article}
\usepackage{listings}
\usepackage{color}
\begin{document}
\definecolor{light-gray}{gray}{0.95}
\lstset{basicstyle=\ttfamily\linespread{1.15}\footnotesize,
backgroundcolor=\color{light-gray}, xleftmargin=0.7cm,
frame=tlbr, framesep=0.2cm, framerule=0pt,
}
\begin{lstlisting}[mathescape]
k = $\smash{\lfloor (10\log n \cdot \log\log n)^{1/3}\rfloor}$;
k = $\smash{\lfloor (4\log n \cdot \log n)^{1/3} \rfloor}$;
\end{lstlisting}
\end{document}
答案2
这就是我想要的。通过在 listings 环境下方放置一个灰色层(通过 mdframed),每条白线都会消失:
\documentclass{article}
\usepackage[framemethod=tikz]{mdframed}
\usepackage{listings}
\begin{document}
\lstset{language=c++,basicstyle=\linespread{1.1}\ttfamily\footnotesize,
xleftmargin=0.0cm, frame=t, framesep=0.15cm, framerule=0pt, tabsize=4,
showspaces=false, showstringspaces=false,showlines=true,
commentstyle=\ttfamily\footnotesize\color{gray},
}
\begin{mdframed}[backgroundcolor=black!5,leftmargin=0.5cm,hidealllines=true,%
innerleftmargin=0.2cm,innerrightmargin=0.2cm,innertopmargin=-0.72cm,innerbottommargin=-0.10cm]
\begin{lstlisting}[mathescape, caption = This is some code]
k = $\lfloor (10\log n \cdot \log\log n)^{1/3} \rfloor$; //with caption
k = $\lfloor (4\log n \cdot \log n)^{1/3} \rfloor$;
\end{lstlisting}
\end{mdframed}
\begin{mdframed}[backgroundcolor=black!5,leftmargin=0.5cm,skipabove=0.3cm,hidealllines=true,%
innerleftmargin=0.2cm,innerrightmargin=0.2cm,innertopmargin=-0.0cm,innerbottommargin=-0.10cm]
\begin{lstlisting}[mathescape]
k = $\lfloor (10\log n \cdot \log\log n)^{1/3} \rfloor$; //without caption
k = $\lfloor (4\log n \cdot \log n)^{1/3} \rfloor$;
\end{lstlisting}
\end{mdframed}
\end{document}
答案3
您可以增加基线跳过,以便线条不会太近(对于 TeX 来说):
\documentclass{article}
\usepackage{listings}
\usepackage{color}
\begin{document}
\definecolor{light-gray}{gray}{0.95}
\lstset{basicstyle=\linespread{1.1}\ttfamily\footnotesize,
backgroundcolor=\color{light-gray}, xleftmargin=0.7cm,
frame=tlbr, framesep=0.2cm, framerule=0pt,
}
\begin{lstlisting}[mathescape]
k = $\lfloor (10\log n \cdot \log\log n)^{1/3} \rfloor$;
k = $\lfloor (4\log n \cdot \log n)^{1/3} \rfloor$;
\end{lstlisting}
\end{document}