如何取消設定選項,例如使用 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不管怎樣,謝謝你幫助我,因為它觸發了我的解決方案。

相關內容