答案1
这里的问题是你需要调用\BeforePackage{}
和相关命令前包实际上被加载了,这样钩子才能工作。这就是 Marco 的建议试图做的。
不幸的是,您无法使用加载附加包,\BeforePackage{}
因为当lipics
最终请求时hyperref
,加载float
将调用\ProvidesPackage{float}
声明并且 LaTeX 认为提供了错误的包。
我发现最好使用\AfterPackage
或\AfterClass
。为什么不在使用的documentclassfloat
之后立即加载包呢?article
lipics
\RequirePackage{scrlfile}
\AfterClass{article}{
\RequirePackage{float}
}
\documentclass[english]{lipics}
\begin{document}
Hi
\end{document}
如果你真的想\BeforePackage{}
工作,你可以使用以下技巧
\BeforePackage{hyperref}{
\let\oldProvidesPackage\ProvidesPackage % Save original definition
\def\ProvidesPackage#1[#2]{ % Redefine (simply)
\oldProvidesPackage#1[#2] % Call original \ProvidesPackage
\let\ProvidesPackage\oldProvidesPackage % restore original definitions
\let\oldProvidesPackage\relax
\RequirePackage{float} % Now load float
}
}
这暂时重新定义\ProvidesPackage
为首先调用原始版本(它将告诉 LaTeX 正在按预期提供),然后在恢复旧定义后hyperref
加载。float