我想添加一个选项,用于为文档类设置标志。也就是说,我希望能够键入
\documentclass[foo]{class}
并获得一种行为,并输入
\documentclass{class}
以获得不同类型的行为。我认为我应该在类文件中这样做:
\newif\if@foo
\@foofalse
...
\DeclareOption{foo}{\@footrue}
...
\if@foo
...
\else
...
\fi
这能行吗?如果我在文档中使用的包\newif\if@foo
中也有,这会引起问题吗?
答案1
这适用于课程和软件包编写者的 LaTeX2e包含部分此类示例3.3 声明选项(第 12 页)。它涉及包和类选项的声明。以下代码片段取自此处:
选项声明如下:
\DeclareOption{<option>}{<code>}
例如,
dvips
该包的选项(稍微简化)graphics
实现如下:\DeclareOption{dvips}{\input{dvips.def}}
这意味着当作者写入时
\usepackage[dvips]{graphics}
,文件dvips.def
就会被加载。再举一个例子,在类a4paper
中声明选项article
来设置\paperheight
和\paperwidth
长度:\DeclareOption{a4paper}{% \setlength{\paperheight}{297mm}% \setlength{\paperwidth}{210mm}% }
有时用户会请求类或包未明确声明的选项。默认情况下,这将产生警告(对于类)或错误(对于包);此行为可以按如下方式更改:
\DeclareOption*{<code>}
例如,为了使包
fred
对未知选项产生警告而不是错误,您可以指定:\DeclareOption*{% \PackageWarning{fred}{Unknown option `\CurrentOption'}% }
然后,如果作者写作
\usepackage[foo]{fred}
,他们会收到警告Package fred Warning: Unknown option `foo'.
后续章节包含一些由其他类构建的类的示例,值得复习一下。
使用与其他包共用的选项可能会有问题。但是,既然您可以选择与选项关联的布尔值(或宏),请选择对您的类唯一的布尔值。作者通常会在宏中包含某种形式的包引用。例如,tufte-latex
捆在大多数命令和布尔值前面加上以@tufte
避免可能的冲突。