我想将包组合在一起(在实际文档中,我加载了更多包)并想使用类似\AfterPackage
KOMA-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(但是是德语)。