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。とにかく、私の解決策のきっかけとなったので、助けてくれてありがとう。

関連情報