私は、学校のニーズに合わせて試験クラスを適応させるクラスを作成し、スクリプトによって外部からクラスを制御するためのいくつかの機能を追加しました。これにより、名前と追加情報が印刷された各生徒の個別の試験を作成できます。これはすべて、外部の 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
。とにかく、私の解決策のきっかけとなったので、助けてくれてありがとう。