如何取消设置选项,例如使用 DeclareOption 设置选项(一种 UndeclareOption)

如何取消设置选项,例如使用 DeclareOption 设置选项(一种 UndeclareOption)

我创建了一个类,使考试类适应我学校的需求,并添加了一些内容,通过脚本从外部控制该类,以便能够为每个学生创建单独的考试,并在其上打印姓名和其他信息。所有这些都由外部 bash 脚本控制。我使用类似于pdflatex "\newcommand\examstudentname{somestudent} \newcommand\externalwithanswers{no}" the_exam.texbash 脚本内部的某些东西来生成考试 pdf。就像在文件中一样,the_exam.tex可能会[answers]意外设置选项,可能会创建包含答案的考试(实际上,我们学校曾经发生过类似的事情)。为了完全控制,我需要脚本来设置和取消设置选项,例如[answers]我从()继承的类exam.cls

案例 1:我the_exam.tex可能有:

\documentclass{HTWChurExam}

HTWChurExam.cls有类似的东西:

\PassOptionsToClass{answers}{exam}

这故意打开了[answers]exam.cls没问题,解决了。通过脚本从外部轻松控制。

情况 2:我the_exam.tex可能有:

\documentclass[answers]{HTWChurExam}

HTWChurExam.cls有类似的东西:

\DeclareOption*{\PassOptionsToClass{\CurrentOption}{exam}}

这会将所有选项传递给 exam.cls。我现在想有意识地转向离开 [answers],由bash脚本控制。

我还没有找到任何方法来实现这一点。

答案1

我的解决方案是:

\providecommand{\externalwithanswers}{}% fallback definition
\newcommand{\withname}{yes}
\newcommand{\withscoretable}{yes}
\newcommand{\withpagescore}{yes}
\newcommand{\withanswers}{}
\newcommand{\withanswersnewpage}{}
\newcommand{\noanswersnewpage}{\newpage}
\newcommand{\withanswerslinebreak}{}
\newcommand{\useanswers}%
{%use answers
    \typeout{HTWChurExam class: using answers}
    \renewcommand{\withanswers}{(mit Anworten)}%
    \renewcommand{\withanswersnewpage}{\newpage} %
    \renewcommand{\noanswersnewpage}{} %
    \renewcommand{\withanswerslinebreak}{\linebreak} %
}
\newcommand{\usenoanswers}%
{%do not use answers
    \typeout{HTWChurExam class: not using answers}
    \renewcommand{\withanswers}{}
    \renewcommand{\withanswersnewpage}{}
    \renewcommand{\noanswersnewpage}{\newpage}
    \renewcommand{\withanswerslinebreak}{}
}
\typeout{HTWChurExam class: default answer display}
\usenoanswers
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{exam}}
\DeclareOption{answers}%
{%
    \typeout{\currfilebase: using answers requested}
    %test if external script call supersedes using answers with 'no' option
    \ifthenelse{\equal{no}{\externalwithanswers}} %
    {%if external answerdefinition is 'no'
        \typeout{HTWChurExam class: external scipt call -> using no answers}
    }%
    {%if external answerdefinition is not 'no'
        \PassOptionsToClass{answers}{exam}
        \useanswers
    }%
}

%test for external withanswer 'yes' option
\ifthenelse{\equal{yes}{\externalwithanswers}} %
{ %if external answerdefinition is 'yes'
    \typeout{HTWChurExam class: external scipt call -> using answers}
    \PassOptionsToClass{answers}{exam}
    \useanswers
} %
{}%

关键是只有当从所有条件组合确定确实需要显示答案时,才将选项传递answer给班级。无论如何,感谢您的帮助,因为它激发了我的解决方案。exam

相关内容