我使用一个foo
需要bar
带有一些选项的包的包。现在,假设我需要bar
加载一组不同的选项。不幸的是,当我尝试bar
自己加载时,通常会出现Option clash for package bar
LaTeX 错误。最小示例:
\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
包括\ResetPreventPackageFromLoading
scrlfile
包。最小示例:
\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}
在文档中使用,效果如何?由于存在全局选项,静默选项仍将被加载。