在 amsbook 中加载软件包列表时,可以看到额外的行间空格

在 amsbook 中加载软件包列表时,可以看到额外的行间空格

我正在使用 排版文档amsbook。在文档中,我想使用该listings包打印一些计算机代码。但是,事实证明选项backgroundcolorframe会导致输出代码行之间出现额外的(?)空格。额外的空间比 略小1pt。这是一个最小工作示例:

在此处输入图片描述

%\documentclass{article}  %%% Works fine %%%
\documentclass{amsbook}
\usepackage{xcolor}
\usepackage{listings}
\lstset{
frame=l,
backgroundcolor=\color{gray}
}
\begin{document}
\begin{lstlisting}
a = b
c = d
\end{lstlisting}
\end{document}

非常感谢任何关于从哪里开始寻找错误的信息。

编辑:根据下面 Barbara 的回答,我添加了以下内容:

\let\oldlstinputlisting\lstinputlisting%
\renewcommand{\lstinputlisting}[2][]{%
  \normallineskiplimit=0pt%
  \oldlstinputlisting[#1]{#2}%
  \mbox{}%
}

之后\usepackage{listings}。这符合我的目的。

答案1

问题是将和amsbook设置为。\lineskiplimit\normallineskiplimit1pt

当文档包含大量内联数学运算时,这一点很有必要;否则很有可能出现“崩溃”的行。这正是 ams 文档类所期望的。

latex.ltx定义\normalbaselines

\def\normalbaselines{\lineskip\normallineskip
  \baselineskip\normalbaselineskip \lineskiplimit\normallineskiplimit}

反过来,该listings计划也适用\normalbaselines

需要\normallineskiplimit=0pt为列表进行设置。

我倾向于设定它仅有的在列表的持续时间内,但我还没有想出如何巧妙地做到这一点。(在全球范围内做到这一点很简单,但这是否是一个好主意取决于文档的性质。)

编辑:jubobs 提到的两个钩子都不适用于我,但是这个确实适用:

\makeatletter
\lst@AddToHook{PreSet}{\normallineskiplimit=0pt}
\makeatother

在此处输入图片描述

相关内容