我正在使用 排版文档amsbook
。在文档中,我想使用该listings
包打印一些计算机代码。但是,事实证明选项backgroundcolor
和frame
会导致输出代码行之间出现额外的(?)空格。额外的空间比 略小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
\normallineskiplimit
1pt
当文档包含大量内联数学运算时,这一点很有必要;否则很有可能出现“崩溃”的行。这正是 ams 文档类所期望的。
latex.ltx
定义\normalbaselines
为
\def\normalbaselines{\lineskip\normallineskip
\baselineskip\normalbaselineskip \lineskiplimit\normallineskiplimit}
反过来,该listings
计划也适用\normalbaselines
。
需要\normallineskiplimit=0pt
为列表进行设置。
我倾向于设定它仅有的在列表的持续时间内,但我还没有想出如何巧妙地做到这一点。(在全球范围内做到这一点很简单,但这是否是一个好主意取决于文档的性质。)
编辑:jubobs 提到的两个钩子都不适用于我,但是这个确实适用:
\makeatletter
\lst@AddToHook{PreSet}{\normallineskiplimit=0pt}
\makeatother