如何避免‘包选项冲突...’错误?

如何避免‘包选项冲突...’错误?

我使用一个foo需要bar带有一些选项的包的包。现在,假设我需要bar加载一组不同的选项。不幸的是,当我尝试bar自己加载时,通常会出现Option clash for package barLaTeX 错误。最小示例:

\documentclass{article}

\usepackage{filecontents}

\begin{filecontents}{foo.sty}
\ProvidesPackage{foo}
\RequirePackage[noisy]{bar}
\end{filecontents}

\begin{filecontents}{bar.sty}
\ProvidesPackage{bar}
\DeclareOption{noisy}{\PackageWarning{bar}{I'm noisy}}
\DeclareOption{silent}{\PackageWarning{bar}{I'm silent}}
\ProcessOptions*
\end{filecontents}

%% \usepackage[silent]{bar}

\usepackage{foo}

\usepackage[silent]{bar}

\begin{document}

\end{document}

我能做些什么?

答案1

在理想情况下,LaTeX 消息Option clash for package …仅表示错误,因此不应忽略,而应采取适当措施。尽管如此,我的经验是,在现实中,有些情况下,规避此错误是无害的,甚至是有利的。用于此目的的多功能工具\PreventPackageFromLoading包括\ResetPreventPackageFromLoadingscrlfile包。最小示例:

\documentclass{article}

\usepackage{filecontents}

\begin{filecontents}{foo.sty}
\ProvidesPackage{foo}
\RequirePackage[noisy]{bar}
\end{filecontents}

\begin{filecontents}{bar.sty}
\ProvidesPackage{bar}
\DeclareOption{noisy}{\PackageWarning{bar}{I'm noisy}}
\DeclareOption{silent}{\PackageWarning{bar}{I'm silent}}
\ProcessOptions*
\end{filecontents}

\usepackage{scrlfile}

\PreventPackageFromLoading{bar}

\usepackage{foo}

\ResetPreventPackageFromLoading

\usepackage[silent]{bar}

\begin{document}

\end{document}

答案2

silent将其声明为全局选项\documentclass[silent]{article},然后\usepackage{bar}在文档中使用,效果如何?由于存在全局选项,静默选项仍将被加载。

相关内容