![如何取消设置选项,例如使用 DeclareOption 设置选项(一种 UndeclareOption)](https://linux22.com/image/348325/%E5%A6%82%E4%BD%95%E5%8F%96%E6%B6%88%E8%AE%BE%E7%BD%AE%E9%80%89%E9%A1%B9%EF%BC%8C%E4%BE%8B%E5%A6%82%E4%BD%BF%E7%94%A8%20DeclareOption%20%E8%AE%BE%E7%BD%AE%E9%80%89%E9%A1%B9%EF%BC%88%E4%B8%80%E7%A7%8D%20UndeclareOption%EF%BC%89.png)
我创建了一个类,使考试类适应我学校的需求,并添加了一些内容,通过脚本从外部控制该类,以便能够为每个学生创建单独的考试,并在其上打印姓名和其他信息。所有这些都由外部 bash 脚本控制。我使用类似于pdflatex "\newcommand\examstudentname{somestudent} \newcommand\externalwithanswers{no}" the_exam.tex
bash 脚本内部的某些东西来生成考试 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