我創建了一個課程,該課程使考試課程適應我學校的需求,並添加了一些內容,通過腳本從外部控制課程,以便能夠為每個學生創建單獨的考試,並在其上打印姓名和附加信息。所有這些都是由外部 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
不管怎樣,謝謝你幫助我,因為它觸發了我的解決方案。