savetrees 和 natbib 不能同时使用吗?

savetrees 和 natbib 不能同时使用吗?

我很困惑。请看下面的简单代码:

\documentclass{article}

\usepackage{savetrees}

\usepackage{natbib}

\begin{document}

    aaa

\end{document}

这将返回“未定义的控制序列。\begin{document}”。如果我删除其中一个包,一切就会恢复正常。但我如何才能同时使用这两个包呢?

答案1

savetrees调整环境中元素的间距和字体thebibliography以节省空间(或树)。这些包括\bibfont\bibitemsep。它检查是否存在\bibfont,如果是,则重新定义\bibitemsep为几乎不存在:

\AtBeginDocument{%
  \@ifundefined{bibfont}{}{%
    \renewcommand*{\bibfont}{\normalfont\small}%
    \bibitemsep=0pt plus 2pt\relax
  }%
}%

以上所有操作均在 处完成\begin{document},因此才会在此处抛出错误,因为natbib定义了一个\bibfont但没有\bibitemsep。错误在于savetrees只假设biblatex定义了\bibfont。但是,natbib也一样。以下是摘录自savetrees文档

如果biblatex加载了该包,我们将使用 BibLaTeX 的机制将字体大小减小到\small\bibfont)并省略书目条目之间的空行(\bibitemsep)。

解决这个问题的方法是将其定义\bibitemsep为长度或尺寸:

\documentclass{article}

\usepackage{natbib}

\newlength\bibitemsep
\usepackage{savetrees}

\begin{document}

% Your masterpiece here...

\end{document}

相关内容