平均能量损失

平均能量损失

我已经列出dvipsnames(或其他选项),\LoadClass希望我不需要dvipsnames在中指定(或其他选项)\documentclass

显然,这并不像我预期的那样工作。这意味着,我需要dvipsnames在中指定\documentclass,即使此选项已在中默认指定\LoadClass。看起来在中定义的选项\LoadClass被忽略了。

平均能量损失

\begin{filecontents}{dummy.cls}
%\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesClass{dummy}[2015/10/21 v 0.01 description]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\LoadClass[% the default options
    dvipsnames,
    12pt,
]{article}
\RequirePackage{xcolor}

\def\test{\textcolor{Red}{It is a test.}}

\endinput
\end{filecontents}


% try remove dvipsnames 
\documentclass[dvipsnames]{dummy}
\begin{document}
\test
\end{document}

问题

创建用户定义类时定义默认选项的正确方法是什么?

答案1

这些选项不会成为全局选项,因此它们不会传递给每个已加载的包;因此,如果您希望它成为全局的,则\LoadClass必须手动添加。dvipsnames

该选项dvipsnames未在中定义article.cls,因此它不执行任何操作,但也不会引发错误,这是因为选项是在类文件中处理的方式。

\ProvidesClass{dummy}[2015/10/21 v 0.01 description]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\LoadClass[% the default options
    12pt,
]{article}
\@expandtwoargs\in@{dvipsnames}{\@classoptionslist}
\ifin@
  % dvipsnames has been used as a global option by the user, do nothing
\else
  % append dvipsnames to the list of global options
  \ifx\@classoptionslist\@empty
    \g@addto@macro\@classoptionslist{dvipsnames}
  \else
    % with a comma if the list is not empty
    \g@addto@macro\@classoptionslist{,dvipsnames}
  \fi
\fi
\RequirePackage{xcolor}

\def\test{\textcolor{Red}{It is a test.}}

\endinput

现在调用\documentclass{dummy}\documentclass[dvipsnames]{dummy}将导致\@classoptionslist包含dvipsnames,因此在加载时将xcolor选项dvipsnames传递给它。

然而,我不确定这是否是一件好事。

相关内容