使用 setstretch

使用 setstretch

如果我用来\setspace{0.8}收紧我的列表*我会在行号和代码之间得到一条断线。

\documentclass{article}
\usepackage{listings}
\usepackage{setspace}
\lstset{basicstyle=\footnotesize\ttfamily\selectfont,  breakatwhitespace=false, breakindent=0.5em, breaklines=true, captionpos=b, extendedchars=false, frame=l, keepspaces=true} %this line intentionally long




%and some intentional blanks.
\lstset{  
  numbers=left,
  numbersep=5pt,
  numberstyle=\tiny\ttfamily\selectfont,
  showspaces=false,
  showstringspaces=false,
  showtabs=false,
  stepnumber=2,
  tabsize=2,
} 
\begin{document}
This is a singlespaced listing: 
\lstinputlisting[frame=leftline,firstline=1,lastline=9]{lstline.tex}

This is after \textbackslash setstretch\{0.8\}:
\setstretch{0.8}
\lstinputlisting[frame=leftline,firstline=1,lastline=9]{lstline.tex}
\end{document}

(将其保存为 lstline.tex,它是它自己的示例)

以上代码,渲染

如果断开是正常的,我会接受它作为虚线并继续前进,但事实并非如此(例如,参见非常长的、多次换行的第 3 行)。

在剥离到 MWE 时,我尝试了一些东西,但没有任何帮助。

请注意,这些是多页列表,因此围绕它们的框看起来很奇怪,规则实际上只是将行号与代码分开。

编辑我使用 pdflatex 进行编译(我想我必须这样做)。

*(行距看起来很大拉丁现代打字机轻型浓缩版我通常使用它,但问题与字体无关)

答案1

左框架由与支柱一样高的规则绘制,但\baselinestretch设置为 0.8 时,一些字符高于支柱。

你可以通过改变规则的计算方式来解决,例如

\documentclass{article}
\usepackage{listings}
\usepackage{setspace}
\lstset{basicstyle=\footnotesize\ttfamily\selectfont,  breakatwhitespace=false, breakindent=0.5em, breaklines=true, captionpos=b, extendedchars=false, frame=l, keepspaces=true} %this line intentionally long

\usepackage{etoolbox}
\makeatletter
\patchcmd{\lst@frameInit}
  {\vrule\@width\lst@framerulewidth}
  {\smash{\vrule\@width\lst@framerulewidth\@height1.2\ht\strutbox\@depth1.2\dp\strutbox}}
  {}{}
\makeatother


%and some intentional blanks.
\lstset{  
  numbers=left,
  numbersep=5pt,
  numberstyle=\tiny\ttfamily\selectfont,
  showspaces=false,
  showstringspaces=false,
  showtabs=false,
  stepnumber=2,
  tabsize=2,
} 
\begin{document}
This is a singlespaced listing: 
\lstinputlisting[frame=leftline,firstline=1,lastline=9]{\jobname}

This is after \verb|\setstretch{0.8}|:
\lstset{basicstyle=\footnotesize\ttfamily\linespread{0.8}\selectfont}
\lstinputlisting[frame=leftline,firstline=1,lastline=9]{\jobname}
\end{document}

在此处输入图片描述

但是行距不均匀,我不喜欢loading setspace,所以我把设置改成了等距。

我认为最好最多只减少行距,以便支柱仍然比字符高一点,比如说 0.9:

\documentclass{article}
\usepackage{listings}
\usepackage{setspace}
\lstset{basicstyle=\footnotesize\ttfamily\selectfont,  breakatwhitespace=false, breakindent=0.5em, breaklines=true, captionpos=b, extendedchars=false, frame=l, keepspaces=true} %this line intentionally long



%and some intentional blanks.
\lstset{  
  numbers=left,
  numbersep=5pt,
  numberstyle=\tiny\ttfamily\selectfont,
  showspaces=false,
  showstringspaces=false,
  showtabs=false,
  stepnumber=2,
  tabsize=2,
} 
\begin{document}
This is a singlespaced listing: 
\lstinputlisting[frame=leftline,firstline=1,lastline=9]{\jobname}

This is after \verb|\setstretch{0.9}|:
\lstset{basicstyle=\footnotesize\ttfamily\linespread{0.9}\selectfont}
\lstinputlisting[frame=leftline,firstline=1,lastline=9]{\jobname}
\end{document}

在此处输入图片描述

相关内容