Como desmarcar opções como definir opções com DeclareOption, uma espécie de UndeclareOption

Como desmarcar opções como definir opções com DeclareOption, uma espécie de UndeclareOption

Criei uma turma que adapta a turma do exame às necessidades da minha escola e acrescentei algumas coisas para controlar a turma de fora por meio de um roteiro para poder criar uma prova individual para cada aluno com o nome e informações adicionais impressas. Tudo isso é controlado por um script bash externo. Eu uso algo parecido pdflatex "\newcommand\examstudentname{somestudent} \newcommand\externalwithanswers{no}" the_exam.texcom o script bash para gerar o pdf do exame. Como no the_exam.texarquivo pode acontecer que a opção [answers]tenha sido definida acidentalmente, pode ser criado um exame com respostas incluídas (na verdade, algo assim aconteceu uma vez na nossa escola). Para ter controle total, preciso que o script configure e desative opções como [answers]as da classe que herdei ( exam.cls).

Caso 1: Meu the_exam.texpode ter:

\documentclass{HTWChurExam}

HTWChurExam.clstem algo como:

\PassOptionsToClass{answers}{exam}

Isso é ativado deliberadamente [answers]para exam.cls. Sem problemas, resolvido. Fácil de controlar externamente por meio de um script.

Caso 2: Meu the_exam.texpode ter:

\documentclass[answers]{HTWChurExam}

HTWChurExam.clstem algo como:

\DeclareOption*{\PassOptionsToClass{\CurrentOption}{exam}}

que passará todas as opções para exam.cls. Quero agora ter a possibilidade de virar deliberadamentedesligado [answers], controlado por um script bash.

Não encontrei nenhuma maneira de conseguir isso.

Responder1

Minha solução é:

\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
} %
{}%

O segredo é passar a opção answerpara a turma examsomente quando tiver certeza, a partir de todas as condições combinadas, de que as respostas são realmente necessárias para serem exibidas. De qualquer forma, obrigado por me ajudar, pois isso desencadeou minha solução.

informação relacionada