使用 \AfterPackage 在其他包之后加载包

使用 \AfterPackage 在其他包之后加载包

我想将包组合在一起(在实际文档中,我加载了更多包)并想使用类似\AfterPackageKOMA-Script 的命令解决包的排序问题。

cleveref我使用这个解决方案在包之后加载包hyperref

\documentclass{scrbook}
\usepackage{varioref} % before cleveref
\AfterPackage{hyperref}{\usepackage{cleveref}}
\usepackage{hyperref}

\begin{document}
\tableofcontents\chapter{test}
\subsection{variable references using vref}
\label{sec:references:vref}
\newpage
Some text which contains a vref reference
to section \vref{sec:references:vref}.
\end{document}

但是引用始终找不到。如果我cleveref在之后加载硬编码hyperref

\usepackage{varioref} % before cleveref
%\AfterPackage{hyperref}{\usepackage{cleveref}}
\usepackage{hyperref}
\usepackage{cleveref}

一切按预期进行。

为什么\AfterPackage它没有按照我期望的那样运行?

答案1

hyperref似乎确实使用了一些\AtEndOfPackage技巧。正常版本的\AfterPackage加载cleveref hyperref, 但上面提到的诡计。为了确保仅在完成其任务cleveref后才加载,请使用“感叹号版本” 。hyperref\AfterPackage!{hyperref}{\usepackage{cleveref}}

\documentclass{scrbook}
\usepackage{varioref} % before cleveref
\AfterPackage!{hyperref}{\usepackage{cleveref}}
\usepackage{hyperref}

\begin{document}
\tableofcontents\chapter{test}
\subsection{variable references using vref}
\label{sec:references:vref}
\newpage
Some text which contains a vref reference
to \vref{sec:references:vref}.
\end{document}

编辑:如果你发布它们\AfterPackage!{hyperref}{\usepackage{cleveref}},实际上都\AfterAtEndOfPackage{hyperref}{\usepackage{cleveref}}不起作用 \usepackage{hyperref}我个人的cleveref解决方案与序言中的位置无关,是

\usepackage{etoolbox}
\AtEndPreamble{\usepackage{cleveref}}

答案2

可以使用不同的命令来解决:\AfterAtEndOfPackage。不知何故,\AfterPackage变体在包的上下文中执行代码,这不是我想要的。这在 koma script 的发行说明中有描述:http://www.komascript.de/release3.09(但是是德语)。

相关内容