Я создал класс, который адаптирует экзаменационный класс к нуждам моей школы, и добавил некоторые вещи для управления классом извне с помощью скрипта, чтобы иметь возможность создавать индивидуальный экзамен для каждого ученика с указанием имени и дополнительной информации. Все это контролируется внешним скриптом 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
только тогда, когда он уверен из всех условий, что ответы действительно должны быть отображены. Спасибо в любом случае за помощь, так как это как бы подтолкнуло мое решение.