未使用的全局选项:

未使用的全局选项:

这是一个后续问题自定义类中的选项。看来我还是没理解全局选项是如何工作的。考虑以下代码:

\RequirePackage{filecontents}
\begin{filecontents}{sampleclass.cls}
    \NeedsTeXFormat{LaTeX2e}
    \ProvidesClass{sampleclass}

    %Providing key value syntax
    \RequirePackage{xkeyval}

    %Options
    \DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
    \DeclareOptionX{language}{\PassOptionsToPackage{#1}{babel}}
    \ExecuteOptionsX{language=latin}

    \ProcessOptions\relax
    \ProcessOptionsX\relax

    %Parent class
    \LoadClass[
    ]{article}

    %Language support
    \RequirePackage{babel}
\end{filecontents}

\documentclass[language=english]{sampleclass}
\usepackage{blindtext}

\begin{document}
    \blindtext
\end{document}

它会打印英文文本 - 正如它应该的那样 - 但会给出警告

Unused global option(s): [language=english].

如果我注释掉这行

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

警告消失。使用[language=english]选项的正确方法是什么?我的自定义类将选项传递englishbabel?经过一番尝试,我并没有发现上述代码的哪些部分实际上导致了警告,所以我将保留这个不太简单的工作示例。

答案1

您需要\DeclareOptionsX*而不是\DeclareOption*,以便处理用户定义的选项(此处使用xkeyval

\RequirePackage{filecontents}
\begin{filecontents}{sampleclass.cls}
    \NeedsTeXFormat{LaTeX2e}
    \ProvidesClass{sampleclass}

    %Providing key value syntax
    \RequirePackage{xkeyval}

    %Options
    \DeclareOptionX{language}{\PassOptionsToPackage{#1}{babel}}
    \DeclareOptionX*{\PassOptionsToClass{\CurrentOption}{article}}
    \ExecuteOptionsX{language=latin}

    \ProcessOptions\relax
    \ProcessOptionsX\relax

    %Parent class


    \LoadClass{article}

    %Language support
    \RequirePackage{babel}
\end{filecontents}

\documentclass[language=ngerman]{sampleclass}
\usepackage{blindtext}

\begin{document}
    \blindtext
\end{document}

相关内容