Как сбросить настройки параметров, например, с помощью DeclareOption, разновидности UndeclareOption

Как сбросить настройки параметров, например, с помощью DeclareOption, разновидности UndeclareOption

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

Связанный контент