覆盖包“geometry”中的定义,同时避免选项冲突

覆盖包“geometry”中的定义,同时避免选项冲突

我习惯在 .sty 文件中定义 CTAN 包的标准集合,并在所有文档中使用\usepackage{MyUseCTANPackages}文档前言中的语句调用该文件。有时,我不想使 MyUseCTANPackages.sty 无效,而是想覆盖在那里定义的包,在本例中geometry是定义不同边距的包,但这会导致! LaTeX Error: Option clash for package geometry。有没有办法覆盖 MyUseCTANPackages.sty 中包定义中的内容geometry,以及对其他包也同样如此?

MyUseCTANPackages.sty 包含大量其他包,

...
\usepackage[a4paper, vmargin=2.0cm, outer=1.5cm, inner=1.5cm,marginparwidth=2.0cm, marginparsep=0.5cm]{geometry}
...
\documentclass{article}
% RN. 20 May 2023
% BRIEF DESCRIPTION:
%   overriding package definitions in package geometry.

%=======================
\usepackage{MyUseCTANPackages}
% attempting to override the definition contained in MyUseCTANPackages.sty:
%\usepackage[a4paper, vmargin=2.0cm, outer=0.5cm, inner=1.5cm]{geometry}

\begin{document}

sdf asgadf gadf g DGRFe rg ERG edg RSG drg G edgRGedtg G gE TG etrgERGetr gERGer g ERGe rgERG erg ERG erg RG g G rg ERG  rg RG reg RG 

\end{document}

答案1

您可以通过这种方式在 MyUseCTANPackages 中加载几何图形

\ifdefined\MyGeometryOptions
\expandafter\usepackage\MyGeometryOptions{geometry}
\else
\usepackage[a4paper, vmargin=2.0cm, outer=1.5cm, inner=1.5cm,marginparwidth=2.0cm, marginparsep=0.5cm]{geometry}
\fi

然后做

\def\MyGeometryOptions{[a4paper, vmargin=2.0cm, outer=0.5cm, inner=1.5cm]}
\usepackage{MyUseCTANPackages}

如果需要的话。

这里的理由是,相对于其他包的加载顺序很重要(可能影响不大,但用hyperref例如代替geometry它通常会很重要)。

相关内容