如何在派生类中覆盖基类的默认选项

如何在派生类中覆盖基类的默认选项

如果这个问题在其他地方已经得到解答,我深感抱歉;我见过几个标题类似的问题,但我似乎无法确定这些答案是否适用于我的情况。

我想要做的是定义一个基类,它设置一些默认选项,例如横向。然后,我想定义一个派生类,它加载基类,但将默认值改回纵向。我似乎无法弄清楚如何做到这一点。在下面的 MWE 中,当我加载时base-class,默认为所需的横向。当我base-class使用该letterpaper选项加载时,方向会按预期变为纵向。但是,当我加载时derived-class,方向仍然是横向而不是letterpaper。我该怎么做?这些类之间还有其他差异(尽管有很多共同之处),这让我不想只使用base-classletterpaper选项加载。(当然,我可以letterpaper在加载时手动指定该选项derived-class,但为了避免这种情况,我只想设置默认值。)我猜问题是因为在derived-class加载时base-classbase-class会执行该landscape选项并覆盖该letterpaper选项。但我不知道如何解决这个问题。

梅威瑟:

\begin{filecontents}{base-class.cls}
    \NeedsTeXFormat{LaTeX2e} \ProvidesClass{base-class}

    \DeclareOption{landscape}{\PassOptionsToClass{\CurrentOption}{article}}

    \ExecuteOptions{landscape}

    \DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
    \ProcessOptions\relax

    \LoadClass{article}
    
    % Insert much additional material here
\end{filecontents}

\begin{filecontents}{derived-class.cls}
    \NeedsTeXFormat{LaTeX2e} \ProvidesClass{derived-class}

    \DeclareOption{letterpaper}{\PassOptionsToClass{\CurrentOption}{base-class}}

    \ExecuteOptions{letterpaper}

    \DeclareOption*{\PassOptionsToClass{\CurrentOption}{base-class}}
    \ProcessOptions\relax

    \LoadClass{base-class}
    
    % Additional style differences
\end{filecontents}

%\documentclass{base-class} % Landscape
%\documentclass[letterpaper]{base-class} % Portrait
\documentclass{derived-class} % Landscape (portrait desired)
%\documentclass[letterpaper]{derived-class} % Portrait

\usepackage{geometry}
\usepackage{lipsum}

\begin{document}
    \lipsum
\end{document} 

相关内容