如何通过类选项改变包的行为?

如何通过类选项改变包的行为?

我正在基于该类编写一个文档类book。在这个类中我有一些代码如下:

\RequirePackage[total={10cm,18cm},paperwidth=16cm, paperheight=23cm]{geometry}
\RequirePackage[cross,center,noinfo,a4]{crop}

我想为我的类定义一个选项,nocrop这样当我使用它时,上面的代码就会变成下面的代码:

\RequirePackage[total={10cm,18cm}]{geometry}
%\RequirePackage[cross,center,noinfo,a4]{crop}  

换句话说,我希望该crop包不被运行并且paperwidth=16cm, paperheight=23cm被删除。

这可能吗?如果可以,怎么做?
这是我的 MWE:

\RequirePackage{filecontents}
% my class file
\begin{filecontents}{myclass.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myclass}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}}
\ProcessOptions
\LoadClass{book}
\RequirePackage[total={10cm,18cm},paperwidth=16cm, paperheight=23cm]{geometry}
 \RequirePackage[cross,center,noinfo,a4]{crop}
\endinput
\end{filecontents}
\documentclass{myclass} 
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\end{document}

(如果有帮助的话,我在 Windows 机器上使用 XeLaTeX。)

答案1

可以定义一个开关(\ifmyclass@crop),通过选项进行设置,稍后要求包含正确的包/选项集:

\RequirePackage{filecontents}
% my class file
\begin{filecontents}{myclass.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myclass}
\newif\ifmyclass@crop
\myclass@croptrue % default
\DeclareOption{nocrop}{\myclass@cropfalse}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}}
\ProcessOptions
\LoadClass{book}
\ifmyclass@crop
  \RequirePackage[total={10cm,18cm},paperwidth=16cm,paperheight=23cm]{geometry}
  \RequirePackage[cross,center,noinfo,a4]{crop}
\else
  \RequirePackage[total={10cm,18cm}]{geometry}
\fi
\endinput
\end{filecontents}
\documentclass{myclass}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\end{document}

相关内容