如何添加为文档类设置标志的选项?

如何添加为文档类设置标志的选项?

我想添加一个选项,用于为文档类设置标志。也就是说,我希望能够键入

\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避免可能的冲突。

相关内容