UndeclareOption의 일종인 DeclareOption으로 옵션을 설정하는 등의 옵션을 해제하는 방법

UndeclareOption의 일종인 DeclareOption으로 옵션을 설정하는 등의 옵션을 해제하는 방법

나는 학교의 필요에 맞게 시험 수업을 조정하는 수업을 만들고 이름과 추가 정보가 인쇄된 각 학생의 개별 시험을 만들 수 있도록 스크립트를 통해 외부에서 수업을 제어하는 ​​몇 가지 요소를 추가했습니다. 이 모든 것은 외부 bash 스크립트에 의해 제어됩니다. pdflatex "\newcommand\examstudentname{somestudent} \newcommand\externalwithanswers{no}" the_exam.tex시험 PDF를 생성하기 위해 bash 스크립트 내부와 같은 것을 사용합니다 . 파일 에서처럼 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어쨌든 내 솔루션이 촉발되었기 때문에 도와주셔서 감사합니다.

관련 정보