![如何避免‘包选项冲突...’错误?](https://linux22.com/image/251215/%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%E2%80%98%E5%8C%85%E9%80%89%E9%A1%B9%E5%86%B2%E7%AA%81...%E2%80%99%E9%94%99%E8%AF%AF%EF%BC%9F.png)
我使用一个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}
在文档中使用,效果如何?由于存在全局选项,静默选项仍将被加载。