KOMAscript 包装器类中未使用的全局选项

KOMAscript 包装器类中未使用的全局选项

我想要编写几个类,其中大多数将使用 KOMA 类作为基类。

然而,我偶然发现了一个问题,如果在包装类中给出某些选项(主要与布局有关),则不会处理它们:

  \begin{filecontents}{test.cls}
    \ProvidesClass{test}[2015/01/01]
    \DeclareOption*{\PassOptionsToClass{\CurrentOption}{scrartcl}}
    \ProcessOptions\relax
    \LoadClass[paper=a5]{scrartcl}
  \end{filecontents}

\documentclass{test}

\usepackage{blindtext}

\begin{document}
  \section{Test}
  \blindtext
\end{document}

这导致

LaTeX Warning: Unused global option(s): [paper=a5] 如果我给出选项,\documentclass[paper=a5]{test}它就会被正确使用,因为我将选项传递给了 scrartcl。但是我想更改布局的默认值。

我怎样才能实现这个目标?

答案1

使用\LoadClass选项是一件棘手的事情,因为没有任何选项会传递给包,所有选项都是为类准备的。KOMA paper-sclass 不知道该选项,因为包typearea处理布局内容,因此发出警告。

允许使用documentclass选项解析到包,因此这种方法完全没问题。如果您想设置固定的页面大小,请在加载类之前将选项传递给包,就像类内部所做的那样。这种排队机制运行良好,但使用显式选项加载包会失败。

当然,总有欺骗的余地。KOMA 类知道选项 a5papera4paper以及其他一些选项,并将传递正确的选项以typearea自行打包。

\begin{filecontents}{\jobname.cls}
    \ProvidesClass{\jobname}[2015/01/01]
    \DeclareOption*{\PassOptionsToClass{\CurrentOption}{scrartcl}}
    \ProcessOptions\relax
    \PassOptionsToPackage{ paper=a5,pagesize }{typearea}
    \LoadClass{scrartcl}
\end{filecontents}

\documentclass{\jobname}

\usepackage{blindtext}

\begin{document}
\section{Test}
\blindtext
\end{document}

当然,你可以将布局工作推迟到以后,甚至可以在文档中更改它。有一件事要记住,告诉typearea做一些重新计算。如果可以更改纸张尺寸,8用户*也可以这样做。

\begin{filecontents}{\jobname.cls}
    \ProvidesClass{\jobname}[2015/01/01]
    \DeclareOption*{\PassOptionsToClass{\CurrentOption}{scrartcl}}
    \ProcessOptions\relax
    \LoadClass{scrartcl}

    \KOMAoptions{paper=a3,pagesize,paper=landscape}
    \recalctypearea
\end{filecontents}

\documentclass[paper=a5]{\jobname}

\usepackage{blindtext}

\begin{document}
\section{Test}
\blindtext
\end{document}

在 KOMA 3.17 版中,该typearea选项pagesize成为默认选项。所有仍在运行旧版本的用户(TeX Live 2014 已冻结)都需要明确提供该选项。我将其添加到传递给的选项列表中,typearea以方便他们使用。感谢 @esdd 给我留言。

答案2

这个答案也解决了这个问题:

LaTeX warning: Unused global option(s): [DIV].

这是由于以下情况引起的:DIV=计算由 LoadClass 加载到使用某些 KOMA 类定义的类中,例如我定义了一个类 Style.cls 并在其中的代码

\LoadClass[DIV=calc]{scrbook}

这会导致显示上述警告信息。

非常好的答案,六年多后它仍然很有帮助。

非常感谢,并祝贺回答问题的人以及长期保持答案活跃的人。

相关内容