我想从单个 .tex 文件创建测试/考试类型的文档以及解决方案表。
试卷和解答表看起来几乎一模一样。我在考试课上成功做过类似的事情,我只需添加\ifprintanswers
文档来标记答案,然后更改\documentclass{exam}
为\documentclass[answers]{exam}
我想要编译答案文档的时间。
如何在不使用考试课程(比如在 scrartcl 课程中)的情况下实现类似的目标?
更好的是,如果我可以在一次运行 pdflatex 中创建这两个文档,并且无需在运行之间编辑文本文件中的任何内容。
答案1
查看该comment
包提供的命令。下面是一个例子。
% main.tex
\documentclass{scrartcl}
\usepackage{comment}
\newcommand\ExamWithoutSolution[1]{%
\excludecomment{solution}%
\include{#1}%
}
\newcommand\ExamWithSolution[1]{%
\includecomment{solution}%
\include{#1}%
}
\begin{document}
\ExamWithoutSolution{myexam}
\ExamWithSolution{myexam}
\end{document}
% myexam.tex
\title{The Christmas Exam}
\author{Prof.\ John I.Q.\ Nerdelbaum Frink Jr.}
\maketitle
\begin{enumerate}
\item Compute $1+1$.
\begin{solution}
The answer is $2$.
\end{solution}
\item Compute $1-1$.
\begin{solution}
The answer is $0$.
\end{solution}
\end{enumerate}
运行pdflatex
一次main.tex
就会产生一份有两页的文档。
答案2
你可以使用以下命令定义开关\newif
:
\newif\ifSolution % defines \ifSolution, \Solutiontrue, and \Solutionfalse
\Solutiontrue % set flag "Solution" to true
\Solutionfalse % set flag "Solution" to false
\ifSolution ... \else ... \fi % Execute code depending on flag "Solution"
这是我的其他解决方案中的示例,其输出相同:
% main.tex
\documentclass{scrartcl}
\newif\ifSolution
\newcommand\ExamWithoutSolution[1]{%
\Solutionfalse
\include{#1}%
}
\newcommand\ExamWithSolution[1]{%
\Solutiontrue
\include{#1}%
}
\begin{document}
\ExamWithoutSolution{myexam}
\ExamWithSolution{myexam}
\end{document}
% myexam.tex
\title{The Christmas Exam}
\author{Prof.\ John I.Q.\ Nerdelbaum Frink Jr.}
\maketitle
\begin{enumerate}
\item Compute $1+1$.
\ifSolution
The answer is $2$.
\fi
\item Compute $1-1$.
\ifSolution
The answer is $0$.
\fi
\end{enumerate}