我正在编写一个基于报告类的类文件,我希望其默认字体大小为 12 pt 而不是 10 pt。我尝试使用命令指定默认字体大小\ExecuteOptions{}
,但它没有按我预期的方式工作。这是一个简单的例子:
测试类.cls
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{testclass}[2023-02-07 Test class]
% All options passed to report class
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{report}}
% Execute options with default values
\ExecuteOptions{12pt}
% Process options
\ProcessOptions\relax
% Load base class
\LoadClass{report}
% etc.
测试文档
\documentclass{testclass}
\usepackage{lipsum}
\begin{document}
\chapter{A chapter}
\section{A section}
\lipsum[1-10]
\end{document}
但是当我运行此代码时,字体大小仍为 10pt,而不是 12pt。当我编写命令时\ExecuteOptions{12pt}
,我期望它执行内部代码,\DeclareOption*{}
因为这就是处理用户提供给类的所有选项的方式。但显然这并不适用于通过其他方式指定的选项,例如\ExecuteOptions{}
。
有没有什么方法可以让它\ExecuteOptions{}
执行代码\DeclareOption*{}
?
(注意:如果您专门添加\DeclareOption{12pt}{}
,它可以起作用,但为您可能需要的每个可能的默认选项编写声明并不是很实际。)
答案1
使用的循环\ExecuteOptions
非常简单,不使用任何代码来检查是否存在任何选项。您可以改用以下代码来检查已定义的选项并使用 fallback 选项:
\begin{filecontents*}{testclass.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{testclass}[2023-02-07 Test class]
% All options passed to report class
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{report}}
\newcommand*\ExecuteOptionsOrUseFallback[1]{%
\edef\@fortmp{\zap@space#1 \@empty}%
\def\reserved@a##1\@nil{%
\@for\CurrentOption:=\@fortmp\do
{\@ifundefined{ds@\CurrentOption}%
{\default@ds}%
{\csname ds@\CurrentOption\endcsname}}%
\edef\CurrentOption{##1}}%
\expandafter\reserved@a\CurrentOption\@nil}
% Execute options with default values
\ExecuteOptionsOrUseFallback{12pt}
% Process options
\ProcessOptions\relax
% Load base class
\LoadClass{report}
\end{filecontents*}
\documentclass{testclass}
\begin{document}
This is in size: \makeatletter\f@size pt\makeatother.
\end{document}