无法通过自定义类中的 LoadClass 设置 draftmode

无法通过自定义类中的 LoadClass 设置 draftmode

我有一个加载文章的自定义类。我可以设置某些默认参数,但草稿选项似乎被忽略了。我的自定义类中有以下内容:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{sdy-article}

\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax

\LoadClass[10pt, a4paper, draft]{article}

这确实给了我一张 10pt a4 纸,但它不是草稿模式。如果我在加载自定义类的文档中设置草稿模式,如下所示:

\documentclass[draft]{sdy-article}

它确实进入了草稿模式。问题是,我想在我的自定义类中设置一些条件来确定是否应该设置草稿模式,然后将其传递下去。

我也尝试过像这样传递它但没有成功:

\PassOptionsToClass{draft}{article}

编辑

在此添加完整的示例来展示正在发生的事情。

sdy-article.cls:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{sdy-article}

\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax

\LoadClass[10pt, a4paper, draft]{article}

主要.tex:

\documentclass{sdy-article}
\usepackage{graphicx}

\begin{document}

\noindent\includegraphics[width=3cm]{example-image-a}\qquad
\includegraphics[width=3cm]{example-image-golden}\qquad
\includegraphics[width=3cm]{example-grid-100x100pt}

\noindent\includegraphics[height=5cm]{example-image-b}

\noindent\includegraphics[scale=0.5]{example-image-c}

\noindent\includegraphics[width=3cm]{example-image}

\end{document}

输出结果如下: 在此处输入图片描述

如您所见,图像的渲染方式与未设置草稿模式时相同。奇怪的是\overfullrule 实际上,正如您在草稿模式下所期望的那样,设置为 5.0pt。当我在 main.tex ( \documentclass[draft]{sdy-article}) 中添加草稿选项时,它确实进入了完整草稿模式:

在此处输入图片描述

答案1

您没有提供草稿未被传递的例子。

如果我跑

\documentclass{sdy-article}

\begin{document}

\showthe\overfullrule
\end{document}

然后终端显示

> 5.0pt.
l.5 \showthe\overfullrule
                         
? x
No pages of output.

表明article类草稿模式处于活动状态,将溢出框规则设置为 5pt,而不是默认的 0pt。


修改后的例子后,问题就大不相同了。draft 传给了article类,但它没有传递给 graphicx,它不是一个全局文档选项因为它不在传递给的明确用户提供的选项列表中,\documentclass因此graphicx看不到draft 您的班级可以做的事情

\PassOptionsToPackage{draft}{graphicx}

然后如果graphicx加载了它就会看到draft

答案2

对于后来到达这里的人,让我向你们展示我最终是如何“解决”这个问题的。@DavidCarlisle 的答案将保留为可接受的答案,因为它解释了哪里出了问题以及原因。这只是为了任何可能想要完成类似事情的未来读者。

再次,简而言之,我想一次性“全局”设置草稿选项,就像将其作为选项添加到 documentclass 中一样。我想根据某些条件在我的自定义类中执行此操作。

David 在聊天中提到,虽然它不是一个受支持的界面,但将草稿添加到\@classoptionslist“手动”可以解决问题。然后我在这里看到了这个答案:https://tex.stackexchange.com/a/274057/45330 我也做了几乎同样的事情:

[...]
<pseudo: conditional states we need to set draft>
  \@expandtwoargs\in@{draft}{\@classoptionslist}
  \ifin@
  % draft has been used as a global option by the user, do nothing
  \else
    % append draft to the list of global options
    \ifx\@classoptionslist\@empty
      \g@addto@macro\@classoptionslist{draft}
    \else
      % with a comma if the list is not empty
      \g@addto@macro\@classoptionslist{,draft}
    \fi
  \fi
}{}
<end conditional block>

相关内容