这是一个后续问题自定义类中的选项。看来我还是没理解全局选项是如何工作的。考虑以下代码:
\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]
选项的正确方法是什么?我的自定义类将选项传递english
给babel
?经过一番尝试,我并没有发现上述代码的哪些部分实际上导致了警告,所以我将保留这个不太简单的工作示例。
答案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}