diff options
author | Karl Berry <karl@freefriends.org> | 2008-09-08 00:42:04 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2008-09-08 00:42:04 +0000 |
commit | 036469499e69e21110bdbbd77af3e90de86a382a (patch) | |
tree | 34d517f0b3490d8eed24f45e7bd1ce7ab63ab825 /Master/texmf-dist/doc/latex/probsoln | |
parent | 2f2e79372e149e87d92bdd0d33d596793e6b1252 (diff) |
probsoln 3.0 (27aug08)
git-svn-id: svn://tug.org/texlive/trunk@10474 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/probsoln')
22 files changed, 1919 insertions, 619 deletions
diff --git a/Master/texmf-dist/doc/latex/probsoln/CHANGES b/Master/texmf-dist/doc/latex/probsoln/CHANGES index 764317dda61..d360323d06f 100644 --- a/Master/texmf-dist/doc/latex/probsoln/CHANGES +++ b/Master/texmf-dist/doc/latex/probsoln/CHANGES @@ -1,5 +1,9 @@ probsoln package versions: +Version 3.0: Rewrote package to use data sets to make it easy +to reuse problems so that the solutions can be placed in +a different section of the document to the questions. + Version 2.04: fixed license text Version 2.03: Added starred form of \newproblem for problems without diff --git a/Master/texmf-dist/doc/latex/probsoln/README b/Master/texmf-dist/doc/latex/probsoln/README index 2edd170d254..a6da627ffdd 100644 --- a/Master/texmf-dist/doc/latex/probsoln/README +++ b/Master/texmf-dist/doc/latex/probsoln/README @@ -1,6 +1,6 @@ -LaTeX Package : probsoln v 2.04 +LaTeX Package : probsoln v 3.0 -Last Modified : 21 Aug 2007 +Last Modified : 26 Aug 2008 Author : Nicola L.C. Talbot diff --git a/Master/texmf-dist/doc/latex/probsoln/probsoln-manual.html b/Master/texmf-dist/doc/latex/probsoln/probsoln-manual.html index 0e24ce57ccd..74e787ec6b0 100644 --- a/Master/texmf-dist/doc/latex/probsoln/probsoln-manual.html +++ b/Master/texmf-dist/doc/latex/probsoln/probsoln-manual.html @@ -7,9 +7,9 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> <HTML> <HEAD> -<TITLE>probsoln.sty v2.04: LATEX2e Package to help create problem sheets</TITLE> -<META NAME="description" CONTENT="probsoln.sty v2.04: LATEX2e Package to help create problem sheets"> -<META NAME="keywords" CONTENT="manual"> +<TITLE>probsoln v3.0: creating problem sheets optionally with solutions</TITLE> +<META NAME="description" CONTENT="probsoln v3.0: creating problem sheets optionally with solutions"> +<META NAME="keywords" CONTENT="probsoln-manual"> <META NAME="resource-type" CONTENT="document"> <META NAME="distribution" CONTENT="global"> @@ -21,11 +21,27 @@ original version by: Nikos Drakos, CBLU, University of Leeds </HEAD> <BODY > +<A NAME="top"></A> - <H1 ALIGN="CENTER">probsoln.sty v2.04: L<SUP><SMALL>A</SMALL></SUP>T<SMALL>E</SMALL>X2<SUB>e</SUB> Package to help create problem sheets</H1> -<P ALIGN="CENTER"><STRONG>Nicola L.C. Talbot</STRONG></P> -<P ALIGN="CENTER"><STRONG>21st August 2007</STRONG></P> - <BR> +<P> + +<P> + + <H1 ALIGN="CENTER">probsoln v3.0: creating problem sheets optionally with solutions</H1> +<P ALIGN="CENTER"><STRONG>Nicola L.C. Talbot +<BR> +<BR> +School of Computing Sciences +<BR> +University of East Anglia +<BR> +Norwich. Norfolk +<BR> +NR4 7TJ. United Kingdom. +<BR><TT><A NAME="tex2html1" + HREF="http://theoval.cmp.uea.ac.uk/~nlct/">http://theoval.cmp.uea.ac.uk/~nlct/</A></TT></STRONG></P> +<P ALIGN="CENTER"><STRONG>26th August 2008</STRONG></P> +<BR> <H2><A NAME="SECTION00010000000000000000"> Contents</A> @@ -33,41 +49,34 @@ Contents</A> <!--Table of Contents--> <UL> +<LI><A NAME="tex2html16" + HREF="probsoln-manual.html#SECTION00020000000000000000">1 Introduction</A> +<LI><A NAME="tex2html17" + HREF="probsoln-manual.html#SECTION00030000000000000000">2 Package Options</A> <LI><A NAME="tex2html18" - HREF="#SECTION00020000000000000000">Introduction</A> + HREF="probsoln-manual.html#SECTION00040000000000000000">3 Showing and Hiding Solutions</A> <LI><A NAME="tex2html19" - HREF="#SECTION00030000000000000000">Package Options</A> + HREF="probsoln-manual.html#SECTION00050000000000000000">4 General Formatting Commands</A> <LI><A NAME="tex2html20" - HREF="#SECTION00040000000000000000">Creating a New Problem</A> + HREF="probsoln-manual.html#SECTION00060000000000000000">5 Defining a Problem</A> <LI><A NAME="tex2html21" - HREF="#SECTION00050000000000000000">Creating a Database</A> + HREF="probsoln-manual.html#SECTION00070000000000000000">6 Using a Problem</A> <LI><A NAME="tex2html22" - HREF="#SECTION00060000000000000000">Displaying a Problem</A> + HREF="probsoln-manual.html#SECTION00080000000000000000">7 Loading Problems From External Files</A> <LI><A NAME="tex2html23" - HREF="#SECTION00070000000000000000">Selecting All Problems</A> + HREF="probsoln-manual.html#SECTION00090000000000000000">8 Iterating Through Datasets</A> <LI><A NAME="tex2html24" - HREF="#SECTION00080000000000000000">Selecting Problems at Random</A> + HREF="probsoln-manual.html#SECTION000100000000000000000">9 Random Number Generator</A> <LI><A NAME="tex2html25" - HREF="#SECTION00090000000000000000">Other Commands</A> + HREF="probsoln-manual.html#SECTION000110000000000000000">10 Compatibility With Versions Prior to 3.0</A> <LI><A NAME="tex2html26" - HREF="#SECTION000100000000000000000">Troubleshooting</A> -<UL> -<LI><A NAME="tex2html27" - HREF="#SECTION000101000000000000000">Unexpected Output</A> -<LI><A NAME="tex2html28" - HREF="#SECTION000102000000000000000">Error Messages</A> -</UL> -<BR> -<LI><A NAME="tex2html29" - HREF="#SECTION000110000000000000000">Contact Details</A> -<LI><A NAME="tex2html30" - HREF="#SECTION000120000000000000000">Index</A> + HREF="probsoln-manual.html#SECTION000120000000000000000">Index</A> </UL> <!--End of Table of Contents--> <P> <H1><A NAME="SECTION00020000000000000000"> -Introduction</A> +1 Introduction</A> </H1> The <TT>probsoln</TT> package is designed for teachers or lecturers who want to create problem sheets for their @@ -75,7 +84,7 @@ students. This package was designed with specifically mathematics problems in mind, but can be used for other subjects as well. The idea is to create a file containing a large number of problems with their solutions which can be -read in by L<SUP><SMALL>A</SMALL></SUP>T<SMALL>E</SMALL>X, and then select a number of problems to +read in by LaTeX, and then select a number of problems to typeset. This means that once the database has been set up, each year you can easily create a new problem sheet that is sufficiently different from the previous year, thus @@ -87,666 +96,898 @@ printed. In this way, one file can either produce the student's version or the teacher's version. <P> +<A HREF="probsoln-manual.html#top">Top</A> + +<P> -<H1><A NAME="SECTION00030000000000000000"> -Package Options</A> +<H1><A NAME="SECTION00030000000000000000"></A><A NAME="sec:pkgopt"></A> +<BR> +2 Package Options </H1> The following options may be passed to this package: -<DIV ALIGN="CENTER"> -<TABLE CELLPADDING=3> -<TR><TD ALIGN="LEFT"><TT></TD><TD ALIGN="LEFT">answers </TT></TD> -<TD ALIGN="LEFT">Show the answers</TD> -</TR> -<TR><TD ALIGN="LEFT"><TT></TD><TD ALIGN="LEFT">noanswers </TT></TD> -<TD ALIGN="LEFT">Don't show the answers (default)</TD> -</TR> -</TABLE> -</DIV> +<DL> +<DT><STRONG><TT>answers</TT><A NAME="673"></A></STRONG></DT> +<DD>Show the answers +</DD> +<DT><STRONG><TT>noanswers</TT><A NAME="676"></A></STRONG></DT> +<DD>Don't show the answers (default) +</DD> +<DT><STRONG><TT>draft</TT><A NAME="679"></A></STRONG></DT> +<DD>Display the label and dataset name when a problem is used +</DD> +<DT><STRONG><TT>final</TT><A NAME="682"></A></STRONG></DT> +<DD>Don't display label and dataset name when a problem is used +</DD> +</DL> <P> +<A HREF="probsoln-manual.html#top">Top</A> -<H1><A NAME="SECTION00040000000000000000"> -Creating a New Problem</A> -</H1> +<P> -<A NAME="newproblem"></A><TT>newproblem</TT><A NAME="386"></A><code>[</code><I>nargs</I><code>]{</code><I>label</I><code>}{</code><I>problem</I><code>}{</code><I>solution</I><code>}</code> -<BR> -<BR> -A new problem is defined using the command -<TT>\newproblem</TT><A NAME="389"></A>. This does not print anything, -but merely stores the problem. As from version 2.03, there is also -a starred version of this command for problems without a solution -(for example, essay style questions): +<H1><A NAME="SECTION00040000000000000000"></A><A NAME="sec:showanswers"></A> <BR> -<BR> -<A NAME="newproblem_"></A><TT>newproblem*</TT><A NAME="393"></A><code>[</code><I>nargs</I><code>]{</code><I>label</I><code>}{</code><I>problem</I><code>}</code> -<BR> -<BR> -The argument <I>label</I> is -a unique string that is assigned to this problem so that it -can be used later. The argument <I>problem</I> is normal -L<SUP><SMALL>A</SMALL></SUP>T<SMALL>E</SMALL>X code that should be used to typeset the problem. -The argument <I>solution</I> is normal L<SUP><SMALL>A</SMALL></SUP>T<SMALL>E</SMALL>X code that -should be used to typeset the solution, if required. For -example, the following defines a problem with the label -<A NAME="quaddiff"></A><TT>quaddiff</TT>: +3 Showing and Hiding Solutions +</H1> + +<P> +In addition to the <TT>answers</TT><A NAME="688"></A> and <TT>noanswers</TT><A NAME="691"></A> package +options, it is also possible to show or suppress the solutions +using <TT>\showanswers</TT> and +<TT>\hideanswers</TT>, respectively. +The boolean variable <TT>showanswers</TT><A NAME="694"></A> determines whether the +answers should be displayed. You can use this value with the +<TT>ifthen</TT><A NAME="697"></A> package to specify different text depending on +whether the solutions should be displayed. For example: <PRE> - \newproblem{quaddiff}{% - %This is the problem - \begin{displaymath} - f(x) = x^2 + 3x + 4 - \end{displaymath} - }{% - %This is the solution - \begin{displaymath} - f'(x) = 2x + 3 - \end{displaymath} - } +Assignment 1\ifthenelse{\boolean{showanswers}}{ (Solution Sheet)}{} </PRE> -The following is an essay question, so doesn't come with a solution: +Alternatively you can use <TT>\ifshowanswers</TT><A NAME="700"></A>...<TT>\else</TT>... +<TT>\fi</TT>: <PRE> -\newproblem*{inheritance}{Describe what is meant by the term -\emph{inheritance} in object-oriented programming. Use examples.} +Assignment 1\ifshowanswers\space (Solution Sheet)\fi </PRE> <P> -The optional argument <I>nargs</I> specifies the number of -parameters this problem will take. By default this value is -0, but any value from 1 to 9 may be used. Each parameter is -referred to by <code>#1</code>, <code>#2</code>, ..., <code>#9</code>. -For example, the following problem, labelled <A NAME="sindiff"></A><TT>sindiff</TT>, -takes one parameter: +For longer passages, you can use the environments <A NAME="1547"></A><TT>onlyproblem</TT> +and <A NAME="1551"></A><TT>onlysolution</TT>. For example: <PRE> -\newproblem[1]{sindiff}{% -\(f(x) = \sin(#1x)\) -}{% -\(f'(x) = #1\cos(#1x)\) -} +\begin{onlyproblem}% +What is the derivative of $f(x) = x^2$? +\end{onlyproblem}% +\begin{onlysolution}% +$f'(x) = 2x$ +\end{onlysolution} </PRE> - -<P> -The <A HREF="#quaddiff"><TT>quaddiff</TT></A> problem shown above can be made more -generic by using parameters<A NAME="diff:quad"></A>: +The above will only display the question if <TT>showanswers</TT><A NAME="705"></A> +is false and will only display the solution if <TT>showanswers</TT><A NAME="708"></A> +is true. If you want the question to appear in the answer +sheet as well as the solution, then don't put the question in +the <TT>onlyproblem</TT> environment: <PRE> -\newcount\ctr -\newproblem[3]{diff:quad}{% -\(f(x) = -\ifnum#1=0 -\else -\ifnum#1=1\else#1\fi x^2 -\fi -\ifnum#2=0 -\else -\ifnum#2>0 \ifnum#1=0 \else + \fi \fi -\ifnum#2=1\else#2\fi x -\fi -\ifnum#3=0 -\else -\ifnum#3>0 \ifnum#2=0 \ifnum#1=0 \else + \fi \else + \fi\fi -#3 -\fi\) -}{% -\(f'(x) = -\ifnum#1=0 -\else -\ctr=2 -\multiply\ctr by #1 -\the\ctr x -\fi -\ifnum#2=0 -\else -\ifnum#2>0 \ifnum#1=0 \else + \fi \fi -#2 -\fi - % print 0 if both #1 and #2 are 0 -\ifnum#1=0 \ifnum#2=0 0 \fi\fi -\) -} +What is the derivative of $f(x) = x^2$? +\begin{onlysolution}% +Solution: $f'(x) = 2x$ +\end{onlysolution} </PRE> -The three parameters correspond to the coefficients. Note -that they must all be integers since T<SMALL>E</SMALL>X only performs -integer arithmetic. +<B>NOTE:</B> You can't use verbatim text in the body of the +<TT>onlyproblem</TT><A NAME="712"></A> or <TT>onlysolution</TT><A NAME="715"></A> environments. +If you need verbatim-like text, then try packages such as +<TT>alltt</TT><A NAME="718"></A>. Remember that you also can't use verbatim +text in command arguments. <P> +<A HREF="probsoln-manual.html#top">Top</A> -<H1><A NAME="SECTION00050000000000000000"> -Creating a Database</A> +<P> + +<H1><A NAME="SECTION00050000000000000000"></A><A NAME="sec:formatting"></A> +<BR> +4 General Formatting Commands </H1> <P> -To generate a database, simply create a <TT>.tex</TT> file -where all the problems are defined using <A HREF="#newproblem"><TT>newproblem</TT><A NAME="407"></A></A> or -<A HREF="#newproblem_"><TT>newproblem*</TT><A NAME="412"></A></A>, -and either <TT>\input</TT><A NAME="415"></A> it at the start of your document if -you want to use <A HREF="#sec:useprob">specific problems</A>, or pass it to -<A HREF="#sec:selran"><TT>\selectrandomly</TT><A NAME="421"></A></A>. This package -comes with some sample databases, along with some sample documents -that use these databases. +The commands and environments described in this section are +provided to assist formatting problems and their solutions. +<A NAME="1556"></A> +<BR CLEAR="ALL"> +<HR><code>\begin{solution}</code><I>text</I><code>\end{solution}</code> +<BR CLEAR="ALL"> +<HR>This is equivalent to +<code>\par\noindent\textbf{\solutionname}:</code><I>text</I> +where <TT>\solutionname</TT> defaults +to "Solution". Note that you must place the <TT>solution</TT> +environment inside the <TT>onlysolution</TT><A NAME="725"></A> environment or +between <TT>\ifshowanswers</TT><A NAME="728"></A>...<TT>\fi</TT> to ensure that it +is suppressed when the solutions are not wanted. (See +<A HREF="probsoln-manual.html#sec:showanswers">Showing and +Hiding Solutions</A>.) + +<P> +Note that the <TT>probsoln</TT> package will only define the +<TT>solution</TT> environment if it is not already defined. + +<P> +<A NAME="1560"></A> +<BR CLEAR="ALL"> +<HR><code>\begin{textenum}</code>...<code>\end{textenum}</code> +<BR CLEAR="ALL"> +<HR>The <TT>textenum</TT> environment is like the <TT>enumerate</TT><A NAME="734"></A> +environment but is in-line. It uses the same counter that the +<TT>enumerate</TT> environment would use at that level so the +question can be compact but the answer can use <TT>enumerate</TT> +instead. For example: +<PRE> +\begin{onlyproblem}% +Differentiate the following: +\begin{textenum} +\item $f(x)=2^x$; +\item $f(x)=\cot(x)$ +\end{textenum} +\end{onlyproblem} +\begin{onlysolution} +\begin{enumerate} +\item +\begin{align*} +f(x) &= 2^x = \exp(\ln(x^2)) =\exp(2\ln(x))\\ +f'(x) &= \exp(2\ln(x))\times \frac{2}{x}\\ + &= f(x)\frac{2}{x} +\end{align*} +\item +\begin{align*} +f(x) &= \cot(x) = (\tan(x))^{-2}\\ +f'(x) &= -(\tan(x))^{-2}\times\sec^2(x)\\ +&=-\csc^2x +\end{align*} +\end{enumerate} +\end{onlysolution} +</PRE> +In this example, the items in the question are brief, so an +<TT>enumerate</TT><A NAME="739"></A> environment would result in a lot of +unnecessary white space, +but the answers require more space, so an <TT>enumerate</TT> +environment is more appropriate. Since the <TT>textenum</TT><A NAME="743"></A> +environment uses the same counters as the <TT>enumerate</TT> +environment, the question and answer sheets use consistent +labelling. Note that there are other packages available on +CTAN that you can use to create in-line lists. Check the +<A NAME="tex2html2" + HREF="http://www.tex.ac.uk/tex-archive/help/Catalogue/bytopic.html#enumeration">TeX +Catalogue</A> for +further details. + +<P> + +<BR CLEAR="ALL"> +<HR><TT>\correctitem</TT><A NAME="747"></A> +<BR><TT>\incorrectitem</TT><A NAME="750"></A> +<BR CLEAR="ALL"> +<HR>You can use the commands <TT>\correctitem</TT> and <TT>\incorrectitem</TT> +in place of <TT>\item</TT><A NAME="753"></A>. If the solutions are suppressed, these +commands behave in the same way as <TT>\item</TT>, otherwise they +format the item label using one of the commands: + +<BR CLEAR="ALL"> +<HR><TT>\correctitemformat</TT><A NAME="756"></A><TT>{</TT><EM>label</EM><TT>}</TT> +<BR><TT>\incorrectitemformat</TT><A NAME="759"></A><TT>{</TT><EM>label</EM><TT>}</TT> +<BR CLEAR="ALL"> +<HR>For example: +<PRE> +Under which of the following functions does $S=\{a_1,a_2\}$ +become a probability space? +\begin{enumerate} +\incorrectitem $P(a_1)=\frac{1}{3}$, $P(a_2)=\frac{1}{2}$ +\correctitem $P(a_1)=\frac{3}{4}$, $P(a_2)=\frac{1}{4}$ +\correctitem $P(a_1)=1$, $P(a_2)=0$ +\incorrectitem $P(a_1)=\frac{5}{4}$, $P(a_2)=-\frac{1}{4}$ +\end{enumerate} +</PRE> + +<P> +<A HREF="probsoln-manual.html#top">Top</A> <P> -<H1><A NAME="SECTION00060000000000000000"></A> -<A NAME="sec:useprob"></A> +<H1><A NAME="SECTION00060000000000000000"></A><A NAME="sec:defproblem"></A> <BR> -Displaying a Problem +5 Defining a Problem </H1> - -<A NAME="useproblem"></A><TT>useproblem</TT><A NAME="425"></A><code>{</code><I>label</I><code>}</code> -<BR> -<BR> -Once a problem has been defined using <A HREF="#newproblem"><TT>newproblem</TT><A NAME="430"></A></A>, it -can be typeset using the command <TT>\useproblem</TT><A NAME="433"></A>. If the -problem was defined to take arguments, the arguments to the -problem should come after the label. In the case of the -<A HREF="#sindiff"><TT>sindiff</TT></A> example above, the command -<code>\useproblem{sindiff}{2}</code> would produce the following: -<BR> -<BR> <I>f</I>(<I>x</I>) = sin(2<I>x</I>) - -<H4><A NAME="SECTION00060010000000000000"> -Solution:</A> -</H4> <I>f'</I>(<I>x</I>) = 2cos(2<I>x</I>) -<BR> -<BR> -whereas the command <code>\useproblem{diff:quad}{3}{0}{-2}</code> would produce: -<BR> -<BR> <I>f</I>(<I>x</I>) = 3<I>x</I><SUP>2</SUP> - 2 - -<H4><A NAME="SECTION00060020000000000000"> -Solution:</A> -</H4> <I>f'</I>(<I>x</I>) = 6<I>x</I> -<BR> -<BR> <P> -Suppose all the above problems are defined in the file -<TT>probs.tex</TT>, then the following code will create a -problem sheet with four questions in it: +It is possible to construct a problem sheet with solutions using +the commands described in the previous sections, however it is +also possible to define a set of problems for later use. In this +way you can create an external file containing many problems some +or all of which can be loaded and used in a document. The +<TT>probsoln</TT> package has a default data set labelled +"default" in which you can store problems or you can create +multiple data sets. You can then iterate through each problem +in a problem set. You can use a previously defined problem more +than once, which means that by judicious use of <TT>onlyproblem</TT><A NAME="766"></A>, +<TT>onlysolution</TT><A NAME="769"></A> or the <TT>showanswers</TT><A NAME="772"></A> boolean variable +in conjunction with <TT>\showanswers</TT><A NAME="775"></A> and <TT>\hideanswers</TT><A NAME="778"></A>, +you can print the solutions in a different location to the +questions (for example in an appendix). + +<P> +<A NAME="1565"></A> +<BR CLEAR="ALL"> +<HR><code>\begin{defproblem}</code><TT>[</TT><EM>n</EM><TT>]{</TT><EM>label</EM><TT>}</TT><I>definition</I><code>\end{defproblem}</code> +<BR CLEAR="ALL"> +<HR>This defines the problem whose label is given by <I>label</I>. +The label must be unique for a given data set and should not +contain active characters. (Active characters include the special +characters such as $ and &, but some packages may make other +symbols active. For example, the <TT>ngerman</TT><A NAME="781"></A> and <TT>babel</TT><A NAME="784"></A> +packages make certain punctuation active. Check the relevant +package documentation for details.) + +<P> +If <TT>defproblem</TT> occurs in the document or is included via +<TT>\input</TT> or <TT>\include</TT>, then the problem will be added to +the default data set. If <TT>defproblem</TT> occurs in an external +file that is loaded using one of the commands defined in +<A HREF="probsoln-manual.html#sec:load">Loading Problems From +External Files</A> then the problem will be added to +the specified data set. + +<P> +The contents of the <TT>defproblem</TT> environment should be the +text that defines the problem. This may include any of the +commands defined in +<A HREF="probsoln-manual.html#sec:showanswers">Showing and Hiding +Solutions</A> and <A HREF="probsoln-manual.html#sec:formatting">General Formatting +Commands</A>. + +<P> +The problem may optionally take <I>n</I> arguments (where +<I>n</I> is from 0 to 9). The arguments can be referenced +in the definition via <TT>#1</TT>,...,<TT>#9</TT>. +If <I>n</I> is omitted then the problem doesn't take any +arguments. +The following example defines a problem with one argument: <PRE> -\documentclass{article} +\begin{defproblem}[1]{diffsin} +Differentiate $f(x)=\sin(#1x)$. +\begin{onlysolution}% +\begin{solution} +$f'(x) = #1\cos(#1x)$ +\end{solution} +\end{onlysolution} +\end{defproblem} +</PRE> -\usepackage{probsoln} -\input{probs} +<P> -\begin{document} -Differentiate the following functions with respect to $x$: -\begin{enumerate} -\item \useproblem{quaddiff} -\item \useproblem{sindiff}{4} -\item \useproblem{diff:quad}{2}{3}{1} -\item \useproblem{diff:quad}{0}{1}{2} -\end{enumerate} -\end{document} +<BR CLEAR="ALL"> +<HR><TT>\newproblem</TT><A NAME="790"></A><TT>[</TT><EM>n</EM><TT>]{</TT><EM>label</EM><TT>}{</TT><EM>problem</EM><TT>}{</TT><EM>solution</EM><TT>}</TT> +<BR CLEAR="ALL"> +<HR>This is a shortcut command for: +<TT> +<TT>\begin</TT>{defproblem}<TT>[</TT><EM>n</EM><TT>]{</TT><EM>label</EM><TT>}</TT>% +<I>problem</I>% +<TT>\begin</TT>{onlysolution}% +<TT>\begin</TT>{solution}% +<I>solution</I>% +<TT>\end</TT>{solution}% +<TT>\end</TT>{onlysolution}% +<TT>\end</TT>{defproblem} +</TT> +For example: +<PRE> +\newproblem[1]{diffsin}{% +\(f(x) = \sin(#1x)\) +}{% +\(f'(x) = #1\cos(#1x)\) +} +</PRE> +is equivalent to +<PRE> +\begin{defproblem}[1]{diffcos}% +\(f(x) = \cos(#1x)\) +\begin{onlysolution}% +\begin{solution}% +\(f'(x) = -#1\sin(#1x)\) +\end{solution}% +\end{onlysolution}% +\end{defproblem} </PRE> -The answer sheet can then be generated by passing the option -<TT>answers</TT> to the <TT>probsoln</TT> package. +(In this example, the argument will need to be a positive number +to avoid a double minus in the answer. If you want to perform +floating point arithmetic on the arguments, then try the +<TT>fp</TT><A NAME="793"></A> package.) <P> -<H1><A NAME="SECTION00070000000000000000"> -Selecting All Problems</A> -</H1> +<BR CLEAR="ALL"> +<HR><TT>\newproblem*</TT><A NAME="796"></A><TT>[</TT><EM>n</EM><TT>]{</TT><EM>label</EM><TT>}{</TT><EM>definition</EM><TT>}</TT> +<BR CLEAR="ALL"> +<HR>This is a shortcut for: +<TT> +<TT>\begin</TT>{defproblem}<TT>[</TT><EM>n</EM><TT>]{</TT><EM>label</EM><TT>}</TT>% +<I>definition</I>% +<TT>\end</TT>{defproblem} +</TT> <P> -To select all problems defined in a database, in the order in -which they were defined, use the command: +<B>NOTE:</B> Verbatim text must not be used in the contents of <TT>defproblem</TT><A NAME="799"></A> +or in any of the arguments to <TT>\newproblem</TT> or +<TT>\newproblem*</TT>. If you need verbatim-like text consider using +<TT>\texttt</TT> or the <TT>alltt</TT><A NAME="802"></A> package. -<A NAME="selectallproblems"></A><TT>selectallproblems</TT><A NAME="440"></A><code>{</code><I>filename</I><code>}</code> -For example, suppose the problems are defined in the file -<TT>easy.tex</TT>, then the following will create a problem sheet -which uses all these problems: -<PRE> -\documentclass[a4paper]{article} +<P> +<A HREF="probsoln-manual.html#top">Top</A> -\usepackage{probsoln} +<P> -\begin{document} -Differentiate the following functions: -\begin{enumerate} -\selectallproblems{easy} -\end{enumerate} -\end{document} +<H1><A NAME="SECTION00070000000000000000"></A><A NAME="sec:useproblem"></A> +<BR> +6 Using a Problem +</H1> + +<P> +Once you have defined a problem using <TT>defproblem</TT><A NAME="808"></A> or +<TT>\newproblem</TT> (see +<A HREF="probsoln-manual.html#sec:defproblem">Defining a +Problem</A>), you can later display the problem +using: + +<BR CLEAR="ALL"> +<HR><TT>\useproblem</TT><A NAME="811"></A><TT>[</TT><EM>data set</EM><TT>]{</TT><EM>label</EM><TT>}{</TT><EM>arg<SUB>1</SUB></EM><TT>}</TT>... +<TT>{</TT><EM>arg<SUB>N</SUB></EM><TT>}</TT> +<BR CLEAR="ALL"> +<HR>where <I>data set</I> is the name of the data set that contains +the problem (the default data set is used if omitted), +<I>label</I> is the label identifying the required problem and +<I>arg<SUB>1</SUB></I>, ..., +<I>arg<SUB>N</SUB></I> +are the arguments to pass to the problem, if the problem was +defined to have arguments (where N is the number +of arguments specified when the problem was defined). + +<P> +For example, in the previous section the problem <TT>diffcos</TT> +was defined to have one argument, so it can be used as follows: +<PRE> +\useproblem{diffcos}{3} +</PRE> +This will be equivalent to: +<PRE> +\(f(x) = \cos(3x)\) +\begin{onlysolution}% +\begin{solution}% +\(f'(x) = -3\sin(3x)\) +\end{solution}% +\end{onlysolution}% </PRE> <P> +<A HREF="probsoln-manual.html#top">Top</A> -<H1><A NAME="SECTION00080000000000000000"></A> -<A NAME="sec:selran"></A> +<P> + +<H1><A NAME="SECTION00080000000000000000"></A><A NAME="sec:load"></A> <BR> -Selecting Problems at Random +7 Loading Problems From External Files </H1> - -<A NAME="selectrandomly"></A><TT>selectrandomly</TT><A NAME="444"></A><code>{</code><I>filename</I><code>}{</code><I>n</I><code>}</code> -<BR> -<BR> -The command <TT>\selectrandomly</TT><A NAME="447"></A> will select <I>n</I> -problems that are defined in the file <I>filename</I>. Each -problem is proceeded by -<A NAME="PSitem"></A><TT>PSitem</TT><A NAME="451"></A> which is -defined to be <TT>\item</TT><A NAME="454"></A>, so the command -<TT>\selectrandomly</TT><A NAME="457"></A> should occur within one of the -list-like environments, such as <TT>enumerate</TT>. -For example: + +<P> +You can store all your problem definitions (see +<A HREF="probsoln-manual.html#sec:defproblem">Defining New +Problems</A>) in an external file. +These problems can all be appended to the default data set by +including the file via <TT>\input</TT><A NAME="817"></A> or they can be appended +to other data sets using one of the commands described below. +Once you have loaded all the required problems, you can +iterate through the data sets using the commands described +in <A HREF="probsoln-manual.html#sec:foreach">Iterating +Through Datasets</A>. Note that the commands below +will create a new data set, if the named data set doesn't +exist. + +<P> + +<BR CLEAR="ALL"> +<HR><TT>\loadallproblems</TT><A NAME="820"></A><TT>[</TT><EM>data set</EM><TT>]{</TT><EM>filename</EM><TT>}</TT> +<BR CLEAR="ALL"> +<HR>This will load all problems defined in <I>filename</I> and +append them to the specified data set, in the order in which +they are defined in the file. If <I>data set</I> is +omitted, the default data set will be used. If <I>data set</I> +doesn't exist, it will be created. + +<P> + +<BR CLEAR="ALL"> +<HR><TT>\loadselectedproblems</TT><A NAME="823"></A><TT>[</TT><EM>data set</EM><TT>]{</TT><EM>labels</EM><TT>}{</TT><EM>filename</EM><TT>}</TT> +<BR CLEAR="ALL"> +<HR>This is like <TT>\loadproblems</TT>, but only those problems whose +label is listed in the comma-separated list <I>labels</I> are +loaded. For example, if I have some problems defined in the +file <TT>derivatives.tex</TT>, then <PRE> -\begin{enumerate} -\selectrandomly{easy.tex}{4} -\end{enumerate} +\loadselectedproblems{diffsin,diffcos}{derivatives} </PRE> -will result in four numbered problems, selected at random -from the file <TT>easy.tex</TT>. (The <TT>.tex</TT> extension -may be omitted.) Each problem is followed by the command -<A NAME="endPSNitem"></A><TT>endPSNitem</TT><A NAME="461"></A> which by default does nothing. +will only load the problems whose labels are <TT>diffsin</TT> +and <TT>diffcos</TT>, respectively. All the other problems in +the file will remain undefined. <P> -Multiple <TT>\selectrandomly</TT><A NAME="464"></A> commands may be used, however a -different file must be used each time. For -example: -<PRE> -\begin{enumerate} -\item Differentiate the following functions with respect to $x$: -\begin{enumerate} -\selectrandomly{samples/easy.tex}{3} -\selectrandomly{samples/args.tex}{1} -\end{enumerate} +<BR CLEAR="ALL"> +<HR><TT>\loadrandomproblems</TT><A NAME="826"></A><TT>[</TT><EM>data set</EM><TT>]{</TT><EM>n</EM><TT>}{</TT><EM>filename</EM><TT>}</TT> +<BR CLEAR="ALL"> +<HR>This randomly loads <I>n</I> problems from <I>filename</I> and +adds them to the given data set. If <I>data set</I> is omitted, +the default data set is assumed. Note that the problems will be +added to the data set in a random order, not in the order in +which they were defined. There must be at least <I>n</I> problems +defined in <I>filename</I>. -\selectrandomly{samples/implicit.tex}{1} -\selectrandomly{samples/1stprncpl.tex}{1} +<P> +<B>NOTE:</B> It is generally not a good idea to place anything in +<I>filename</I> that is not inside the body of <TT>defproblem</TT><A NAME="829"></A> +or in the arguments to <TT>\newproblem</TT><A NAME="832"></A> or <TT>\newproblem*</TT><A NAME="835"></A>. +All the commands in this section input the external file within +a local scope, so commands definitions would need to be made +global to have any effect. In addition, <TT>\loadrandomproblems</TT> +has to load each file twice, which means that anything outside +a problem definition will be parsed twice. -\end{enumerate} -</PRE> -This will result in a total of 6 problems, numbered 1(a), -1(b), 1(c), 1(d), 2 and 3. +<P> <P> -If a randomly selected problem requires arguments, a message -similar to the following will be displayed: -<PRE> -Problem diff:quad requires 3 argument(s), please specify (e.g. {5}{3}): -</PRE> -Enter the required arguments, where each argument is -enclosed in braces ({ }). +<A HREF="probsoln-manual.html#top">Top</A> <P> -<H1><A NAME="SECTION00090000000000000000"> -Other Commands</A> +<H1><A NAME="SECTION00090000000000000000"></A><A NAME="sec:foreach"></A> +<BR> +8 Iterating Through Datasets </H1> -The command <A NAME="PSNrandseed"></A><TT>PSNrandseed</TT><A NAME="468"></A><code>{</code><I>n</I><code>}</code> specifies -the seed for the random number generator. For example, -if you are using <A HREF="#selectrandomly"><TT>selectrandomly</TT><A NAME="473"></A></A>, -<code>\PSNrandseed{\year}</code> will produce a different set of -problems each year, whereas <code>\PSNrandseed{\time}</code> -will produce a different set of problems each time you -L<SUP><SMALL>A</SMALL></SUP>T<SMALL>E</SMALL>X the problem sheet (as long as you leave at least a -minute between runs.) - -<P> -The command <A NAME="random"></A><TT>random</TT><A NAME="477"></A><code>{</code><I>counter</I><code>}{</code><I>a</I><code>}{</code><I>b</I><code>}</code> -generates a random number from <I>a</I> to <I>b</I> and -stores it in the L<SUP><SMALL>A</SMALL></SUP>T<SMALL>E</SMALL>X counter <I>counter</I>. For example, -to select 2, 3 or 4 problems from the file -<TT>implicit.tex</TT>: +<P> +Once you have defined all your problems for a given data set, +you can use an individual problem with <TT>\useproblem</TT><A NAME="841"></A> +(see <A HREF="probsoln-manual.html#sec:useproblem">Using a +Problem</A>) but it is more likely that you will +want to iterate through all the problems so that you don't need +to remember the labels of all the problems you have defined. + +<P> + +<BR CLEAR="ALL"> +<HR><TT>\foreachproblem</TT><A NAME="844"></A><TT>[</TT><EM>data set</EM><TT>]{</TT><EM>body</EM><TT>}</TT> +<BR CLEAR="ALL"> +<HR>This does <I>body</I> for each problem in the given data set. +If <I>data set</I> is omitted, the default data set is used. +Within <I>body</I> you can use +<TT>\thisproblem</TT> to use the +current problem and <TT>\thisproblemlabel</TT> +to access the current label. If the problem requires arguments, +you will be prompted for them, so if you want to use this +approach you will need to use LaTeX in interactive mode. If +you do provide arguments, they will be stored in the event that +you need to iterate through the data set again. The +arguments will be included in <TT>\thisproblem</TT>, so you only +need to use <TT>\thisproblem</TT> without having to specify +<TT>\useproblem</TT><A NAME="847"></A>. For example, to iterate through all problems +in the default data set: <PRE> -\newcounter{numproblems} \begin{enumerate} -\random{numproblems}{2}{4} -\selectrandomly{implicit.tex}{\value{numproblems}} +\foreachproblem{\item\thisproblem} \end{enumerate} </PRE> -(Note the use of <TT>\value</TT><A NAME="480"></A>.) <P> -This command can also be used to generate random values for -problems that take arguments. Consider the problem <A HREF="#diff:quad"><TT>diff:quad</TT></A> -defined earlier. Three counters can be defined to represent the -three coefficients: -<PRE> -\newcounter{A} -\newcounter{B} -\newcounter{C} -</PRE> -Random values can now be assigned to these counters: + +<BR CLEAR="ALL"> +<HR><TT>\foreachdataset</TT><A NAME="850"></A><TT>{</TT><EM>cmd</EM><TT>}{</TT><EM>body</EM><TT>}</TT> +<BR CLEAR="ALL"> +<HR>This does <I>body</I> for each of the defined data sets. Within +<I>body</I>, <I>cmd</I> will be set to the name of the current +data set. For example, to display all problems in all data sets: <PRE> -\random{A}{-5}{5} -\random{B}{-5}{5} -\random{C}{-5}{5} +\begin{enumerate} +\foreachdataset{\thisdataset}{% +\foreachproblem[\thisdataset]{\item\thisproblem}} +\end{enumerate} </PRE> -Finally, the problem can be used (note the use of <TT>\arabic</TT><A NAME="486"></A>): -<PRE> -\useproblem{diff:quad}{\arabic{A}}{\arabic{B}}{\arabic{C}} -</PRE> - -<P> -The command -<A NAME="doforrandN"></A><TT>doforrandN</TT><A NAME="490"></A><code>{</code><I>n</I><code>}{</code><I>cmd</I><code>}{</code><I>list</I><code>}{</code><I>text</I><code>}</code> will apply -<I>text</I> for a random selection of <I>n</I> items in the -comma separated <I>list</I>. In each iteration the list -item is denoted by <I>cmd</I>. For example, suppose you -have three files called <TT>file1.tex</TT>, -<TT>file2.tex</TT> and <TT>file3.tex</TT>, and you want to -select 1 problem from two of the three files, then you can -do: + +<P> +Suppose I have two external files called +<TT>derivatives.tex</TT> and <TT>probspaces.tex</TT> which +define problems using both <TT>onlyproblem</TT><A NAME="853"></A> and +<TT>onlysolution</TT><A NAME="856"></A> for example: <PRE> -\doforrandN{2}{\file}{file1,file2,file3}{\selectrandomly{\file}{1}} +\begin{defproblem}{cosxsqsinx}% +\begin{onlyproblem}% +$y = \cos(x^2)\sin x$.% +\end{onlyproblem}% +\begin{onlysolution}% +\[\frac{dy}{dx} = -\sin(x^2)2x\sin x + \cos(x^2)\cos x\] +\end{onlysolution}% +\end{defproblem} </PRE> -Note that it is also possible to do +I can write a document that creates two data sets, one for +the derivative problems and one for the problems about +probability spaces. I can then use <TT>\hideanswers</TT><A NAME="859"></A> and +iterate through the require data set to produce the problems. +Later, I can use <TT>\showanswers</TT><A NAME="862"></A> and iterate over all problems defined in both data +sets to produce the chapter containing all the answers. When +displaying the questions, I have taken advantage of the fact that +I can cross-reference items within an <TT>enumerate</TT><A NAME="865"></A> environment, +and redefined <TT>\theenumi</TT><A NAME="868"></A> to label the questions according to +the chapter. The cross-reference label is constructed from +the problem label and is referenced in the answer section to +ensure that the answers have the same label as the questions. <PRE> -\newcounter{numproblems} -\random{numproblems}{1}{3} -\selectrandomly{file\arabic{numproblems}}{1} -\random{numproblems}{1}{3} -\selectrandomly{file\arabic{numproblems}}{1} +\documentclass{report} +\usepackage{probsoln} +\begin{document} +\hideanswers +\chapter{Differentiation} +% randomly select 25 problems from derivatives.tex and add to +% the data set called 'deriv' +\loadrandomproblems[deriv]{25}{derivatives} + +% Display the problems +\renewcommand{\theenumi}{\thechapter.\arabic{enumi}} +\begin{enumerate} +\foreachproblem[deriv]{\item\label{prob:\thisproblemlabel}\thisproblem} +\end{enumerate} +% You may need to change \theenumi back here + +\chapter{Probability Spaces} +% randomly select 25 problems from probspaces.tex and add to +% the data set called 'spaces' +\loadrandomproblems[spaces]{25}{probspaces} + +% Display the problems +\renewcommand{\theenumi}{\thechapter.\arabic{enumi}} +\begin{enumerate} +\foreachproblem[spaces]{\item\label{prob:\thisproblemlabel}\thisproblem} +\end{enumerate} +% You may need to change \theenumi back here + +\appendix + +\chapter{Solutions} +\showanswers +\begin{itemize} +\foreachdataset{\thisdataset}{% +\foreachproblem[\thisdataset]{\item[\ref{prob:\thisproblemlabel}]\thisproblem} +} +\end{itemize} + +\end{document} </PRE> -however there is a possibility that the same file may be -selected twice which will cause an error. <P> -The command <A NAME="showanswers"></A><TT>showanswers</TT><A NAME="494"></A> will show the solutions from -that point on. May be localised by placing within a group. <P> -The command <A NAME="hideanswers"></A><TT>hideanswers</TT><A NAME="498"></A> will hide the solutions from -that point on. May be localised by placing within a group. +<A HREF="probsoln-manual.html#top">Top</A> <P> -The solution is placed inside the <TT>solution</TT> -environment. By default this environment simply does -<code>\par\noindent\textbf{\solutionname:} </code> at the start, where -<A NAME="solutionname"></A><TT>solutionname</TT><A NAME="503"></A> -has the value: Solution. See the file <TT>sample3.tex</TT>, which -comes with this package, for an illustration of how to -customise the way in which the randomly selected problems are -displayed. This sample file randomly selects multiple choice -problems stored in the file <TT>tabmchoice.tex</TT>, and displays them -in a longtable <TT>environment</TT>. As from version 2.03, the package -will not define this environment if another package or class file has -already defined it. + +<H1><A NAME="SECTION000100000000000000000"></A><A NAME="sec:random"></A> +<BR> +9 Random Number Generator +</H1> <P> -The boolean variable <TT>showanswers</TT> is defined to be -true if the answers are shown and false otherwise. You can -therefore do something like: -<PRE> -\ifthenelse{\boolean{showanswers}}{\textbf{Solution Sheet}}{} -</PRE> -and <B>Solution Sheet</B> will be printed only if the -answers are displayed. (For more information on -<TT>\ifthenelse</TT><A NAME="507"></A> and <TT>\boolean</TT><A NAME="510"></A> see the -documentation for the <TT>ifthen</TT> package by -David Carlisle.) +This package provides a pseudo-random number generator that is used +by <TT>\loadrandomproblems</TT><A NAME="874"></A>. <P> -The <TT>showanswers</TT> switch can also be used within the definition -of a problem, if you want the question to appear differently if the -solution is displayed. For example: + +<BR CLEAR="ALL"> +<HR><TT>\PSNrandseed</TT><A NAME="877"></A><TT>{</TT><EM>n</EM><TT>}</TT> +<BR CLEAR="ALL"> +<HR>This sets the seed to <I>n</I> which must be a non-zero integer. +For example, to generate a different set of random numbers +every time you LaTeX your document,<A NAME="tex2html3" + HREF="#foot462"><SUP>1</SUP></A> put the following in your +preamble: <PRE> -\newproblem{mc:prod}{% -Which of the following is the derivative of $x\sin(x)$? -(Circle the correct answer.) -\ifthenelse{\boolean{showanswers}}{}% -{\begin{description} -\item[A] $\sin(x)$ -\item[B] $x\cos(x)$ -\item[C] $\sin(x) + x\cos(x)$ -\end{description} -}}{% -\begin{description} -\item[A] $\sin(x)$ -\item[B] $x\cos(x)$ -\item[\textcircled{C}] $\sin(x) + x\cos(x)$ (product rule). -\end{description} -} +\PSNrandseed{\time} +</PRE> +or to generate a different set of random numbers every year you +LaTeX your document: +<PRE> +\PSNrandseed{\year} </PRE> -If the solutions are not displayed, the question will appear -as -<DL> -<DT></DT> -<DD>Which of the following is the derivative of -<I>x</I>sin(<I>x</I>)? -(Circle the correct answer.) -<DL> -<DT><STRONG>A</STRONG></DT> -<DD>sin(<I>x</I>) -</DD> -<DT><STRONG>B</STRONG></DT> -<DD><I>x</I>cos(<I>x</I>) -</DD> -<DT><STRONG>C</STRONG></DT> -<DD>sin(<I>x</I>)+<I>x</I>cos(<I>x</I>) -</DD> -</DL> -</DD> -</DL> -otherwise it will appear as: -<DL> -<DT></DT> -<DD>Which of the following is the derivative of -<I>x</I>sin(<I>x</I>)? -(Circle the correct answer.) -<DL> -<DT><STRONG>A</STRONG></DT> -<DD>sin(<I>x</I>) -</DD> -<DT><STRONG>B</STRONG></DT> -<DD><I>x</I>cos(<I>x</I>) -</DD> -<DT><STRONG><FONT SIZE="+2">©</FONT></STRONG></DT> -<DD>sin(<I>x</I>) + <I>x</I>cos(<I>x</I>) (product rule) -</DD> -</DL> -</DD> -</DL> <P> -<H1><A NAME="SECTION000100000000000000000"> -Troubleshooting</A> -</H1> +<BR CLEAR="ALL"> +<HR><TT>\PSNgetrandseed</TT><A NAME="880"></A><TT>{</TT><EM>register</EM><TT>}</TT> +<BR CLEAR="ALL"> +<HR>This stores the current seed in the count register specified by +<I>register</I>. +For example: +<PRE> +\newcount\myseed +\PSNgetrandseed{\myseed} +</PRE> -<H2><A NAME="SECTION000101000000000000000"> -Unexpected Output</A> -</H2> +<P> -<UL> -<LI>I have lots of blank space before the first problem when -using <A HREF="#selectrandomly"><TT>selectrandomly</TT><A NAME="515"></A></A>. +<BR CLEAR="ALL"> +<HR><TT>\PSNrandom</TT><A NAME="883"></A><TT>{</TT><EM>register</EM><TT>}{</TT><EM>n</EM><TT>}</TT> +<BR CLEAR="ALL"> +<HR>Generates a random integer from 1 to <I>n</I> and stores in +the count register specified by <I>register</I>. For example, +the following generates an integer from 1 to 10 and stores it +in the register <TT>\myreg</TT>: +<PRE> +\newcount\myreg +\PSNrandom{\myreg}{10} +</PRE> <P> -This is probably because you have lots of extraneous white space -in your database. <A HREF="#selectrandomly"><TT>selectrandomly</TT><A NAME="520"></A></A> will input the entire -file, so any extra space will be included. Try commenting out the -extra space using %. -</LI> -</UL> -<P> +<BR CLEAR="ALL"> +<HR><TT>\random</TT><A NAME="886"></A><TT>{</TT><EM>counter</EM><TT>}{</TT><EM>min</EM><TT>}{</TT><EM>max</EM><TT>}</TT> +<BR CLEAR="ALL"> +<HR>Generates a random integer from <I>min</I> to <I>max</I> and +stores in the given counter. For example, the following generates +a random number between 3 and 8 (inclusive) and stores it in +the counter <TT>myrand</TT>. +<PRE> +\newcounter{myrand} +\random{myrand}{3}{8} +</PRE> -<H2><A NAME="SECTION000102000000000000000"> -Error Messages</A> -</H2> +<P> -<UL> -<LI><TT>! Package probsoln Error: Label ... already used. -</TT> +<BR CLEAR="ALL"> +<HR><TT>\doforrandN</TT><A NAME="889"></A><TT>{</TT><EM>n</EM><TT>}{</TT><EM>cmd</EM><TT>}{</TT><EM>list</EM><TT>}{</TT><EM>text</EM><TT>}</TT> +<BR CLEAR="ALL"> +<HR>Randomly selects <I>n</I> values from the comma-separated list +given by <I>list</I> and iterates through this subset. On +each iteration it sets <I>cmd</I> to the current value and +does <I>text</I>. For example, the following will load a +randomly selected problem from two of the listed files (where +<TT>file1.tex</TT>, <TT>file2.tex</TT> and <TT>file3.tex</TT> +are files containing at least one problem): +<PRE> +\doforrandN{2}{\thisfile}{file1,file2,file3}{% +\loadrandomproblems{1}{\thisfile}} +</PRE> <P> -Each label identifier used in <A HREF="#newproblem"><TT>newproblem</TT><A NAME="525"></A></A> must be -unique. Check to make sure you haven't used the same label -more than once. Also check to make sure you haven't -<TT>\input</TT><A NAME="528"></A>ed or randomly selected from the same file more -than once. (Or <TT>\input</TT><A NAME="531"></A>ed and randomly selected from -the same file.) <P> -</LI> -<LI><TT>! Package probsoln Error: Label ... undefined. -</TT> +<A HREF="probsoln-manual.html#top">Top</A> <P> -You need to define a problem before you can use it. Check to -make sure you haven't mis-spelt it, and check to make sure you -have <TT>\input</TT><A NAME="534"></A>ed the file in which it is defined. -<P> -</LI> -<LI><TT>! Package probsoln Error: Requested number too large. -</TT> +<H1><A NAME="SECTION000110000000000000000"> +10 Compatibility With Versions Prior to 3.0</A> +</H1> <P> -You have asked for more problems than are defined within the -specified file. All problems in that file will be selected. +Version 3.0 of the <TT>probsoln</TT> package completely changed the +structure of the package, but the commands described in this +section have been provided to maintain compatibility with +earlier versions. The only problems that are likely to occur are +those where commands are contained within groups. This will +effect any commands that are contained in external files that are +outside of the arguments to <TT>\newproblem</TT><A NAME="896"></A> and <TT>\newproblem*</TT><A NAME="899"></A>. +However, since the external files had to be parsed twice in +order to load the problems, this shouldn't be an issue as adding +anything other than problem definitions in those files would +be problematic anyway. <P> -</LI> -<LI><TT>! Package probsoln Error: Can't randomly select <I>n</I> -item(s) -</TT> +The other likely difference is where the random generator is +used in a group. This includes commands such as +<TT>\selectrandomly</TT><A NAME="902"></A>. For example, if your document contained +something like: +<PRE> +\begin{enumerate} +\selectrandomly{file1}{8} -<P> -You have asked to randomly select <I>n</I> items from a list -that has less than <I>n</I> elements. For example, the -following will generate this error: +\item Solve the following: +\begin{enumerate} +\selectrandomly{file2}{4} +\end{enumerate} + +\selectrandomly{file3}{2} +\end{enumerate} +</PRE> +Then using versions prior to v3.0 will produce a different +set of random numbers since the second <TT>\selectrandomly</TT> +is in a different level of grouping. If you want to ensure +that the document produces exactly the same random set with +the new version as with the old version, you will need to +get and set the random number seed. For example, the above +would need to be modified so that it becomes: <PRE> -\doforrandN{10}{\file}{file1,file2,file3}{% -\selectrandomly{\file}{1}} +\begin{enumerate} +\selectrandomly{file1}{8} + +\item Solve the following: +\newcount\oldseed +\PSNgetrandseed{\oldseed} +\begin{enumerate} +\selectrandomly{file2}{4} +\end{enumerate} +\PSNrandseed{\oldseed} + +\selectrandomly{file3}{2} +\end{enumerate} </PRE> -In this case the list, <TT>file1,file2,file3</TT> has only 3 -elements, but the user has asked for 10 elements. If you type -`h' at the L<SUP><SMALL>A</SMALL></SUP>T<SMALL>E</SMALL>X prompt it will tell you how many items it thinks -there are in the list. Remember that each item must be separated by a -comma. <P> -</LI> -<LI><TT>! LaTeX Error: Lonely <TT>\item</TT><A NAME="537"></A>-perhaps missing list -environment. + +<BR CLEAR="ALL"> +<HR><TT>\selectrandomly</TT><A NAME="905"></A><TT>{</TT><EM>filename</EM><TT>}{</TT><EM>n</EM><TT>}</TT> +<BR CLEAR="ALL"> +<HR>This is now equivalent to: +<TT> +{<TT>\loadrandomproblems[</TT><EM>filename</EM><TT>]{</TT><EM>n</EM><TT>}{</TT><EM>filename</EM><TT>}</TT>}% +<TT>\foreachproblem[</TT><EM>filename</EM><TT>]{</TT><EM><TT>\PSNitem\thisproblem\endPSNitem</TT></EM><TT>}</TT> </TT> <P> -Each problem selected using <A HREF="#selectrandomly"><TT>selectrandomly</TT><A NAME="542"></A></A> is -proceeded by <A HREF="#PSNitem"><TT>PSNitem</TT><A NAME="547"></A></A> which by default is defined -as <TT>\item</TT><A NAME="550"></A>, and should therefore be -placed in one of the list environments, such as -<TT>enumerate</TT>. Alternatively, redefine <A HREF="#PSNitem"><TT>PSNitem</TT><A NAME="555"></A></A>. + +<BR CLEAR="ALL"> +<HR><TT>\selectallproblems</TT><A NAME="908"></A><TT>{</TT><EM>filename</EM><TT>}</TT> +<BR CLEAR="ALL"> +<HR>This is now equivalent to: +<TT> +{<TT>\loadallproblems[</TT><EM>filename</EM><TT>]{</TT><EM>filename</EM><TT>}</TT>}% +<TT>\foreachproblem[</TT><EM>filename</EM><TT>]{</TT><EM><TT>\PSNitem\thisproblem\endPSNitem</TT></EM><TT>}</TT> +</TT> <P> -</LI> -<LI>I get an error when I put a command definition in my database -when using <TT>\selectrandomly</TT><A NAME="558"></A>. +Note that in both the above cases, a new data set is created +with the same name as the file name. <P> -<A HREF="#selectrandomly"><TT>selectrandomly</TT><A NAME="563"></A></A> inputs the database twice, so any -command definition will be read twice, causing an error. You -can use the switch <TT>\iffirstpass</TT><A NAME="566"></A> to prevent the error. For -example: -<PRE> -\iffirstpass -\newcommand{\mycmd}{} -\fi -</PRE> -It is generally not a good idea to put anything other than -<A HREF="#newproblem"><TT>newproblem</TT><A NAME="571"></A></A> commands within the database. <P> -</LI> -</UL> +<A HREF="probsoln-manual.html#top">Top</A> <P> -<H1><A NAME="SECTION000110000000000000000"> -Contact Details</A> -</H1> -Dr Nicola Talbot -<BR> -School of Computing Sciences -<BR> -University of East Anglia -<BR> -Norwich. NR4 7TJ -<BR><TT><A NAME="tex2html1" - HREF="http://theoval.cmp.uea.ac.uk/~nlct/">http://theoval.cmp.uea.ac.uk/~nlct/</A></TT> <P> <BR> <H2><A NAME="SECTION000120000000000000000"> Index</A> </H2><DL COMPACT> -<DT><STRONG><TT>\arabic</TT></STRONG> -<DD><A HREF="#486">Other Commands</A> -<DT><STRONG><TT>\boolean</TT></STRONG> -<DD><A HREF="#510">Other Commands</A> -<DT><STRONG><TT>\doforrandN</TT></STRONG> -<DD><A HREF="#490">Other Commands</A> -<DT><STRONG><TT>\endPSNitem</TT></STRONG> -<DD><A HREF="#461">Selecting Problems at Random</A> -<DT><STRONG><TT>\hideanswers</TT></STRONG> -<DD><A HREF="#498">Other Commands</A> -<DT><STRONG><TT>\iffirstpass</TT></STRONG> -<DD><A HREF="#566">Error Messages</A> -<DT><STRONG><TT>\ifthenelse</TT></STRONG> -<DD><A HREF="#507">Other Commands</A> -<DT><STRONG><TT>\input</TT></STRONG> -<DD><A HREF="#415">Creating a Database</A> - | <A HREF="#528">Error Messages</A> - | <A HREF="#531">Error Messages</A> - | <A HREF="#534">Error Messages</A> -<DT><STRONG><TT>\item</TT></STRONG> -<DD><A HREF="#454">Selecting Problems at Random</A> - | <A HREF="#537">Error Messages</A> - | <A HREF="#550">Error Messages</A> -<DT><STRONG><TT>\newproblem</TT></STRONG> -<DD><A HREF="#386">Creating a New Problem</A> - | <A HREF="#389">Creating a New Problem</A> - | <A HREF="#407">Creating a Database</A> - | <A HREF="#430">Displaying a Problem</A> - | <A HREF="#525">Error Messages</A> - | <A HREF="#571">Error Messages</A> -<DT><STRONG><TT>\newproblem*</TT></STRONG> -<DD><A HREF="#393">Creating a New Problem</A> - | <A HREF="#412">Creating a Database</A> -<DT><STRONG><TT>\PSitem</TT></STRONG> -<DD><A HREF="#451">Selecting Problems at Random</A> -<DT><STRONG><TT>\PSNitem</TT></STRONG> -<DD><A HREF="#547">Error Messages</A> - | <A HREF="#555">Error Messages</A> -<DT><STRONG><TT>\PSNrandseed</TT></STRONG> -<DD><A HREF="#468">Other Commands</A> -<DT><STRONG><TT>\random</TT></STRONG> -<DD><A HREF="#477">Other Commands</A> -<DT><STRONG><TT>\selectallproblems</TT></STRONG> -<DD><A HREF="#440">Selecting All Problems</A> -<DT><STRONG><TT>\selectrandomly</TT></STRONG> -<DD><A HREF="#418">Creating a Database</A> - | <A HREF="#421">Creating a Database</A> - | <A HREF="#444">Selecting Problems at Random</A> - | <A HREF="#447">Selecting Problems at Random</A> - | <A HREF="#457">Selecting Problems at Random</A> - | <A HREF="#464">Selecting Problems at Random</A> - | <A HREF="#473">Other Commands</A> - | <A HREF="#515">Unexpected Output</A> - | <A HREF="#520">Unexpected Output</A> - | <A HREF="#542">Error Messages</A> - | <A HREF="#563">Error Messages</A> - | <A HREF="#558">Error Messages</A> -<DT><STRONG><TT>\showanswers</TT></STRONG> -<DD><A HREF="#494">Other Commands</A> -<DT><STRONG><TT>\solutionname</TT></STRONG> -<DD><A HREF="#503">Other Commands</A> -<DT><STRONG><TT>\useproblem</TT></STRONG> -<DD><A HREF="#425">Displaying a Problem</A> - | <A HREF="#433">Displaying a Problem</A> -<DT><STRONG><TT>\value</TT></STRONG> -<DD><A HREF="#480">Other Commands</A> +<DT><STRONG><TT>alltt</TT></STRONG> +<DD><A HREF="probsoln-manual.html#718">3</A> + | <A HREF="probsoln-manual.html#802">5</A> +<DT><STRONG><TT>babel</TT></STRONG> +<DD><A HREF="probsoln-manual.html#784">5</A> +<DT><STRONG><TT>\correctitem</TT></STRONG> +<DD><A HREF="probsoln-manual.html#747">4</A> +<DT><STRONG><TT>\correctitemformat</TT></STRONG> +<DD><A HREF="probsoln-manual.html#756">4</A> +<DT><STRONG><TT>defproblem</TT> environment</STRONG> +<DD><A HREF="probsoln-manual.html#1565">5</A> + | <A HREF="probsoln-manual.html#799">5</A> + | <A HREF="probsoln-manual.html#808">6</A> + | <A HREF="probsoln-manual.html#829">7</A> +<DT><STRONG><TT>\doforrandN</TT></STRONG> +<DD><A HREF="probsoln-manual.html#889">9</A> +<DT><STRONG><TT>enumerate</TT> environment</STRONG> +<DD><A HREF="probsoln-manual.html#734">4</A> + | <A HREF="probsoln-manual.html#739">4</A> + | <A HREF="probsoln-manual.html#865">8</A> +<DT><STRONG><TT>\foreachdataset</TT></STRONG> +<DD><A HREF="probsoln-manual.html#850">8</A> +<DT><STRONG><TT>\foreachproblem</TT></STRONG> +<DD><A HREF="probsoln-manual.html#844">8</A> +<DT><STRONG><TT>fp</TT></STRONG> +<DD><A HREF="probsoln-manual.html#793">5</A> +<DT><STRONG><TT>\hideanswers</TT></STRONG> +<DD><A HREF="probsoln-manual.html#778">5</A> + | <A HREF="probsoln-manual.html#859">8</A> +<DT><STRONG><TT>\ifshowanswers</TT></STRONG> +<DD><A HREF="probsoln-manual.html#700">3</A> + | <A HREF="probsoln-manual.html#728">4</A> +<DT><STRONG><TT>ifthen</TT></STRONG> +<DD><A HREF="probsoln-manual.html#697">3</A> +<DT><STRONG><TT>\incorrectitem</TT></STRONG> +<DD><A HREF="probsoln-manual.html#750">4</A> +<DT><STRONG><TT>\incorrectitemformat</TT></STRONG> +<DD><A HREF="probsoln-manual.html#759">4</A> +<DT><STRONG><TT>\input</TT></STRONG> +<DD><A HREF="probsoln-manual.html#817">7</A> +<DT><STRONG><TT>\item</TT></STRONG> +<DD><A HREF="probsoln-manual.html#753">4</A> +<DT><STRONG><TT>\loadallproblems</TT></STRONG> +<DD><A HREF="probsoln-manual.html#820">7</A> +<DT><STRONG><TT>\loadrandomproblems</TT></STRONG> +<DD><A HREF="probsoln-manual.html#826">7</A> + | <A HREF="probsoln-manual.html#874">9</A> +<DT><STRONG><TT>\loadselectedproblems</TT></STRONG> +<DD><A HREF="probsoln-manual.html#823">7</A> +<DT><STRONG><TT>\newproblem</TT></STRONG> +<DD><A HREF="probsoln-manual.html#790">5</A> + | <A HREF="probsoln-manual.html#832">7</A> + | <A HREF="probsoln-manual.html#896">10</A> +<DT><STRONG><TT>\newproblem*</TT></STRONG> +<DD><A HREF="probsoln-manual.html#796">5</A> + | <A HREF="probsoln-manual.html#835">7</A> + | <A HREF="probsoln-manual.html#899">10</A> +<DT><STRONG><TT>ngerman</TT></STRONG> +<DD><A HREF="probsoln-manual.html#781">5</A> +<DT><STRONG><TT>onlyproblem</TT> environment</STRONG> +<DD><A HREF="probsoln-manual.html#1547">3</A> + | <A HREF="probsoln-manual.html#712">3</A> + | <A HREF="probsoln-manual.html#766">5</A> + | <A HREF="probsoln-manual.html#853">8</A> +<DT><STRONG><TT>onlysolution</TT> environment</STRONG> +<DD><A HREF="probsoln-manual.html#1551">3</A> + | <A HREF="probsoln-manual.html#715">3</A> + | <A HREF="probsoln-manual.html#725">4</A> + | <A HREF="probsoln-manual.html#769">5</A> + | <A HREF="probsoln-manual.html#856">8</A> +<DT><STRONG>package options</STRONG> +<DD><DL COMPACT> +<DT><STRONG><TT>answers</TT></STRONG> +<DD><A HREF="probsoln-manual.html#673">2</A> + | <A HREF="probsoln-manual.html#688">3</A> +<DT><STRONG><TT>draft</TT></STRONG> +<DD><A HREF="probsoln-manual.html#679">2</A> +<DT><STRONG><TT>final</TT></STRONG> +<DD><A HREF="probsoln-manual.html#682">2</A> +<DT><STRONG><TT>noanswers</TT></STRONG> +<DD><A HREF="probsoln-manual.html#676">2</A> + | <A HREF="probsoln-manual.html#691">3</A> +</DL> +<DT><STRONG><TT>\PSNgetrandseed</TT></STRONG> +<DD><A HREF="probsoln-manual.html#880">9</A> +<DT><STRONG><TT>\PSNrandom</TT></STRONG> +<DD><A HREF="probsoln-manual.html#883">9</A> +<DT><STRONG><TT>\PSNrandseed</TT></STRONG> +<DD><A HREF="probsoln-manual.html#877">9</A> +<DT><STRONG><TT>\random</TT></STRONG> +<DD><A HREF="probsoln-manual.html#886">9</A> +<DT><STRONG><TT>\selectallproblems</TT></STRONG> +<DD><A HREF="probsoln-manual.html#908">10</A> +<DT><STRONG><TT>\selectrandomly</TT></STRONG> +<DD><A HREF="probsoln-manual.html#902">10</A> + | <A HREF="probsoln-manual.html#905">10</A> +<DT><STRONG><TT>\showanswers</TT></STRONG> +<DD><A HREF="probsoln-manual.html#775">5</A> + | <A HREF="probsoln-manual.html#862">8</A> +<DT><STRONG><TT>showanswers</TT> boolean variable</STRONG> +<DD><A HREF="probsoln-manual.html#694">3</A> + | <A HREF="probsoln-manual.html#705">3</A> + | <A HREF="probsoln-manual.html#708">3</A> + | <A HREF="probsoln-manual.html#772">5</A> +<DT><STRONG>\textttsolution environment</STRONG> +<DD><A HREF="probsoln-manual.html#1556">4</A> +<DT><STRONG><TT>textenum</TT> environment</STRONG> +<DD><A HREF="probsoln-manual.html#1560">4</A> + | <A HREF="probsoln-manual.html#743">4</A> +<DT><STRONG><TT>\theenumi</TT></STRONG> +<DD><A HREF="probsoln-manual.html#868">8</A> +<DT><STRONG><TT>\useproblem</TT></STRONG> +<DD><A HREF="probsoln-manual.html#811">6</A> + | <A HREF="probsoln-manual.html#841">8</A> + | <A HREF="probsoln-manual.html#847">8</A> </DL> +<P> +<A HREF="probsoln-manual.html#top">Top</A> +<BR><HR><H4>Footnotes</H4> +<DL> +<DT><A NAME="foot462">... document,</A><A + HREF="probsoln-manual.html#tex2html3"><SUP>1</SUP></A></DT> +<DD>assuming you +leave at least a minute between runs. + +</DD> +</DL> <BR><HR> -<ADDRESS> -<A href=http://theoval.cmp.uea.ac.uk/~nlct/>Nicola L. C. Talbot</A>. -<A HREF=http://www.cmp.uea.ac.uk/>School of Computing Sciences</A>. -<A HREF=http://www.uea.ac.uk/>University of East Anglia.</A> -Last Modified: 2007-08-21 -</ADDRESS> + </BODY> </HTML> diff --git a/Master/texmf-dist/doc/latex/probsoln/probsoln-manual.tex b/Master/texmf-dist/doc/latex/probsoln/probsoln-manual.tex new file mode 100644 index 00000000000..aae8befbed2 --- /dev/null +++ b/Master/texmf-dist/doc/latex/probsoln/probsoln-manual.tex @@ -0,0 +1,781 @@ +\documentclass[a4paper]{ltxdoc} +\usepackage[colorlinks, + bookmarks, + hyperindex=false, + pdfauthor={Nicola L.C. Talbot}, + pdftitle={probsoln: creating problem sheets optionally with solutions}]{hyperref} + +\usepackage{color} +\usepackage{creatdtx} +\ifmakedtx{ +\usepackage{probsoln} +\RecordChanges +\PageIndex +\CheckSum{886} + +\renewcommand{\usage}[1]{\textit{\hyperpage{#1}}} +\renewcommand{\main}[1]{\hyperpage{#1}} +\newcommand{\see}[2]{\emph{see} #1} +\makeatletter +\def\index@prologue{\section*{Index}} +\makeatother +\CodelineNumbered +\newcommand{\dq}[1]{``#1''} + +\definecolor{defbackground}{rgb}{0.8,1,1} + +\newsavebox\defsbox +\newlength\defwidth +\newenvironment{definition}{% +\setlength{\fboxsep}{4pt}\setlength{\fboxrule}{1.25pt}% +\begin{lrbox}{\defsbox}% +\setlength\defwidth\linewidth +\addtolength\defwidth{-2\fboxrule}% +\addtolength\defwidth{-2\fboxsep}% +\begin{minipage}{\defwidth}\flushleft +}{% +\end{minipage} +\end{lrbox}% +\vskip10pt +\noindent +\fcolorbox{black}{defbackground}{\usebox\defsbox}% +\vskip10pt +} + +\newlength\boxlength +\newsavebox\importantbox +\newenvironment{important}{% +\setlength{\fboxrule}{4pt}% +\setlength\boxlength{\linewidth}% +\addtolength\boxlength{-2\fboxsep}% +\addtolength\boxlength{-2\fboxrule}% +\begin{lrbox}{\importantbox}% +\begin{minipage}{\boxlength}% +}{\end{minipage}\end{lrbox}% +\par\vskip10pt\noindent +\fcolorbox{red}{white}{\usebox{\importantbox}}\par\vskip10pt} +} +{ +\usepackage{html} +\usepackage{makeidx} +\renewcommand{\LaTeX}{LaTeX} +\renewcommand{\LaTeXe}{LaTeX2e} +\newcommand{\dq}[1]{"#1"} +\newenvironment{important}{\textbf{NOTE:} }{} +\newenvironment{definition}{\htmlrule}{\htmlrule} +\html{\newcommand{\SpecialMainIndex}[1]{\index{#1@\cs{#1}}}} +} + +\newcommand*{\ics}[1]{\cs{#1}\SpecialMainIndex{#1}} + +\ifmakedtx{ +\newcommand{\pkgopt}[1]{\textsf{#1}\index{package options>#1=\textsf{#1}|hyperpage}} +\newcommand*{\sty}[1]{\textsf{#1}} +\newcommand*{\isty}[1]{\sty{#1}\index{#1 package=\sty{#1} package|hyperpage}} +\newcommand*{\env}[1]{\textsf{#1}} +\newcommand{\ienv}[1]{\env{#1}\index{#1 environment=\env{#1} environment|hyperpage}} +\newcommand*{\bool}[1]{\textsf{#1}\index{#1 boolean variable=\textsf{#1} boolean variable|hyperpage}} +\newcommand{\csdef}[1]{\cs{#1}} +} +{ +\newcommand{\pkgopt}[1]{\texttt{#1}\index{package options!#1@\texttt{#1}}} +\newcommand{\sty}[1]{\texttt{#1}} +\newcommand{\isty}[1]{\sty{#1}\index{#1@\sty{#1}}} +\newcommand{\env}[1]{\texttt{#1}} +\newcommand{\ienv}[1]{\env{#1}\index{#1 environment@\env{#1} environment}} +\newcommand*{\bool}[1]{\texttt{#1}\index{#1 boolean variable@\texttt{#1} boolean variable}} +\newcommand{\csdef}[1]{\ics{#1}} +\renewcommand{\DescribeEnv}[1]{\index{#1 environment@\env{#1} environment}} +\newcommand{\toTop}{\mbox{}\par\htmlref{Top}{top}} +} + +\begin{document}\ifmakedtx{}{\label{top}} +\MakeShortVerb{"} +\DeleteShortVerb{\|} + + \title{probsoln v3.0: creating problem sheets optionally with solutions} + \author{Nicola L.C. Talbot\\[10pt] +School of Computing Sciences\\ +University of East Anglia\\ +Norwich. Norfolk\\ +NR4 7TJ. United Kingdom.\\ +\url{http://theoval.cmp.uea.ac.uk/~nlct/}} + + \date{26th August 2008} + \maketitle +\tableofcontents + + \section{Introduction} +The \sty{probsoln} package is designed for teachers or +lecturers who want to create problem sheets for their +students. This package was designed with specifically +mathematics problems in mind, but can be used for other +subjects as well. The idea is to create a file containing a +large number of problems with their solutions which can be +read in by \LaTeX, and then select a number of problems to +typeset. This means that once the database has been set up, +each year you can easily create a new problem sheet that is +sufficiently different from the previous year, thus +preventing the temptation of current students seeking out +the previous year's students, and checking out their +answers. There is also an option that can be passed to the +package to determine whether or not the solutions should be +printed. In this way, one file can either produce the +student's version or the teacher's version. +\ifmakedtx{}{\toTop} + +\section{Package Options}\label{sec:pkgopt} +The following options may be passed to this package: +\begin{description} +\item[\pkgopt{answers}] Show the answers +\item[\pkgopt{noanswers}] Don't show the answers (default) +\item[\pkgopt{draft}] Display the label and dataset name when a problem is used +\item[\pkgopt{final}] Don't display label and dataset name when a problem is used +\end{description} +\ifmakedtx{}{\toTop} + +\section{Showing and Hiding Solutions}\label{sec:showanswers} + +In addition to the \pkgopt{answers} and \pkgopt{noanswers} package +options, it is also possible to show or suppress the solutions +using \DescribeMacro{\showanswers}\cs{showanswers} and +\DescribeMacro{\hideanswers}\cs{hideanswers}, respectively. +The boolean variable \bool{showanswers} determines whether the +answers should be displayed. You can use this value with the +\isty{ifthen} package to specify different text depending on +whether the solutions should be displayed. For example: +\begin{verbatim} +Assignment 1\ifthenelse{\boolean{showanswers}}{ (Solution Sheet)}{} +\end{verbatim} +Alternatively you can use \ics{ifshowanswers}\ldots\cs{else}\ldots +\cs{fi}: +\begin{verbatim} +Assignment 1\ifshowanswers\space (Solution Sheet)\fi +\end{verbatim} + +For longer passages, you can use the environments \DescribeEnv{onlyproblem}\env{onlyproblem} +and \DescribeEnv{onlysolution}\env{onlysolution}. For example: +\begin{verbatim} +\begin{onlyproblem}% +What is the derivative of $f(x) = x^2$? +\end{onlyproblem}% +\begin{onlysolution}% +$f'(x) = 2x$ +\end{onlysolution} +\end{verbatim} +The above will only display the question if \bool{showanswers} +is false and will only display the solution if \bool{showanswers} +is true. If you want the question to appear in the answer +sheet as well as the solution, then don't put the question in +the \env{onlyproblem} environment: +\begin{verbatim} +What is the derivative of $f(x) = x^2$? +\begin{onlysolution}% +Solution: $f'(x) = 2x$ +\end{onlysolution} +\end{verbatim} +\begin{important} +You can't use verbatim text in the body of the +\ienv{onlyproblem} or \ienv{onlysolution} environments. +If you need verbatim-like text, then try packages such as +\isty{alltt}. Remember that you also can't use verbatim +text in command arguments. +\end{important} +\ifmakedtx{}{\toTop} + +\section{General Formatting Commands}\label{sec:formatting} + +The commands and environments described in this section are +provided to assist formatting problems and their solutions. +\DescribeEnv{solution} +\begin{definition} +\verb|\begin{solution}|\meta{text}\verb|\end{solution}| +\end{definition} +This is equivalent to +\verb|\par\noindent\textbf{\solutionname}:|\meta{text} +where \DescribeMacro{\solutionname}\cs{solutionname} defaults +to \dq{Solution}. Note that you must place the \env{solution} +environment inside the \ienv{onlysolution} environment or +between \ics{ifshowanswers}\ldots\cs{fi} to ensure that it +is suppressed when the solutions are not wanted. (See +\ifmakedtx{\autoref{sec:showanswers}}{\htmlref{Showing and +Hiding Solutions}{sec:showanswers}}.) + + +Note that the \sty{probsoln} package will only define the +\env{solution} environment if it is not already defined. + +\DescribeEnv{textenum} +\begin{definition} +\verb|\begin{textenum}|\ldots\verb|\end{textenum}| +\end{definition} +The \env{textenum} environment is like the \ienv{enumerate} +environment but is in-line. It uses the same counter that the +\env{enumerate} environment would use at that level so the +question can be compact but the answer can use \env{enumerate} +instead. For example: +\begin{verbatim} +\begin{onlyproblem}% +Differentiate the following: +\begin{textenum} +\item $f(x)=2^x$; +\item $f(x)=\cot(x)$ +\end{textenum} +\end{onlyproblem} +\begin{onlysolution} +\begin{enumerate} +\item +\begin{align*} +f(x) &= 2^x = \exp(\ln(x^2)) =\exp(2\ln(x))\\ +f'(x) &= \exp(2\ln(x))\times \frac{2}{x}\\ + &= f(x)\frac{2}{x} +\end{align*} +\item +\begin{align*} +f(x) &= \cot(x) = (\tan(x))^{-2}\\ +f'(x) &= -(\tan(x))^{-2}\times\sec^2(x)\\ +&=-\csc^2x +\end{align*} +\end{enumerate} +\end{onlysolution} +\end{verbatim} +In this example, the items in the question are brief, so an +\ienv{enumerate} environment would result in a lot of +unnecessary white space, +but the answers require more space, so an \env{enumerate} +environment is more appropriate. Since the \ienv{textenum} +environment uses the same counters as the \env{enumerate} +environment, the question and answer sheets use consistent +labelling. Note that there are other packages available on +CTAN that you can use to create in-line lists. Check the +\ifmakedtx{\href{http://www.tex.ac.uk/tex-archive/help/Catalogue/bytopic.html\#enumeration}{TeX +Catalogue}}{\htmladdnormallink{TeX +Catalogue}{http://www.tex.ac.uk/tex-archive/help/Catalogue/bytopic.html\#enumeration}} for +further details. + +\DescribeMacro{\correctitem}\DescribeMacro{\incorrectitem} +\begin{definition} +\csdef{correctitem}\\ +\csdef{incorrectitem} +\end{definition} +You can use the commands \cs{correctitem} and \cs{incorrectitem} +in place of \ics{item}. If the solutions are suppressed, these +commands behave in the same way as \cs{item}, otherwise they +format the item label using one of the commands: +\DescribeMacro{\correctitemformat}\DescribeMacro{\incorrectitemformat} +\begin{definition} +\csdef{correctitemformat}\marg{label}\\ +\csdef{incorrectitemformat}\marg{label} +\end{definition} +For example: +\begin{verbatim} +Under which of the following functions does $S=\{a_1,a_2\}$ +become a probability space? +\begin{enumerate} +\incorrectitem $P(a_1)=\frac{1}{3}$, $P(a_2)=\frac{1}{2}$ +\correctitem $P(a_1)=\frac{3}{4}$, $P(a_2)=\frac{1}{4}$ +\correctitem $P(a_1)=1$, $P(a_2)=0$ +\incorrectitem $P(a_1)=\frac{5}{4}$, $P(a_2)=-\frac{1}{4}$ +\end{enumerate} +\end{verbatim} +\ifmakedtx{}{\toTop} + +\section{Defining a Problem}\label{sec:defproblem} + +It is possible to construct a problem sheet with solutions using +the commands described in the previous sections, however it is +also possible to define a set of problems for later use. In this +way you can create an external file containing many problems some +or all of which can be loaded and used in a document. The +\sty{probsoln} package has a default data set labelled +\dq{default} in which you can store problems or you can create +multiple data sets. You can then iterate through each problem +in a problem set. You can use a previously defined problem more +than once, which means that by judicious use of \ienv{onlyproblem}, +\ienv{onlysolution} or the \bool{showanswers} boolean variable +in conjunction with \ics{showanswers} and \ics{hideanswers}, +you can print the solutions in a different location to the +questions (for example in an appendix). + +\DescribeEnv{defproblem} +\begin{definition} +\verb|\begin{defproblem}|\oarg{n}\marg{label}\meta{definition}\verb|\end{defproblem}| +\end{definition} +This defines the problem whose label is given by \meta{label}. +The label must be unique for a given data set and should not +contain active characters. (Active characters include the special +characters such as \$ and \&, but some packages may make other +symbols active. For example, the \isty{ngerman} and \isty{babel} +packages make certain punctuation active. Check the relevant +package documentation for details.) + +If \env{defproblem} occurs in the document or is included via +\cs{input} or \cs{include}, then the problem will be added to +the default data set. If \env{defproblem} occurs in an external +file that is loaded using one of the commands defined in +\ifmakedtx{\autoref{sec:load}}{\htmlref{Loading Problems From +External Files}{sec:load}} then the problem will be added to +the specified data set. + +The contents of the \env{defproblem} environment should be the +text that defines the problem. This may include any of the +commands defined in +\ifmakedtx{\autoref{sec:showanswers} and +\autoref{sec:formatting}}{\htmlref{Showing and Hiding +Solutions}{sec:showanswers} and \htmlref{General Formatting +Commands}{sec:formatting}}. + +The problem may optionally take \meta{n} arguments (where +\meta{n} is from 0 to 9). The arguments can be referenced +in the definition via \texttt{\#1},\ldots,\texttt{\#9}. +If \meta{n} is omitted then the problem doesn't take any +arguments. +The following example defines a problem with one argument: +\begin{verbatim} +\begin{defproblem}[1]{diffsin} +Differentiate $f(x)=\sin(#1x)$. +\begin{onlysolution}% +\begin{solution} +$f'(x) = #1\cos(#1x)$ +\end{solution} +\end{onlysolution} +\end{defproblem} +\end{verbatim} + +\DescribeMacro{\newproblem} +\begin{definition} +\csdef{newproblem}\oarg{n}\marg{label}\marg{problem}\marg{solution} +\end{definition} +This is a shortcut command for: +\begin{ttfamily}\obeylines +\cs{begin}\{defproblem\}\oarg{n}\marg{label}\% +\meta{problem}\% +\cs{begin}\{onlysolution\}\% +\cs{begin}\{solution\}\% +\meta{solution}\% +\cs{end}\{solution\}\% +\cs{end}\{onlysolution\}\% +\cs{end}\{defproblem\} +\end{ttfamily} +For example: +\begin{verbatim} +\newproblem[1]{diffsin}{% +\(f(x) = \sin(#1x)\) +}{% +\(f'(x) = #1\cos(#1x)\) +} +\end{verbatim} +is equivalent to +\begin{verbatim} +\begin{defproblem}[1]{diffcos}% +\(f(x) = \cos(#1x)\) +\begin{onlysolution}% +\begin{solution}% +\(f'(x) = -#1\sin(#1x)\) +\end{solution}% +\end{onlysolution}% +\end{defproblem} +\end{verbatim} +(In this example, the argument will need to be a positive number +to avoid a double minus in the answer. If you want to perform +floating point arithmetic on the arguments, then try the +\isty{fp} package.) + +\DescribeMacro{\newproblem*} +\begin{definition} +\csdef{newproblem*}\oarg{n}\marg{label}\marg{definition} +\end{definition} +This is a shortcut for: +\begin{ttfamily}\obeylines +\cs{begin}\{defproblem\}\oarg{n}\marg{label}\% +\meta{definition}\% +\cs{end}\{defproblem\} +\end{ttfamily} + +\begin{important} +Verbatim text must not be used in the contents of \ienv{defproblem} +or in any of the arguments to \cs{newproblem} or +\cs{newproblem*}. If you need verbatim-like text consider using +\cs{texttt} or the \isty{alltt} package. +\end{important} +\ifmakedtx{}{\toTop} + +\section{Using a Problem}\label{sec:useproblem} + +Once you have defined a problem using \ienv{defproblem} or +\cs{newproblem} (see +\ifmakedtx{\autoref{sec:defproblem}}{\htmlref{Defining a +Problem}{sec:defproblem}}), you can later display the problem +using: +\DescribeMacro{\useproblem} +\begin{definition} +\csdef{useproblem}\oarg{data set}\marg{label}\marg{arg\ifmakedtx{$_1$}{\HTMLcode{SUB}{1}}}\ldots +\marg{arg\ifmakedtx{$_N$}{\HTMLcode{SUB}{N}}} +\end{definition} +where \meta{data set} is the name of the data set that contains +the problem (the default data set is used if omitted), +\meta{label} is the label identifying the required problem and +\meta{arg\ifmakedtx{$_1$}{\HTMLcode{SUB}{1}}}, \ldots, +\meta{arg\ifmakedtx{$N$}{\HTMLcode{SUB}{N}}} +are the arguments to pass to the problem, if the problem was +defined to have arguments (where \ifmakedtx{$N$}{N} is the number +of arguments specified when the problem was defined). + +For example, in the previous section the problem \texttt{diffcos} +was defined to have one argument, so it can be used as follows: +\begin{verbatim} +\useproblem{diffcos}{3} +\end{verbatim} +This will be equivalent to: +\begin{verbatim} +\(f(x) = \cos(3x)\) +\begin{onlysolution}% +\begin{solution}% +\(f'(x) = -3\sin(3x)\) +\end{solution}% +\end{onlysolution}% +\end{verbatim} +\ifmakedtx{}{\toTop} + +\section{Loading Problems From External Files}\label{sec:load} + +You can store all your problem definitions (see +\ifmakedtx{\autoref{sec:defproblem}}{\htmlref{Defining New +Problems}{sec:defproblem}}) in an external file. +These problems can all be appended to the default data set by +including the file via \ics{input} or they can be appended +to other data sets using one of the commands described below. +Once you have loaded all the required problems, you can +iterate through the data sets using the commands described +in \ifmakedtx{\autoref{sec:foreach}}{\htmlref{Iterating +Through Datasets}{sec:foreach}}. Note that the commands below +will create a new data set, if the named data set doesn't +exist. + +\DescribeMacro{\loadallproblems} +\begin{definition} +\csdef{loadallproblems}\oarg{data set}\marg{filename} +\end{definition} +This will load all problems defined in \meta{filename} and +append them to the specified data set, in the order in which +they are defined in the file. If \meta{data set} is +omitted, the default data set will be used. If \meta{data set} +doesn't exist, it will be created. + +\DescribeMacro{\loadselectedproblems} +\begin{definition} +\csdef{loadselectedproblems}\oarg{data set}\marg{labels}\marg{filename} +\end{definition} +This is like \cs{loadproblems}, but only those problems whose +label is listed in the comma-separated list \meta{labels} are +loaded. For example, if I have some problems defined in the +file \texttt{derivatives.tex}, then +\begin{verbatim} +\loadselectedproblems{diffsin,diffcos}{derivatives} +\end{verbatim} +will only load the problems whose labels are \texttt{diffsin} +and \texttt{diffcos}, respectively. All the other problems in +the file will remain undefined. + +\DescribeMacro{\loadrandomproblems} +\begin{definition} +\csdef{loadrandomproblems}\oarg{data set}\marg{n}\marg{filename} +\end{definition} +This randomly loads \meta{n} problems from \meta{filename} and +adds them to the given data set. If \meta{data set} is omitted, +the default data set is assumed. Note that the problems will be +added to the data set in a random order, not in the order in +which they were defined. There must be at least \meta{n} problems +defined in \meta{filename}. + +\begin{important} +It is generally not a good idea to place anything in +\meta{filename} that is not inside the body of \ienv{defproblem} +or in the arguments to \ics{newproblem} or \ics{newproblem*}. +All the commands in this section input the external file within +a local scope, so commands definitions would need to be made +global to have any effect. In addition, \cs{loadrandomproblems} +has to load each file twice, which means that anything outside +a problem definition will be parsed twice. +\end{important} + +\ifmakedtx{}{\toTop} + +\section{Iterating Through Datasets}\label{sec:foreach} + +Once you have defined all your problems for a given data set, +you can use an individual problem with \ics{useproblem} +(see \ifmakedtx{\autoref{sec:useproblem}}{\htmlref{Using a +Problem}{sec:useproblem}}) but it is more likely that you will +want to iterate through all the problems so that you don't need +to remember the labels of all the problems you have defined. + +\DescribeMacro{\foreachproblem} +\begin{definition} +\csdef{foreachproblem}\oarg{data set}\marg{body} +\end{definition} +This does \meta{body} for each problem in the given data set. +If \meta{data set} is omitted, the default data set is used. +Within \meta{body} you can use +\DescribeMacro{\thisproblem}\cs{thisproblem} to use the +current problem and \DescribeMacro{\thisproblemlabel}\cs{thisproblemlabel} +to access the current label. If the problem requires arguments, +you will be prompted for them, so if you want to use this +approach you will need to use \LaTeX\ in interactive mode. If +you do provide arguments, they will be stored in the event that +you need to iterate through the data set again. The +arguments will be included in \cs{thisproblem}, so you only +need to use \cs{thisproblem} without having to specify +\ics{useproblem}. For example, to iterate through all problems +in the default data set: +\begin{verbatim} +\begin{enumerate} +\foreachproblem{\item\thisproblem} +\end{enumerate} +\end{verbatim} + +\DescribeMacro{\foreachdataset} +\begin{definition} +\csdef{foreachdataset}\marg{cmd}\marg{body} +\end{definition} +This does \meta{body} for each of the defined data sets. Within +\meta{body}, \meta{cmd} will be set to the name of the current +data set. For example, to display all problems in all data sets: +\begin{verbatim} +\begin{enumerate} +\foreachdataset{\thisdataset}{% +\foreachproblem[\thisdataset]{\item\thisproblem}} +\end{enumerate} +\end{verbatim} + +Suppose I have two external files called +\texttt{derivatives.tex} and \texttt{probspaces.tex} which +define problems using both \ienv{onlyproblem} and +\ienv{onlysolution} for example: +\begin{verbatim} +\begin{defproblem}{cosxsqsinx}% +\begin{onlyproblem}% +$y = \cos(x^2)\sin x$.% +\end{onlyproblem}% +\begin{onlysolution}% +\[\frac{dy}{dx} = -\sin(x^2)2x\sin x + \cos(x^2)\cos x\] +\end{onlysolution}% +\end{defproblem} +\end{verbatim} +I can write a document that creates two data sets, one for +the derivative problems and one for the problems about +probability spaces. I can then use \ics{hideanswers} and +iterate through the require data set to produce the problems. +Later, I can use \ics{showanswers} and iterate over all problems defined in both data +sets to produce the chapter containing all the answers. When +displaying the questions, I have taken advantage of the fact that +I can cross-reference items within an \ienv{enumerate} environment, +and redefined \ics{theenumi} to label the questions according to +the chapter. The cross-reference label is constructed from +the problem label and is referenced in the answer section to +ensure that the answers have the same label as the questions. +\begin{verbatim} +\documentclass{report} +\usepackage{probsoln} +\begin{document} +\hideanswers +\chapter{Differentiation} +% randomly select 25 problems from derivatives.tex and add to +% the data set called 'deriv' +\loadrandomproblems[deriv]{25}{derivatives} + +% Display the problems +\renewcommand{\theenumi}{\thechapter.\arabic{enumi}} +\begin{enumerate} +\foreachproblem[deriv]{\item\label{prob:\thisproblemlabel}\thisproblem} +\end{enumerate} +% You may need to change \theenumi back here + +\chapter{Probability Spaces} +% randomly select 25 problems from probspaces.tex and add to +% the data set called 'spaces' +\loadrandomproblems[spaces]{25}{probspaces} + +% Display the problems +\renewcommand{\theenumi}{\thechapter.\arabic{enumi}} +\begin{enumerate} +\foreachproblem[spaces]{\item\label{prob:\thisproblemlabel}\thisproblem} +\end{enumerate} +% You may need to change \theenumi back here + +\appendix + +\chapter{Solutions} +\showanswers +\begin{itemize} +\foreachdataset{\thisdataset}{% +\foreachproblem[\thisdataset]{\item[\ref{prob:\thisproblemlabel}]\thisproblem} +} +\end{itemize} + +\end{document} +\end{verbatim} + +\ifmakedtx{}{\toTop} + +\section{Random Number Generator}\label{sec:random} + +This package provides a pseudo-random number generator that is used +by \ics{loadrandomproblems}. + +\DescribeMacro{\PSNrandseed} +\begin{definition} +\csdef{PSNrandseed}\marg{n} +\end{definition} +This sets the seed to \meta{n} which must be a non-zero integer. +For example, to generate a different set of random numbers +every time you \LaTeX\ your document,\footnote{assuming you +leave at least a minute between runs.} put the following in your +preamble: +\begin{verbatim} +\PSNrandseed{\time} +\end{verbatim} +or to generate a different set of random numbers every year you +\LaTeX\ your document: +\begin{verbatim} +\PSNrandseed{\year} +\end{verbatim} + +\DescribeMacro{\PSNgetrandseed} +\begin{definition} +\csdef{PSNgetrandseed}\marg{register} +\end{definition} +This stores the current seed in the count register specified by +\meta{register}. +For example: +\begin{verbatim} +\newcount\myseed +\PSNgetrandseed{\myseed} +\end{verbatim} + +\DescribeMacro{\PSNrandom} +\begin{definition} +\csdef{PSNrandom}\marg{register}\marg{n} +\end{definition} +Generates a random integer from 1 to \meta{n} and stores in +the count register specified by \meta{register}. For example, +the following generates an integer from 1 to 10 and stores it +in the register \cs{myreg}: +\begin{verbatim} +\newcount\myreg +\PSNrandom{\myreg}{10} +\end{verbatim} + +\DescribeMacro{\random} +\begin{definition} +\csdef{random}\marg{counter}\marg{min}\marg{max} +\end{definition} +Generates a random integer from \meta{min} to \meta{max} and +stores in the given counter. For example, the following generates +a random number between 3 and 8 (inclusive) and stores it in +the counter \texttt{myrand}. +\begin{verbatim} +\newcounter{myrand} +\random{myrand}{3}{8} +\end{verbatim} + +\DescribeMacro{\doforrandN} +\begin{definition} +\csdef{doforrandN}\marg{n}\marg{cmd}\marg{list}\marg{text} +\end{definition} +Randomly selects \meta{n} values from the comma-separated list +given by \meta{list} and iterates through this subset. On +each iteration it sets \meta{cmd} to the current value and +does \meta{text}. For example, the following will load a +randomly selected problem from two of the listed files (where +\texttt{file1.tex}, \texttt{file2.tex} and \texttt{file3.tex} +are files containing at least one problem): +\begin{verbatim} +\doforrandN{2}{\thisfile}{file1,file2,file3}{% +\loadrandomproblems{1}{\thisfile}} +\end{verbatim} + +\ifmakedtx{}{\toTop} + +\section{Compatibility With Versions Prior to 3.0} + +Version 3.0 of the \sty{probsoln} package completely changed the +structure of the package, but the commands described in this +section have been provided to maintain compatibility with +earlier versions. The only problems that are likely to occur are +those where commands are contained within groups. This will +effect any commands that are contained in external files that are +outside of the arguments to \ics{newproblem} and \ics{newproblem*}. +However, since the external files had to be parsed twice in +order to load the problems, this shouldn't be an issue as adding +anything other than problem definitions in those files would +be problematic anyway. + +The other likely difference is where the random generator is +used in a group. This includes commands such as +\ics{selectrandomly}. For example, if your document contained +something like: +\begin{verbatim} +\begin{enumerate} +\selectrandomly{file1}{8} + +\item Solve the following: +\begin{enumerate} +\selectrandomly{file2}{4} +\end{enumerate} + +\selectrandomly{file3}{2} +\end{enumerate} +\end{verbatim} +Then using versions prior to v3.0 will produce a different +set of random numbers since the second \cs{selectrandomly} +is in a different level of grouping. If you want to ensure +that the document produces exactly the same random set with +the new version as with the old version, you will need to +get and set the random number seed. For example, the above +would need to be modified so that it becomes: +\begin{verbatim} +\begin{enumerate} +\selectrandomly{file1}{8} + +\item Solve the following: +\newcount\oldseed +\PSNgetrandseed{\oldseed} +\begin{enumerate} +\selectrandomly{file2}{4} +\end{enumerate} +\PSNrandseed{\oldseed} + +\selectrandomly{file3}{2} +\end{enumerate} +\end{verbatim} + +\DescribeMacro{\selectrandomly} +\begin{definition} +\csdef{selectrandomly}\marg{filename}\marg{n} +\end{definition} +This is now equivalent to: +\begin{ttfamily}\obeylines +\{\cs{loadrandomproblems}\oarg{filename}\marg{n}\marg{filename}\}\% +\cs{foreachproblem}\oarg{filename}\marg{\cs{PSNitem}\cs{thisproblem}\cs{endPSNitem}} +\end{ttfamily} + +\DescribeMacro{\selectallproblems} +\begin{definition} +\csdef{selectallproblems}\marg{filename} +\end{definition} +This is now equivalent to: +\begin{ttfamily}\obeylines +\{\cs{loadallproblems}\oarg{filename}\marg{filename}\}\% +\cs{foreachproblem}\oarg{filename}\marg{\cs{PSNitem}\cs{thisproblem}\cs{endPSNitem}} +\end{ttfamily} + +Note that in both the above cases, a new data set is created +with the same name as the file name. + +\ifmakedtx{}{\toTop} + + \StopEventually{\clearpage\phantomsection\addcontentsline{toc}{section}{Index}\PrintIndex} + +\ifmakedtx{}{\printindex\toTop} +\end{document} diff --git a/Master/texmf-dist/doc/latex/probsoln/probsoln.pdf b/Master/texmf-dist/doc/latex/probsoln/probsoln.pdf Binary files differindex 958fa8996a8..4d5494880fd 100644 --- a/Master/texmf-dist/doc/latex/probsoln/probsoln.pdf +++ b/Master/texmf-dist/doc/latex/probsoln/probsoln.pdf diff --git a/Master/texmf-dist/doc/latex/probsoln/sample.tex b/Master/texmf-dist/doc/latex/probsoln/sample.tex deleted file mode 100644 index 472bd51276c..00000000000 --- a/Master/texmf-dist/doc/latex/probsoln/sample.tex +++ /dev/null @@ -1,35 +0,0 @@ -\documentclass[a4paper]{article} - -\usepackage{probsoln} -%uncomment the following line to display the answers -\showanswers - -% The following will generate a different set of -% problems in subsequent years -\PSNrandseed{\year} - -\begin{document} -\title{Sample Problem Sheet} -\author{Nicola Talbot} -\maketitle - -\begin{enumerate} -% Differentiation from first principles -\selectrandomly{1stprncp}{1} - -\item Differentiate the following functions: -\begin{enumerate} -\selectrandomly{easy}{5} -\end{enumerate} - -% Implicit differentiation -\selectrandomly{implicit}{2} - -% Multiple choice question -\selectrandomly{mchoice}{1} - -% select one essay style question that doesn't come with a solution - -\selectrandomly{nosoln}{1} -\end{enumerate} -\end{document} diff --git a/Master/texmf-dist/doc/latex/probsoln/1stprncp.tex b/Master/texmf-dist/doc/latex/probsoln/samples/1stprncp.tex index f857392a6ef..514abf57763 100644 --- a/Master/texmf-dist/doc/latex/probsoln/1stprncp.tex +++ b/Master/texmf-dist/doc/latex/probsoln/samples/1stprncp.tex @@ -1,4 +1,4 @@ -% These all involve differentiating from 1st principles + % These all involve differentiating from 1st principles \newproblem{dfp:xcube}{% Differentiate $f(x) = x^3$ with respect to $x$ by first principles.}{% diff --git a/Master/texmf-dist/doc/latex/probsoln/args.tex b/Master/texmf-dist/doc/latex/probsoln/samples/args.tex index e3bd7de75ec..77278d86530 100644 --- a/Master/texmf-dist/doc/latex/probsoln/args.tex +++ b/Master/texmf-dist/doc/latex/probsoln/samples/args.tex @@ -1,7 +1,7 @@ -% These problems require arguments + % These problems require arguments -% Arguments: #1->a_2, #2->a_1 and #3->a_0 -% (Arguments must be integers) + % Arguments: #1->a_2, #2->a_1 and #3->a_0 + % (Arguments must be integers) \newcount\ctr \newproblem[3]{diff:quad}{% \(f(x) = @@ -32,7 +32,7 @@ \ifnum#2>0 \ifnum#1=0 \else + \fi \fi #2 \fi -% print 0 if both #1 and #2 are 0 + % print 0 if both #1 and #2 are 0 \ifnum#1=0 \ifnum#2=0 0 \fi\fi \) } diff --git a/Master/texmf-dist/doc/latex/probsoln/easy.tex b/Master/texmf-dist/doc/latex/probsoln/samples/easy.tex index 3106fcfdb9a..0833f7e9527 100644 --- a/Master/texmf-dist/doc/latex/probsoln/easy.tex +++ b/Master/texmf-dist/doc/latex/probsoln/samples/easy.tex @@ -1,4 +1,4 @@ -% These are all easy differentiation problems + % These are all easy differentiation problems \newproblem{diffeasy:gpowh}{% \(f(x) = g(x)^{h(x)}.\)}{% diff --git a/Master/texmf-dist/doc/latex/probsoln/samples/easy2.tex b/Master/texmf-dist/doc/latex/probsoln/samples/easy2.tex new file mode 100644 index 00000000000..9958efcb41c --- /dev/null +++ b/Master/texmf-dist/doc/latex/probsoln/samples/easy2.tex @@ -0,0 +1,135 @@ + % These are all easy differentiation problems + +\begin{defproblem}{diffeasy:gpowh}% +\begin{onlyproblem}% +\(f(x) = g(x)^{h(x)}.\)% +\end{onlyproblem}% +\begin{onlysolution}% +\begin{eqnarray*} +f(x) & = & e^{\ln g(x)^{h(x)}}\\ + & = & e^{h(x)\ln g(x)}\\ +f'(x) & = & e^{h(x)\ln g(x)}(h'(x)\ln g(x) + h(x)\frac{g'(x)}{g(x)})\\ + & = & g(x)^{h(x)}(h'(x)\ln g(x) + \frac{h(x)g'(x)}{g(x)}) +\end{eqnarray*}% +\end{onlysolution}% +\end{defproblem} + +\begin{defproblem}{diffeasy:arcsin}% +\begin{onlyproblem}% +\(y = \arcsin(x)\)% +\end{onlyproblem}% +\begin{onlysolution}% +\[\sin(y) = x\] +diff. w.r.t. $x$: +\begin{eqnarray*} +\cos y \frac{dy}{dx} & = & 1\\ +\frac{dy}{dx} & = & \frac{1}{\cos y}\\ + & = & \frac{1}{\sqrt{1 - \sin^2y}}\\ + & = & \frac{1}{\sqrt{1-x^2}}. +\end{eqnarray*} +\end{onlysolution}% +\end{defproblem} + +\begin{defproblem}{diffeasy:arccos}% +\begin{onlyproblem}% +$y = \arccos x$.% +\end{onlyproblem}% +\begin{onlysolution}% +\(\cos y = x\) +diff. w.r.t. $x$: +\begin{eqnarray*} +-\sin y \frac{dy}{dx} & = & 1\\ +\frac{dy}{dx} & = & \frac{-1}{\sin y}\\ + & = & \frac{-1}{\sqrt{1-\cos^2y}}\\ + & = & \frac{-1}{\sqrt{1-x^2}} +\end{eqnarray*} +\end{onlysolution}% +\end{defproblem} + +\begin{defproblem}{diffeasy:tan}% +\begin{onlyproblem}% +\(y = \tan x\)% +\end{onlyproblem} +\begin{onlysolution}% +\begin{eqnarray*} +y & = & \tan x\\ + & = & \frac{\sin x}{\cos x}\\ +\frac{dy}{dx} & = & \frac{\cos x}{\cos x} + \sin x\times\frac{-1}{\cos^2x}\times -\sin x\\ + & = & 1 + \tan^2x\\ + & = & \sec^2x. +\end{eqnarray*} +\end{onlysolution}% +\end{defproblem} + +\begin{defproblem}{diffeasy:arctan}% +\begin{onlyproblem}% +\(y = \arctan x = \tan^{-1}x\)% +\end{onlyproblem}% +\begin{onlysolution}% +\[\tan y = x\] +diff w.r.t. $x$: +\begin{eqnarray*} +\sec^2y\frac{dy}{dx} & = & 1\\ +\frac{dy}{dx} & = & \frac{1}{\sec^2y}\\ + & = & \frac{1}{1+\tan^2y}\\ + & = & \frac{1}{1+x^2} +\end{eqnarray*} +\end{onlysolution}% +\end{defproblem} + +\begin{defproblem}{diffeasy:cot}% +\begin{onlyproblem}% +\(y = (\tan x)^{-1} = \cot x\)% +\end{onlyproblem} +\begin{onlysolution}% +\begin{eqnarray*} +\frac{dy}{dx} & = & -(\tan x)^{-2}\sec^2x\\ + & = & -\frac{\cos^2x}{\sin^2x}\cdot\frac{1}{\cos^2x}\\ + & = & \frac{-1}{\sin^2x}\\ + & = & -\csc^2x. +\end{eqnarray*} +\end{onlysolution}% +\end{defproblem} + +\begin{defproblem}{diffeasy:cosxsqsinx}% +\begin{onlyproblem}% +$y = \cos(x^2)\sin x$.% +\end{onlyproblem}% +\begin{onlysolution}% +\[\frac{dy}{dx} = -\sin(x^2)2x\sin x + \cos(x^2)\cos x\] +\end{onlysolution}% +\end{defproblem} + +\begin{defproblem}{diffeasy:xlnx}% +\begin{onlyproblem}% +$y = (x+1)\ln(x+1)$. +\end{onlyproblem}% +\begin{onlysolution}% +\begin{eqnarray*} +\frac{dy}{dx} & = & \ln(x+1) + \frac{x+1}{x+1}\\ + & = & 1 + \ln(x+1). +\end{eqnarray*} +\end{onlysolution} +\end{defproblem} + +\begin{defproblem}{diffeasy:glng}% +\begin{onlyproblem}% +$f(x) = g(x)\ln(g(x))$. +\end{onlyproblem} +\begin{onlysolution}% +\begin{eqnarray*} +f'(x) & = & g'(x)\ln(g(x)) + \frac{g(x)}{g(x)}g'(x)\\ + & = & g'(x)(1+\ln(g(x))). +\end{eqnarray*} +\end{onlysolution}% +\end{defproblem} + +\begin{defproblem}{diffeasy:sinx/x} +\begin{onlyproblem}% +$y = \frac{\sin x}{x}$. +\end{onlyproblem} +\begin{onlysolution}% +\[\frac{dy}{dx} = \frac{\cos x}{x} - \frac{\sin x}{x^2}\] +\end{onlysolution}% +\end{defproblem} + diff --git a/Master/texmf-dist/doc/latex/probsoln/implicit.tex b/Master/texmf-dist/doc/latex/probsoln/samples/implicit.tex index 00453df3045..7f37fe0041f 100644 --- a/Master/texmf-dist/doc/latex/probsoln/implicit.tex +++ b/Master/texmf-dist/doc/latex/probsoln/samples/implicit.tex @@ -1,4 +1,4 @@ -% These are all implicit differentiation problems + % These are all implicit differentiation problems \newproblem{imd:circ}{% Find the gradient of the unit circle ($x^2 + y^2 = 1$).}{% diff --git a/Master/texmf-dist/doc/latex/probsoln/mchoice.tex b/Master/texmf-dist/doc/latex/probsoln/samples/mchoice.tex index 7add557a680..7add557a680 100644 --- a/Master/texmf-dist/doc/latex/probsoln/mchoice.tex +++ b/Master/texmf-dist/doc/latex/probsoln/samples/mchoice.tex diff --git a/Master/texmf-dist/doc/latex/probsoln/samples/newdata.tex b/Master/texmf-dist/doc/latex/probsoln/samples/newdata.tex new file mode 100644 index 00000000000..82179a34ef0 --- /dev/null +++ b/Master/texmf-dist/doc/latex/probsoln/samples/newdata.tex @@ -0,0 +1,26 @@ +\begin{defproblem}{sample} +\begin{onlyproblem} +Differentiate $y=\sin x$ +\end{onlyproblem} +\begin{onlysolution} +$y'=\cos x$ +\end{onlysolution} +\end{defproblem} + +\begin{defproblem}[1]{sample2} +\begin{onlyproblem} +Differentiate $y = \sin(#1x)$ +\end{onlyproblem} +\begin{onlysolution} +$y'=#1\cos #1x$ +\end{onlysolution} +\end{defproblem} + +\begin{defproblem}{sample3} +\begin{onlyproblem} +Differentiate $y = x^2$. +\end{onlyproblem} +\begin{onlysolution} +$y' = 2x$ +\end{onlysolution} +\end{defproblem} diff --git a/Master/texmf-dist/doc/latex/probsoln/nosoln.tex b/Master/texmf-dist/doc/latex/probsoln/samples/nosoln.tex index 322701f965c..96ea6438aaa 100644 --- a/Master/texmf-dist/doc/latex/probsoln/nosoln.tex +++ b/Master/texmf-dist/doc/latex/probsoln/samples/nosoln.tex @@ -1,4 +1,4 @@ -% these problems don't have solutions + % these problems don't have solutions \newproblem*{oop}{Describe what is meant by object-oriented programming.} diff --git a/Master/texmf-dist/doc/latex/probsoln/samples/probspaces.tex b/Master/texmf-dist/doc/latex/probsoln/samples/probspaces.tex new file mode 100644 index 00000000000..48f7c3c53d8 --- /dev/null +++ b/Master/texmf-dist/doc/latex/probsoln/samples/probspaces.tex @@ -0,0 +1,31 @@ + % Finite probability spaces +\newproblem{weightedcoin}{% +A coin is weighted so that heads is four times as likely +as tails. Find the probability that: +\begin{textenum} +\item tails appears, +\item heads appears +\end{textenum}}{% +Let $p=P(T)$, then $P(H)=4p$. We require $P(H)+P(T)=1$, +so $4p+p=1$, hence $p=\frac{1}{5}$. Therefore: +\begin{textenum} +\item $P(T)=\frac{1}{5}$, +\item $P(H)=\frac{4}{5}$ +\end{textenum}} + +\newproblem*{validprobspaces}{% +Under which of the following functions does +$S=\{a_1,a_2\}$ become a probability space? +\par +\begin{textenum} +\begin{tabular}{ll} +\incorrectitem $P(a_1)=\frac{1}{3}$, $P(a_2)=\frac{1}{2}$ +& +\correctitem $P(a_1)=\frac{3}{4}$, $P(a_2)=\frac{1}{4}$ +\\ +\correctitem $P(a_1)=1$, $P(a_2)=0$ +& +\incorrectitem $P(a_1)=\frac{5}{4}$, $P(a_2)=-\frac{1}{4}$ +\end{tabular} +\end{textenum} +} diff --git a/Master/texmf-dist/doc/latex/probsoln/samples/probspaces2.tex b/Master/texmf-dist/doc/latex/probsoln/samples/probspaces2.tex new file mode 100644 index 00000000000..26839b65293 --- /dev/null +++ b/Master/texmf-dist/doc/latex/probsoln/samples/probspaces2.tex @@ -0,0 +1,41 @@ + % Finite probability spaces +\begin{defproblem}{weightedcoin} +\begin{onlyproblem}% +A coin is weighted so that heads is four times as likely +as tails. Find the probability that: +\begin{textenum} +\item tails appears, +\item heads appears +\end{textenum} +\end{onlyproblem} +\begin{onlysolution}% +Let $p=P(T)$, then $P(H)=4p$. We require $P(H)+P(T)=1$, +so $4p+p=1$, hence $p=\frac{1}{5}$. Therefore: +\begin{textenum} +\item $P(T)=\frac{1}{5}$, +\item $P(H)=\frac{4}{5}$ +\end{textenum} +\end{onlysolution} +\end{defproblem} + +\begin{defproblem}{validprobspaces} +\begin{onlyproblem}% +Under which of the following functions does +$S=\{a_1,a_2\}$ become a probability space? +\par +\begin{textenum} +\begin{tabular}{ll} +\item $P(a_1)=\frac{1}{3}$, $P(a_2)=\frac{1}{2}$ +& +\item\label{validprobspacescorrect1} $P(a_1)=\frac{3}{4}$, $P(a_2)=\frac{1}{4}$ +\\ +\item\label{validprobspacescorrect2} $P(a_1)=1$, $P(a_2)=0$ +& +\item $P(a_1)=\frac{5}{4}$, $P(a_2)=-\frac{1}{4}$ +\end{tabular} +\end{textenum} +\end{onlyproblem}% +\begin{onlysolution}% +\ref{validprobspacescorrect1} and \ref{validprobspacescorrect2}% +\end{onlysolution} +\end{defproblem} diff --git a/Master/texmf-dist/doc/latex/probsoln/samples/sample.tex b/Master/texmf-dist/doc/latex/probsoln/samples/sample.tex new file mode 100644 index 00000000000..e80c8dff020 --- /dev/null +++ b/Master/texmf-dist/doc/latex/probsoln/samples/sample.tex @@ -0,0 +1,42 @@ +\documentclass[a4paper]{article} + +\usepackage{probsoln} + %uncomment the following line to display the answers +\showanswers + + % The following will generate a different set of + % problems in subsequent years + %\PSNrandseed{\year} +\PSNrandseed{2007} + +\begin{document} +\title{Sample Problem Sheet} +\author{Nicola Talbot} +\maketitle + +\begin{enumerate} + % Differentiation from first principles +\selectrandomly{1stprncp}{1} + +\item Differentiate the following functions: +\newcount\oldseed +\PSNgetrandseed\oldseed +\begin{enumerate} +\selectrandomly{easy}{5} +\end{enumerate} +\PSNrandseed\oldseed + + % Implicit differentiation +\selectrandomly{implicit}{2} + + % Finite probability spaces +\selectrandomly{probspaces}{2} + + % Multiple choice question +\selectrandomly{mchoice}{1} + + % select one essay style question that doesn't come with a solution + +\selectrandomly{nosoln}{1} +\end{enumerate} +\end{document} diff --git a/Master/texmf-dist/doc/latex/probsoln/sample2.tex b/Master/texmf-dist/doc/latex/probsoln/samples/sample2.tex index abc7c0d7bd3..e82656c9f3a 100644 --- a/Master/texmf-dist/doc/latex/probsoln/sample2.tex +++ b/Master/texmf-dist/doc/latex/probsoln/samples/sample2.tex @@ -1,16 +1,16 @@ \documentclass[a4paper]{article} \usepackage{probsoln} -%uncomment the following line to display the answers + %uncomment the following line to display the answers \showanswers -% The following will generate a different set of -% problems in subsequent years -%\PSNrandseed{\year} + % The following will generate a different set of + % problems in subsequent years + %\PSNrandseed{\year} -% The following will generate a different set of -% problems on every run (where each run is at -% least a minute apart from the previous one) + % The following will generate a different set of + % problems on every run (where each run is at + % least a minute apart from the previous one) \PSNrandseed{\time} \begin{document} @@ -21,10 +21,10 @@ \begin{enumerate} \newcounter{numproblems} -% store a random number from 1 to 3 in the counter numproblems + % store a random number from 1 to 3 in the counter numproblems \random{numproblems}{1}{3} -% selects 1,2 or 3 problems from 1 of the given files: + % selects 1,2 or 3 problems from 1 of the given files: \doforrandN{1}{\file}{1stprncp,implicit}{\selectrandomly{\file}{\value{numproblems}}} \item Differentiate the following functions: @@ -39,7 +39,7 @@ \item \useproblem{diff:quad}{\arabic{A}}{\arabic{B}}{\arabic{C}} \random{A}{-5}{5} -% make sure its not 0 + % make sure its not 0 \whiledo{\value{A}=0}{\random{A}{-5}{5}} \item \useproblem{diff:sin}{\arabic{A}} \end{enumerate} diff --git a/Master/texmf-dist/doc/latex/probsoln/sample3.tex b/Master/texmf-dist/doc/latex/probsoln/samples/sample3.tex index 0a605526fcf..35252593b33 100644 --- a/Master/texmf-dist/doc/latex/probsoln/sample3.tex +++ b/Master/texmf-dist/doc/latex/probsoln/samples/sample3.tex @@ -3,7 +3,7 @@ \usepackage{longtable} \usepackage{probsoln} -%\showanswers + %\showanswers \newcounter{problem} \renewcommand{\PSNitem}{\refstepcounter{problem}% diff --git a/Master/texmf-dist/doc/latex/probsoln/sample4.tex b/Master/texmf-dist/doc/latex/probsoln/samples/sample4.tex index 798214cfbd1..f82eef21182 100644 --- a/Master/texmf-dist/doc/latex/probsoln/sample4.tex +++ b/Master/texmf-dist/doc/latex/probsoln/samples/sample4.tex @@ -2,9 +2,9 @@ \usepackage{probsoln} -% Sample file illustrating use of \selectallproblems -% All problems defined in specified file will be used -% in order of definition + % Sample file illustrating use of \selectallproblems + % All problems defined in specified file will be used + % in order of definition \showanswers diff --git a/Master/texmf-dist/doc/latex/probsoln/samples/sample5.tex b/Master/texmf-dist/doc/latex/probsoln/samples/sample5.tex new file mode 100644 index 00000000000..531170b1d6d --- /dev/null +++ b/Master/texmf-dist/doc/latex/probsoln/samples/sample5.tex @@ -0,0 +1,34 @@ +\documentclass[a4paper]{report} + +\usepackage{probsoln} + +\begin{document} + +\hideanswers + +\chapter{Easy Problems} +\loadrandomproblems[easyproblems]{5}{easy2} + +\renewcommand{\theenumi}{\thechapter.\arabic{enumi}} +\begin{enumerate} +\foreachproblem[easyproblems]{\item\label{prob:\thisproblemlabel}\thisproblem} +\end{enumerate} + +\chapter{Probability Spaces} +\loadrandomproblems[probspaces]{2}{probspaces2} + +\renewcommand{\theenumi}{\thechapter.\arabic{enumi}} +\begin{enumerate} +\foreachproblem[probspaces]{\item\label{prob:\thisproblemlabel}\thisproblem} +\end{enumerate} + +\appendix +\chapter{Solutions} +\showanswers +\begin{enumerate} +\foreachdataset{\thisdataset}{% +\foreachproblem[\thisdataset]{\item[\ref{prob:\thisproblemlabel}]\thisproblem} +} +\end{enumerate} + +\end{document} diff --git a/Master/texmf-dist/doc/latex/probsoln/tabmchoice.tex b/Master/texmf-dist/doc/latex/probsoln/samples/tabmchoice.tex index 055affdb944..39cd1f10e41 100644 --- a/Master/texmf-dist/doc/latex/probsoln/tabmchoice.tex +++ b/Master/texmf-dist/doc/latex/probsoln/samples/tabmchoice.tex @@ -1,13 +1,13 @@ -% These problems are designed to be placed in a -% tabular environment -% + % These problems are designed to be placed in a + % tabular environment + % \newproblem{tab:1}{% What is $(3+2)\times5$? & 25 \ifshowanswers\selected\else\notselected\fi & 13 \notselected & 10 \notselected & }{Brackets come first}% -% + \newproblem{tab:2}{% What is $-1+2\times3$? & 3 \notselected & |