LaTeX クラスを使用して、質問、解答、ヒントの個別の練習シートを生成する

LaTeX クラスを使用して、質問、解答、ヒントの個別の練習シートを生成する

現在、試験クラスを利用して、質問と解答を別々に練習シートを作成しています。そのクラスを使用して、完全な解答ではなくヒントが記載された 3 番目のシートを作成する方法、またはより優れた代替手段はありますか?

ユニークな 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}

そして、適切なMakefilewith は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、次のMakefile3 つの異なる出力が生成されます。

  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

おそらく改善の余地があるでしょう。

関連情報