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/probsoln-manual.html | |
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/probsoln-manual.html')
-rw-r--r-- | Master/texmf-dist/doc/latex/probsoln/probsoln-manual.html | 1353 |
1 files changed, 797 insertions, 556 deletions
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> |