我怎样才能阻止“setspace”包处理“doublespacing”文档类选项?

我怎样才能阻止“setspace”包处理“doublespacing”文档类选项?

LaTeX 对以下文件的操作不符合我的预期。

第一个文件:

\documentclass[doublespacing]{article}
\usepackage{lipsum} % for dummy text only
\begin{document}
\lipsum
\end{document}

第二个文件:

\documentclass[doublespacing]{article}
\usepackage{setspace}
\usepackage{lipsum} % for dummy text only
\begin{document}
\lipsum
\end{document}

对于第一个文件,LaTeX 按预期发出此警告:

LaTeX Warning: Unused global option(s):
    [doublespacing].

但是,第二个文件编译时没有任何警告,并且使用双倍间距来排版文本。

为什么第二个文件有效?似乎应该解析给 documentclass 的选项,并在遇到article之前发出警告。\usepackage{setspace}

再介绍一下背景:我试图扩展一个文档类以包含doublespacing(通过使用\DeclareOption{doublespacing}等),但我无法正确配置行为,因为setspace包会像我已完成 一样拾取它\usepackage{doublespacing}。有没有办法不让用户setspace看到doublespacingdocumentclass 选项?

答案1

该行中给出的每个选项都\documentclass被称为全球的并传递给随后加载的所有包。如果包不知道该选项,则不执行任何操作,否则将应用该选项。(请参阅clsguide.pdfTeX 系统或这里了解详情。

因此这是预期的行为:说

\documentclass[doublespacing]{article}
\usepackage{setspace}

相当于说

\documentclass{article}
\usepackage[doublespacing]{setspace}

(因为article班级不知道这个选项)。

如果您编写了一个具有doublespacing选项的类,则结果是,当指定此选项时,它将传递给之后加载的所有包。

setspace不过,在这种特殊情况下,你可以通过发出指令来恢复设置

\AtBeginDocument{\setstretch{<factor>}}

<factor>你有多喜欢呢?

答案2

文档选项(按包或按文档类)根据需要进行组装和处理(如果使用该\DeclareOption方法)。仅在文档的开头 - at 处\begin{document},会检查是否已处理所有选项。从latex.ltx,以下是在 进行处理的\begin{document}

\def\document{\endgroup
  \ifx\@unusedoptionlist\@empty\else
    \@latex@warning@no@line{Unused global option(s):^^J%
            \@spaces[\@unusedoptionlist]}%
  %...

未知选项保留在 中\@unusedoptionlist。因此,即使doublespacing被传递给文档类,它也会在以下情况下被处理:setspace已加载。来自setspace.sty

\DeclareOption{singlespacing}{\AtEndOfPackage{\singlespacing}}
\DeclareOption{onehalfspacing}{\AtEndOfPackage{\onehalfspacing}}
\DeclareOption{doublespacing}{\AtEndOfPackage{\doublespacing}}

\ProcessOptions

相关内容