LaTeX 클래스를 사용하여 질문, 솔루션 및 힌트를 위한 별도의 연습 시트 생성

LaTeX 클래스를 사용하여 질문, 솔루션 및 힌트를 위한 별도의 연습 시트 생성

저는 현재 시험 수업을 통해 문제와 해결 방법을 위한 별도의 연습 시트를 제작하고 있습니다. 해당 클래스를 사용하여 전체 솔루션 대신 힌트가 포함된 세 번째 시트를 생성할 수 있는 방법이 있습니까? 아니면 더 나은 대안이 있습니까?

고유한 tex 파일의 구조는 다음과 같습니다.

\documentclass{exam} % or any other suggestion
\begin{document}

\begin{questions}

\question Prove that $A\implies B$.

\begin{hint}
Use contradiction.
\end{hint}

\begin{solution}
The details...
\end{solution}

\end{questions}

\end{document}

그런 다음 이 사이트의 다른 곳에서 Makefile설명한 latexmk대로 적절한 옵션을 선택한 클래스에 전달하여 sheet-questions.pdf, sheet-hints.pdf 및 sheet-solutions.pdf를 생성합니다.

답변1

이미 클래스를 사용하는 파일이 많았기 때문에 옵션을 사용하지 않으면 아무것도 표시되지 않는 간단한 환경을 정의하기 위해 패키지를 exam사용하게 되었습니다 . 기본적인 예는 다음과 같습니다.optionalshowhints

\documentclass{exam}
\qformat{\textbf{Question \thequestion\hfill}}

% The "optional" package allows the definition of an environment 
% hints that will only be printed if the showhints option is passed
\usepackage[dummy]{optional} % document fails to compile if optional has no options ...

\makeatletter
\@ifpackagewith{optional}{showhints}{
    % environment definition for the case where hints must be shown
    \newenvironment{hints}[1][]{\textbf{Hints:} #1}{}
}{
    % environment definition for the case where hints must be hidden
    \newenvironment{hints}[1][]{\setbox\z@\vbox\bgroup}{\egroup}
}
\makeatother

\begin{document}

\begin{questions}
\question How do you include a package in \LaTeX?

\begin{hints}
Ask around at tex.stackexchange.com if you dare.
\end{hints}

\begin{solution}
 Use the \texttt{\textbackslash usepackage} command.
\end{solution}

\end{questions}

\end{document}

위의 내용이 라는 파일에 저장되었다고 가정하면 mwe.tex다음은 Makefile세 가지 다른 출력을 생성합니다.

  1. mwe-base.pdf는 의도된 연습 시트입니다.
  2. mwe-answers.pdf, 해결책은 있지만 힌트는 없습니다.
  3. mwe-hints.pdf, 힌트는 있지만 해결책은 없습니다.
SOURCES = $(wildcard *.tex)
TARGETS = $(patsubst %.tex, %, $(SOURCES))

all: $(TARGETS)


%: %.tex
    latexmk -jobname=$(basename $<)-base -pdf -pdflatex='pdflatex -shell-escape -interaction=nonstopmode' $<
    latexmk -jobname=$(basename $<)-answers -pdf -pdflatex='pdflatex -jobname=$(basename $<)-answers -shell-escape -interaction=nonstopmode "\PassOptionsToClass{answers}{exam}\input{$(basename $<)}"' $<
    latexmk -jobname=$(basename $<)-hints -pdf -pdflatex='pdflatex -jobname=$(basename $<)-hints -shell-escape -interaction=nonstopmode "\PassOptionsToPackage{showhints}{optional}\input{$(basename $<)}"' $<

clean:
    rm -f *.out *aux *bbl *blg *log *toc *.ptb *.tod *.fls *.fdb_latexmk *.lof

아마도 개선의 여지가 있을 것입니다.

관련 정보