我非常喜欢这examdoc
门课。我几乎总是用它来做考试、测验……但是……
我想做一本教科书。里面应该有几个练习,最好在附录中附上它们的解决方案。
我遇到了以下问题:
我正在使用
\documentclass{book}
教科书。我希望能够将问题和解决方案复制粘贴到\documentclass{exam}
。我已经尝试制作自己的.sty
文件:\ProvidesPackage{oefeningen} \newenvironment{questions}{\begin{enumerate}}{\end{enumerate}} \newcommand{\question}{\item} \newenvironment{parts}{% \let\oldpart=\part \renewcommand{\part}{\item} \begin{enumerate}}{\end{enumerate}\renewcommand{\part}{\oldpart}}
但这似乎没有起到作用......(它没有编译,我仍然不知道如何应对解决方案环境)
我不知道如何在单独的附录中显示解决方案,而不是直接在每个问题后面显示......
我是编写类、包或宏方面的新手,但任何帮助都会很感激。我也浏览了很多论坛,但我认为其他答案没有提供我想要的功能。(但我很乐意得到纠正)
排序方式:
我有这个exam
文件:
\documentclass[12pt,a4paper,answers]{exam}
\begin{document}
\begin{questions}
\question Main question goes here
\begin{parts}
\part $1+1=$
\begin{solution}
2
\end{solution}
\end{parts}
\end{questions}
\end{document}
我想做的(但没有用!)是这样的:
\documentclass[12pt,a4paper]{book}
\usepackage{exsheets}
\begin{document}
\section{foo}
\question Main question goes here
\begin{parts}
\part $1+1=$
\begin{solution}
2
\end{solution}
\end{parts}
\section{solutions}
%command to display list of solutions, optimally organised by section/chapter
\end{document}
结果是这样的
这样,我就可以从教科书复制粘贴问题,并在考试中重复使用它们......
答案1
重大编辑 -> 新答案:
目标
使用该包编写教科书exsheets
,并能够复制和粘贴练习和解决方案,就像它们在使用该类exam
创建考试的文档中一样。
要求
- 该
exsheets
包没有parts
环境。需要对其进行定义,以便能够使用与 所需的相同语法exam
。 - 一个
solution
环境应该可供一次或多次用于一个问题。为此,需要重新定义exsheets
自己的环境。这还需要一个合适的环境替代品,这样仍然可以保存解决方案,以便稍后在教科书中打印它们。solution
exsheets
- 适应
exsheets
'文档question
中的环境exam
。
定义
这
parts
: 因为教科书中不需要为问题分配分数,所以一个简单的包装enumerate
就可以了。我们会使用它,enumitem
因为它很方便。\usepackage{enumitem} \newenvironment{parts}{% \renewcommand*\part[1][]{\item}% \begin{enumerate}[label=(\alph*)] }{\end{enumerate}}
重新定义
solution
: 我们要做的第一件事是为 创建一个新问题/解决方案对exsheets
。这将替代原来的solution
。这需要exsheets
0.3 版本,该版本应该会在一周左右的时间内在 CTAN 上发布。测试版可以在这里下载。\NewQuSolPair{Question}{Solution}
下面的代码稍微长一点。目标是定义
solution
一个可以存储解决方案的方法exsheets
。手动方式是在新定义的环境中再次写入解决方案Solution
:\begin{Question} Main question goes here \begin{parts} \part $1+1=$ \begin{solution} $2$ \end{solution} \end{parts} \end{Question} % the following should be unnecessary: \begin{Solution} \begin{parts} \part $1+1=$ \end{parts} \end{Solution}
由于我没有完美的自动化解决方案,因此我将首先提出需要双重输入的基本解决方案。
\usepackage{environ} \makeatletter % no idea why these are necessary: \def\env@solution@save@env{} \def\env@solution@process{} % the actual redefinition into a dummy environment % that gobbles its body: \RenewEnviron{solution}{} \makeatother
文件
现在教科书看起来可以是这样的:
% this is textbook.tex
\documentclass[12pt,a4paper]{book}
\usepackage{exsheets}
\usepackage[inline]{enumitem}
\newenvironment{parts}{%
\renewcommand*\part[1][]{\item}%
\begin{enumerate}[label=(\alph*)]
}{%
\end{enumerate}%
}
\NewQuSolPair{Question}{Solution}
\usepackage{environ}
\makeatletter
\def\env@solution@save@env{}
\def\env@solution@process{}
\RenewEnviron{solution}{}
\makeatother
\begin{document}
\chapter{foo}
\section{questions}\exlabel{sec:questions:foo}
\begin{Question}
Main question goes here
\begin{parts}
\part $1+1=$
\begin{solution}
$2$
\end{solution}
\part $8-3=$
\begin{solution}
$5$
\end{solution}
\end{parts}
\end{Question}
\begin{Solution}
\begin{enumerate*}[label=(\alph*)]
\item $2$
\item $5$
\end{enumerate*}
\end{Solution}
\begin{Question}
Another question.
\begin{solution}
Another answer.
\end{solution}
\end{Question}
\begin{Solution}
Another answer
\end{Solution}
\section{solutions}
\printsolutions[section=\S{sec:questions:foo}]
\end{document}
对应考试:
% this is exam.tex
\documentclass[answers]{exam}
\newenvironment{Question}{\question}{}
\begin{document}
\begin{questions}
\begin{Question}
Main question goes here
\begin{parts}
\part $1+1=$
\begin{solution}
$2$
\end{solution}
\part $8-3=$
\begin{solution}
$5$
\end{solution}
\end{parts}
\end{Question}
\begin{Question}
Another question.
\begin{solution}
Another answer.
\end{solution}
\end{Question}
\end{questions}
\end{document}
避免解决方案重复输入的初步尝试
以下solution
环境定义试图实现自动化,但存在一些明显的缺点。主要丧失了创建解决方案的灵活性。
问题中的每个调用都会保存其主体,在环境solution
结束时,如果已使用环境,则会自动调用环境。为了轻松完成此操作,请使用以下包:Question
Solution
solution
etoolbox
\usepackage{etoolbox,environ}
\makeatletter
\def\addto@solution{}
\def\env@solution@save@env{}
\def\env@solution@process{}
\RenewEnviron{solution}{%
\ifdefvoid{\BODY}{}
{%
\xdef\addto@solution
{%
\expandonce\addto@solution
\ifnum\value{enumi}>0\theenumi\space\fi
\expandonce\BODY\space
}%
}}
\AtBeginEnvironment{Question}{\gdef\addto@solution{}}
\AtEndEnvironment{Question}{%
\ifdefvoid\addto@solution{}
{\begin{Solution}\addto@solution\end{Solution}}%
}
现在textbook.tex
看起来如下:
% this is textbook.tex
\documentclass[12pt,a4paper]{book}
\usepackage{exsheets}
\usepackage{enumitem}
\newenvironment{parts}{%
\renewcommand*\part[1][]{\item}%
\begin{enumerate}[label=(\alph*)]
}{%
\end{enumerate}%
}
\NewQuSolPair{Question}{Solution}
\usepackage{etoolbox,environ}
\makeatletter
\def\addto@solution{}
\def\env@solution@save@env{}
\def\env@solution@process{}
\RenewEnviron{solution}{%
\ifdefvoid{\BODY}{}
{%
\xdef\addto@solution
{%
\expandonce\addto@solution
\ifnum\value{enumi}>0\theenumi\space\fi
\expandonce\BODY\space
}%
}}
\AtBeginEnvironment{Question}{\gdef\addto@solution{}}
\AtEndEnvironment{Question}{%
\ifdefvoid\addto@solution{}
{\begin{Solution}\addto@solution\end{Solution}}%
}
\makeatother
\begin{document}
\chapter{foo}
\section{questions}\exlabel{sec:questions:foo}
\begin{Question}
Main question goes here
\begin{parts}
\part $1+1=$
\begin{solution}
$2$
\end{solution}
\part $8-3=$
\begin{solution}
$5$
\end{solution}
\end{parts}
\end{Question}
\begin{Question}
Another question.
\begin{solution}
And another answer.
\end{solution}
\end{Question}
\section{solutions}
\printsolutions[section=\S{sec:questions:foo}]
\end{document}
结果看起来与上面相同。
原始答案:
你在评论中说exsheets
如果它有一个环境,就可以帮你解决问题parts
。如果这真的是你唯一缺少的东西:它很容易被定义。
我假设在教科书中你不想给练习分配分数,所以唯一需要的是一个enumerate
环境的简单包装器。我正在使用enumitem
格式化标签。 的重新定义\part
应该保留在本地,因为您可能希望将教科书分成几部分。
\documentclass{scrartcl}
\usepackage{exsheets}
\SetupExSheets{headings-format=\normalsize\bfseries\sffamily}
\usepackage{enumitem}
\newenvironment{parts}{%
\renewcommand*\part[1][]{\item}%
\begin{enumerate}[label=(\alph*)]
}{%
\end{enumerate}%
}
\begin{document}
\part{A demonstration}
\begin{question}
Why is there air?
\end{question}
\begin{question}
What if there were no air?
\begin{parts}
\part Describe the effect on the balloon industry.
\part Describe the effect on the aircraft industry.
\end{parts}
\end{question}
\end{document}
对应exam
文件:
\documentclass{exam}
\begin{document}
\begin{questions}
% the following part is the same as in the other document:
\begin{question}
Why is there air?
\end{question}
\begin{question}
What if there were no air?
\begin{parts}
\part Describe the effect on the balloon industry.
\part Describe the effect on the aircraft industry.
\end{parts}
\end{question}
\end{questions}
\end{document}