From ab32512d3febc3b84765830b7a8a33a29e2c4e42 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 30 Sep 2009 00:05:07 +0000 Subject: new latex package eqexam (29sep09) git-svn-id: svn://tug.org/texlive/trunk@15565 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/eqexam/README | 49 + .../texmf-dist/doc/latex/eqexam/doc/eqexamman.pdf | Bin 0 -> 255137 bytes Master/texmf-dist/doc/latex/eqexam/eqecus.opt | 17 + .../doc/latex/eqexam/examples/eqex_solnsonly.tex | 56 + .../doc/latex/eqexam/examples/eqexam.cfg | 7 + .../doc/latex/eqexam/examples/eqexami.cfg | 12 + .../texmf-dist/doc/latex/eqexam/examples/fig1.bb | 5 + .../texmf-dist/doc/latex/eqexam/examples/fig1.eps | Bin 0 -> 834475 bytes .../texmf-dist/doc/latex/eqexam/examples/fig1.jpg | Bin 0 -> 33479 bytes .../texmf-dist/doc/latex/eqexam/examples/fig1.pdf | Bin 0 -> 12673 bytes .../texmf-dist/doc/latex/eqexam/examples/hw01.tex | 159 + .../doc/latex/eqexam/examples/quiz01.tex | 104 + .../doc/latex/eqexam/examples/quiz02.tex | 67 + .../doc/latex/eqexam/examples/test01.tex | 428 +++ .../doc/latex/eqexam/examples/test02.tex | 390 +++ .../doc/latex/eqexam/examples/test_matching.tex | 68 + .../doc/latex/eqexam/examples/tex_survey.tex | 538 ++++ .../doc/latex/eqexam/script/eqAttach.asp | 202 ++ Master/texmf-dist/source/latex/eqexam/eqexam.drv | 37 + Master/texmf-dist/source/latex/eqexam/eqexam.dtx | 3049 ++++++++++++++++++++ Master/texmf-dist/source/latex/eqexam/eqexam.ins | 63 + Master/texmf-dist/tex/latex/eqexam/eqalone.def | 40 + Master/texmf-dist/tex/latex/eqexam/eqexam.def | 774 +++++ Master/texmf-dist/tex/latex/eqexam/eqexam.sty | 1755 +++++++++++ 24 files changed, 7820 insertions(+) create mode 100644 Master/texmf-dist/doc/latex/eqexam/README create mode 100644 Master/texmf-dist/doc/latex/eqexam/doc/eqexamman.pdf create mode 100644 Master/texmf-dist/doc/latex/eqexam/eqecus.opt create mode 100644 Master/texmf-dist/doc/latex/eqexam/examples/eqex_solnsonly.tex create mode 100644 Master/texmf-dist/doc/latex/eqexam/examples/eqexam.cfg create mode 100644 Master/texmf-dist/doc/latex/eqexam/examples/eqexami.cfg create mode 100644 Master/texmf-dist/doc/latex/eqexam/examples/fig1.bb create mode 100644 Master/texmf-dist/doc/latex/eqexam/examples/fig1.eps create mode 100644 Master/texmf-dist/doc/latex/eqexam/examples/fig1.jpg create mode 100644 Master/texmf-dist/doc/latex/eqexam/examples/fig1.pdf create mode 100644 Master/texmf-dist/doc/latex/eqexam/examples/hw01.tex create mode 100644 Master/texmf-dist/doc/latex/eqexam/examples/quiz01.tex create mode 100644 Master/texmf-dist/doc/latex/eqexam/examples/quiz02.tex create mode 100644 Master/texmf-dist/doc/latex/eqexam/examples/test01.tex create mode 100644 Master/texmf-dist/doc/latex/eqexam/examples/test02.tex create mode 100644 Master/texmf-dist/doc/latex/eqexam/examples/test_matching.tex create mode 100644 Master/texmf-dist/doc/latex/eqexam/examples/tex_survey.tex create mode 100644 Master/texmf-dist/doc/latex/eqexam/script/eqAttach.asp create mode 100644 Master/texmf-dist/source/latex/eqexam/eqexam.drv create mode 100644 Master/texmf-dist/source/latex/eqexam/eqexam.dtx create mode 100644 Master/texmf-dist/source/latex/eqexam/eqexam.ins create mode 100644 Master/texmf-dist/tex/latex/eqexam/eqalone.def create mode 100644 Master/texmf-dist/tex/latex/eqexam/eqexam.def create mode 100644 Master/texmf-dist/tex/latex/eqexam/eqexam.sty (limited to 'Master/texmf-dist') diff --git a/Master/texmf-dist/doc/latex/eqexam/README b/Master/texmf-dist/doc/latex/eqexam/README new file mode 100644 index 00000000000..f1a5240caba --- /dev/null +++ b/Master/texmf-dist/doc/latex/eqexam/README @@ -0,0 +1,49 @@ +The eqexam Package + +eqExam is a LaTeX package for writing exams, tests, quizzes, +homework assignments, etc. It is a stand alone package, yet is +tightly integrated with the AcroTeX eDucation Bundle (AeB). Highlights of +this package are as follows: + + 1. Can create exams (tests, quizzes, homework assignments) for + paper, with points in the left or right margins (or both), totals + for each page optionally shown at the bottom corner of each page. + Questions can be objective, fill-in, true false, or multiple + choice. + 2. Solutions can optionally be included in the source file, and + by changing options, can be displayed (for an answer key), in a + couple of different ways. A solutions only document can also be + generated. + 3. Can create mutli-part exams, as I often do for final exams, these + multiple exams are meant to be graded individually. + 4. The one thing that distinguishes this package from the other + exam package is its support for PDF, and this is where AeB comes + in. When you have AeB installed, and you select any of + several options (pdf, links, online or email), a variety of + things can happen. For example, in the case of the online or + email options, white space for solutions is converted into + multiline text field, spaces to fill in answers are converted to + text fields,multiple choice questions are converted into radio + button fields, etc. When the email option is used, a "Submit" + button is automatically created at the top of the first page of + the test. The student can take the test online (perhaps in a + testing lab) then submit responses to the instructor. The email + that is generated to the instructor attaches the FDF file of + form data, so the instructor gets a copy of all responses. + She/He can then open the file and view the responses of the + student. Get the latest AeB (AcroTeX eDucation Bundle, + web,exerquiz,etc) + +The home page for eqexam is + + http://www.math.uakron.edu/~dpstory/eqexam.html + +The home page for AeB is + + http://www.math.uakron.edu/~dpstory/webeq.html + +Comments and suggestions are always gratefully accepted and seriously +considered. + +D. P. Story +09/29/09 diff --git a/Master/texmf-dist/doc/latex/eqexam/doc/eqexamman.pdf b/Master/texmf-dist/doc/latex/eqexam/doc/eqexamman.pdf new file mode 100644 index 00000000000..09f6f8544c0 Binary files /dev/null and b/Master/texmf-dist/doc/latex/eqexam/doc/eqexamman.pdf differ diff --git a/Master/texmf-dist/doc/latex/eqexam/eqecus.opt b/Master/texmf-dist/doc/latex/eqexam/eqecus.opt new file mode 100644 index 00000000000..51467e8cfda --- /dev/null +++ b/Master/texmf-dist/doc/latex/eqexam/eqecus.opt @@ -0,0 +1,17 @@ +% +% AcroTeX Software Development Teams -- 2006 +% http://www.acrotex.net +% +% The following options combination of options are special to the +% @EASE application. Do not change. +% +\DeclareOption{atbdbopts}{% + \ExecuteOptions{online} + \ExecuteOptions{forcolorpaper} + \ExecuteOptions{nosolutions} + \ExecuteOptions{nopoints} + \ExecuteOptions{nototals} + \ExecuteOptions{nospacetowork} + \ExecuteOptions{obeylocalversions} + \ExecuteOptions{myconfig} +} diff --git a/Master/texmf-dist/doc/latex/eqexam/examples/eqex_solnsonly.tex b/Master/texmf-dist/doc/latex/eqexam/examples/eqex_solnsonly.tex new file mode 100644 index 00000000000..e3b233a2d3f --- /dev/null +++ b/Master/texmf-dist/doc/latex/eqexam/examples/eqex_solnsonly.tex @@ -0,0 +1,56 @@ +\documentclass{article} +\usepackage[fleqn]{amsmath} +\usepackage[pointsonleft,nototals,forpaper,nosolutions,useforms]{eqexam} +%\usepackage[pointsonleft,nototals,nosummarytotals,forpaper,useforms,solutionsonly,pdf]{eqexam} + +\subject[CA]{College Algebra} +\title[T1]{Test 1} +\author{Dr.\ D. P. Story} +\date{\thisterm, \the\year} +\duedate{10/01/09} +\keywords{MAC 1105, Exam \nExam, {\thisterm} semester, \theduedate, at NWFSC} + + +% +% Compile with the nosolutions option to create the .sol auxiliary file +% that contains a listing of all the solutions, then compile with the +% solutionsonly option. +% +\encloseProblemsWith{theseproblems} + +\begin{document} + +\maketitle + +\begin{exam}{myProblems} + +\ifsolutionsonly +\begin{instructions}[Solutions:] +The solutions to the test. +\end{instructions} +\else +\begin{instructions}[Instructions:] +Solve each problem and box in your final $\boxed{\text{answer}}$. +\end{instructions} +\fi + +\begin{theseproblems} + +\begin{problem}[5] +This is question 1 +\begin{solution} +This is the solution to question 1 +\end{solution} +\end{problem} + +\begin{problem}[5] +This is question 2 +\begin{solution} +This is the solution to question 2 +\end{solution} +\end{problem} + +\end{theseproblems} +\includeexersolutions +\end{exam} +\end{document} diff --git a/Master/texmf-dist/doc/latex/eqexam/examples/eqexam.cfg b/Master/texmf-dist/doc/latex/eqexam/examples/eqexam.cfg new file mode 100644 index 00000000000..bc9a15aed60 --- /dev/null +++ b/Master/texmf-dist/doc/latex/eqexam/examples/eqexam.cfg @@ -0,0 +1,7 @@ +\renewcommand\maketitledesign +{% + \makebox[\textwidth]{\normalsize + \shortstack[l]{\strut\websubject\\\webauthor, \@date}\hfill + \shortstack[l]{\webtitle\\\strut}\hfill + \shortstack[l]{\strut\eq@ExamName\\\eq@SID}}% +} diff --git a/Master/texmf-dist/doc/latex/eqexam/examples/eqexami.cfg b/Master/texmf-dist/doc/latex/eqexam/examples/eqexami.cfg new file mode 100644 index 00000000000..57511627ea3 --- /dev/null +++ b/Master/texmf-dist/doc/latex/eqexam/examples/eqexami.cfg @@ -0,0 +1,12 @@ +\renewcommand\maketitledesign +{% + \makebox[\textwidth]{\normalsize + \shortstack[l]{\strut\underbar{\websubject}\\\@date}\hfill + \shortstack[l]{\underbar{\webtitle}\\\strut}\hfill + \shortstack[l]{\strut\underbar{Due \theduedate}\\\webauthor}}% +} +\rhead{\webauthor} +\def\exrtnlabelformat{$\square$} +\def\exrtnlabelformatwp{} +\def\eq@sqslrtnlabel{} +\everymath{\displaystyle} diff --git a/Master/texmf-dist/doc/latex/eqexam/examples/fig1.bb b/Master/texmf-dist/doc/latex/eqexam/examples/fig1.bb new file mode 100644 index 00000000000..ac080e4eb19 --- /dev/null +++ b/Master/texmf-dist/doc/latex/eqexam/examples/fig1.bb @@ -0,0 +1,5 @@ +%%Title: ./fig1.jpg +%%Creator: ebb Version 0.5.2 +%%BoundingBox: 0 0 636 704 +%%CreationDate: Fri Feb 04 18:59:33 2005 + diff --git a/Master/texmf-dist/doc/latex/eqexam/examples/fig1.eps b/Master/texmf-dist/doc/latex/eqexam/examples/fig1.eps new file mode 100644 index 00000000000..d40a7d65844 Binary files /dev/null and b/Master/texmf-dist/doc/latex/eqexam/examples/fig1.eps differ diff --git a/Master/texmf-dist/doc/latex/eqexam/examples/fig1.jpg b/Master/texmf-dist/doc/latex/eqexam/examples/fig1.jpg new file mode 100644 index 00000000000..27e8564dabb Binary files /dev/null and b/Master/texmf-dist/doc/latex/eqexam/examples/fig1.jpg differ diff --git a/Master/texmf-dist/doc/latex/eqexam/examples/fig1.pdf b/Master/texmf-dist/doc/latex/eqexam/examples/fig1.pdf new file mode 100644 index 00000000000..054fe38f562 Binary files /dev/null and b/Master/texmf-dist/doc/latex/eqexam/examples/fig1.pdf differ diff --git a/Master/texmf-dist/doc/latex/eqexam/examples/hw01.tex b/Master/texmf-dist/doc/latex/eqexam/examples/hw01.tex new file mode 100644 index 00000000000..d1981f6d127 --- /dev/null +++ b/Master/texmf-dist/doc/latex/eqexam/examples/hw01.tex @@ -0,0 +1,159 @@ +\documentclass[12pt]{article} +\usepackage{amsmath,url} + +% This set of parameters are used to distribute the assignment to the class (in paper form) +% and for posting on the class web site (for those who missed the class). +% With the pdf option the information contained in the keys below are placed +% in the document info of the PDF document. If you don't have the AcroTeX Bundle +% installed, remove the pdf option. +\usepackage[pdf,forpaper,myconfigi,nopoints,nosolutions]{eqexam} + +% Note: When using a PDF option like pdf, you need to specify a driver +% that is passed to hyperref, web.sty etc. For example, +% \usepackage[pdf,pdftex,forpaper,myconfigi,nopoints,nosolutions]{eqexam} + +% This set of parameters are used to publish the solutions on the class web site, if +% desired. +% \usepackage[pdf,forpaper,myconfigi,pointsonleft,answerkey]{eqExam} + +% Note the use of the myconfigi parameter. This then inputs eqexami.cfg, there I +% have placed some definitions specific to a homework assignment. + +\subject[AC2]{Advanced Calculus II} +\title[HW1]{HW \#1} +\author{Dr.\ D. P. Story} +\date{Spring 2005} +\duedate{01/28/05} +\keywords{Homework due \theduedate} +\begin{document} + +\maketitle + +\begin{exam}{HW} + +\ifanswerkey +\begin{instructions}[Solutions] +Below, please find a set of solutions to this assignment. +\end{instructions} +\else +\begin{instructions}[] +Assignments should be neatly-written, well-organized and concise. +If you miss a class and need to get an assignment, see +$$ + \text{\url{http://www.math.uakron.edu/~dpstory/}} +$$ +All class assignments and other announcements will be posted on +this web site. +\end{instructions} +\fi + +\begin{eqComments}[]\S4.3, page 155\footnote{in the text}.\end{eqComments} + +\begin{problem}[4] +Problem 15. Use the definition to prove $f(x) = x^2$ is convex on +$\mathbb{R}$. +\begin{solution} +Let $[c,d]$ be any interval and let $t\in[0,1]$, we need to prove +\begin{equation} + f\bigl( (1-t)c + td \bigr) \le (1-t) f(c) + tf(d)\label{eq0} +\end{equation} +or, +\begin{equation} + \bigl( ( 1-t )c + td \bigr)^2 \le (1-t) c^2 + t d^2\label{eq2} +\end{equation} +We show that the right-side minus the left-side in \eqref{eq2} is nonnegative. Indeed, +\begin{align*} + (1-t) c^2 + &t d^2 - \left( ( 1-t )c + td \right)^2 \\& + = (1-t) c^2 + t d^2 - \left( ( 1-t )^2 c^2 + 2t(1-t)cd + t^2d^2 \right)\\& + = (1-t)[1-(1-t)]c^2 - 2t(1-t)cd + t(1-t)d^2\\& + = t(1-t)c^2 - 2t(1-t)cd + t(1-t)d^2\\& + = t(1-t)( c - d )^2 \ge 0 +\end{align*} +From the first and last lines we have $(1-t) c^2 + t d^2 - \left( ( 1-t )c + td \right)^2\ge0$. This is equivalent +to the desired inequality~\eqref{eq2}. \eqfititin{$\square$} + +\medskip\noindent\textit{Alternate Solution}: +We apply the \textbf{Cauchy-Schwartz Inequality}, page.~16, to the expression on the left side of line~\eqref{eq2}. +For convenience, I paraphrase the \textbf{Cauchy-Schwartz Inequality}: +$$ + \left(\sum_{k=1}^n a_k b_k \right)^2 \le \left(\sum_{k=1}^n a_k^2 \right) \left(\sum_{k=1}^n b_k^2 \right) +$$ +Applying this inequality, with $a_1 = \sqrt{1-t}$, $b_1 = +\sqrt{1-t}\,c$, $a_2 = \sqrt{t}$, $b_2 = \sqrt{t}\,d$ (here, +$n=2$, two terms), we obtain, +\begin{align*} +(1-t)^2 c^2 + t^2 d^2 & + \le \left( (\sqrt{1-t})^2 + (\sqrt{t})^2\right)\left((\sqrt{1-t}\,c)^2 + (\sqrt{t}\,d)^2\right)\\& + = (1-t)c^2 + td^2 +\end{align*} +Thus, +$$ + (1-t)^2 c^2 + t^2 d^2 \le (1-t)c^2 + td^2 +$$ +which is line~\eqref{eq2}, what we wanted to prove. +\end{solution} +\end{problem} + +\begin{problem}[3] +Problem 18. Prove the sum of two convex functions is convex. +\begin{solution} +Seems simple enough. Suppose $f$ and $g$ be convex on $I$. Let $[\,c,d\,]\subseteq$ and let $t\in[\,0,1\,]$. Then +\begin{align*} + (f+g)\bigl( (1-t) c + td \bigr) & + = f\bigl( (1-t) c + td \bigr) + g\bigl( (1-t) c + td \bigr)\\& + \le (1-t) f(c) + tf(d) + (1-t) g(c) + tg(d)\\& + = (1-t) (f+g)(c) + t(f+g)(d) +\end{align*} +Thus, $(f+g)\bigl( (1-t) c + td \bigr) \le (1-t) (f+g)(c) + t(f+g)(d)$, which is what we wanted to prove. +\end{solution} +\end{problem} + +\begin{problem}[2] +Problem 20. Give an example of a function that is convex and unbounded on $(0,1)$. +\begin{solution} +Let $ f(x) = 1/x $, $ x \in (0,1) $. This function is clearly unbounded and since $ f''(x) = 1/x^3\ge 0$ on $(0,1)$, +it is convex on $(0,1)$. +\end{solution} +\end{problem} + +\begin{problem}[4] +Problem 21. Define +$$ + f(x) = \begin{cases} + 2, & x = -1;\\ + x^2, & -1 < x < 2;\\ + 5, & x = 2 + \end{cases} +$$ +Show $f$ is convex on $[\,-1,2\,]$ but not continuous on $[\,-1,2\,]$. +\begin{solution} +Define $g(x) = x^2$, $x\in[\,-1,2\,]$. Then $g$ is twice differentiable on $[\,-1,2\,]$ and $ g''(x) = 2\ge 0$, hence, +$g$ is convex on $[\,-1,2\,]$. Note that $ g(x) \le f(x) $ for all $x\in[\,-1,2\,]$. + +Let $[\,c,d\,]\subseteq [\,-1,2\,]$, we need to show, $\forall t \in [\,0,1\,]$, +$$ + f\bigl( (1-t)c + td \bigr) \le (1-t) f(c) + tf(d) +$$ +This inequality is \emph{always true} for $t=0$ and $t=1$, so it suffices to assume +$t\in(0,1)$, this implies $(1-t)c \ne -1$ and $ td \ne 2$, hence, $(1-t)c + td\in(-1,2)$ . Thus, +$$ + f\bigl( (1-t)c + td \bigr) = g\bigl( (1-t)c + td \bigr)) \le (1-t) g(c) + tg(d) = (1-t) f(c) + tf(d) +$$ +As the assertion about the discontinuity of $f$ (at its endpoints) is obvious, this completes the proof. +\end{solution} +\end{problem} + +\begin{problem}[3] +Problem 23. Suppose $f$ is convex on $\mathbb R$, prove $f$ is continuous on $\mathbb R$. +\begin{solution} +This is an application of \textbf{Theorem~4.28}. Let $x\in\mathbb R$, enclose $x$ in a open +interval $(a,b)$, where $a$, $b\in\mathbb R$. Then $f$ is convex on $(a,b)$, since it is convex +on $\mathbb R$, so by \textbf{Theorem~4.28}, $f$ is continuous on $(a,b)$. Since $f$ is continuous +on $(a,b)$, it is, in particular, continuous at $x\in(a,b)$. + +We have shown that for any $x\in\mathbb R$, $f$ is continuous at +$x$, this means that $f$ is continuous on $\mathbb R$. +\end{solution} +\end{problem} +\end{exam} +\end{document} diff --git a/Master/texmf-dist/doc/latex/eqexam/examples/quiz01.tex b/Master/texmf-dist/doc/latex/eqexam/examples/quiz01.tex new file mode 100644 index 00000000000..abedc62eab4 --- /dev/null +++ b/Master/texmf-dist/doc/latex/eqexam/examples/quiz01.tex @@ -0,0 +1,104 @@ +\documentclass{article} +\usepackage{amsmath} +\usepackage[myconfig,forpaper,pointsonleft,nosolutions]{eqexam} + +\examNum{1} +\forVersion a +\VersionAtext{Quiz~\nExam--003} +\VersionBtext{Quiz~\nExam--007} +\shortVersionAtext{Q{\nExam}s3} +\shortVersionBtext{Q{\nExam}s7} + +\title[\sExam]{\bfseries\Exam} +\author{D. P. Story} +\subject[C1]{Calculus I} +\date{Spring \the\year} +\keywords{Test~\nExam, Section \ifAB{003}{007}} +\email{dpstory@uakron.edu} + +\everymath{\displaystyle} + +\begin{document} + +\maketitle + +\begin{exam}{Part1} + +\begin{instructions}[Instructions:] +Solve each of the following problems without error. \textit{Show all details.} Box in your +$\boxed{\text{answers}}$. Use good notation, you \emph{will} be marked off for bad notation. +\textbf{Note:} The value of a limit can be a number, the symbol $+\infty$, the symbol $-\infty$, +or may be labelled DNE (for ``does not exist''). +\end{instructions} + +\begin{problem}[4] +Compute $ \ifAB{\lim_{x\to-1}\frac{4x^2+x}{x}}{\lim_{x\to2}\frac{1-3x}{x+1}}$ +\begin{solution}[2in] +As discussed in class, this is a ``Skill Level 0'' limit problem: +$$ +\ifAB{\lim_{x\to-1}\frac{4x^2+x}{x}}{\lim_{x\to2}\frac{1-3x}{x+1}} + = \ifAB{\frac{4(-1)^2+(-1)}{-1}}{\lim_{x\to2}\frac{1-3(2)}{2+1}} + = \boxed{\ifAB{-3}{-\frac{5}{3}}} +$$ +\end{solution} +\end{problem} + +\begin{problem}[3] +Define the function $ f(x) = \begin{cases} 2x^3 - 1 & x < -2\\ 2- x^2 & x \ge -2\end{cases}$. +Compute $\lim_{x\to\ifAB{-2^-}{-2^+}} f(x) $, show the details of your reasoning. + +\begin{solution}[2in] +We use standard techniques: +\begin{verA} +\begin{alignat*}{2} + \lim_{x\to-2^-} f(x) & + = \lim_{x\to-2^-} (2x^3-1) &&\qquad\text{since $ x < -2$}\\& + = 2(-2)^3 - 1&&\qquad\text{now a skill level 0 problem}\\& + = \boxed{-17} +\end{alignat*} +\end{verA} +\begin{verB} +\begin{alignat*}{2} + \lim_{x\to-2^+} f(x) & + = \lim_{x\to-2^+} (2- x^2) &&\qquad\text{since $ x < -2$}\\& + = 2 - (-2)^2&&\qquad\text{now a skill level 0 problem}\\& + = \boxed{-2} +\end{alignat*} +\end{verB} +\end{solution} +\end{problem} + +\begin{problem}[3] +Compute $\ifAB{\lim_{x\to2} \frac{1-x}{(x-2)^2}} + {\lim_{x\to3} \frac{x-2}{(3-x)^2}}$ + +\begin{solution}[1in] +\begin{verA} +Notice the denominator goes to zero, but the numerator does not; +this indicates a vertical asymptote usually. Because the +denominator is squared, it's always positive. When $x$ is +``close'' to $2$, $1 - x < 0$, that is, when $x$ is ``close'' to +$2$ the numerator is \emph{negative}. The ratio of the numerator and +denominator is \emph{negative} when $x$ is ``close'' to $2$. Thus, we +conclude, +$$ + \boxed{\lim_{x\to2} \frac{1-x}{(x-2)^2} = -\infty} +$$ +\end{verA} +\begin{verB} +Notice the denominator goes to zero, but the numerator does not; +this indicates a vertical asymptote usually. Because the +denominator is squared, it's always positive. When $x$ is +``close'' to $3$, $x - 2 > 0$, that is, when $x$ is ``close'' to +$3$ the numerator is \emph{positive}. The ratio of the numerator and +denominator is \emph{positive} when $x$ is ``close'' to $3$. Thus, we +conclude, +$$ + \boxed{\lim_{x\to3} \frac{x-2}{(3-x)^2} = +\infty} +$$ +\end{verB} +\end{solution} +\end{problem} + +\end{exam} +\end{document} diff --git a/Master/texmf-dist/doc/latex/eqexam/examples/quiz02.tex b/Master/texmf-dist/doc/latex/eqexam/examples/quiz02.tex new file mode 100644 index 00000000000..cf6bbfde1e3 --- /dev/null +++ b/Master/texmf-dist/doc/latex/eqexam/examples/quiz02.tex @@ -0,0 +1,67 @@ +\documentclass{article} +\usepackage{amsmath} +\usepackage[myconfig,forpaper,pointsonleft,nosolutions]{eqexam} + +\examNum{2} +\forVersion a +\VersionAtext{Quiz~\nExam--003} +\VersionBtext{Quiz~\nExam--007} +\shortVersionAtext{Q{\nExam}s3} +\shortVersionBtext{Q{\nExam}s7} + +\title[\sExam]{\bfseries\Exam} +\author{D. P. Story} +\subject[C1]{Calculus I} +\date{Spring \the\year} +\keywords{Test~\nExam, Section \ifAB{003}{007}} +\email{dpstory@uakron.edu} + +\everymath{\displaystyle} + +\begin{document} + +\maketitle + +\begin{exam}{Part1} + +\begin{instructions}[Instructions:] +Do as well as you can under the circumstances. +\end{instructions} + +\begin{problem*}[3ea] +Do each of the following without error. +\begin{multicols}{2} + \begin{parts} + \item This this problem. + \begin{solution}[2in]\end{solution} + + \item This this problem. + \begin{solution}[2in]\end{solution} +\pushProblem +\end{multicols} +\par\noindent +\makebox[\linewidth][c]{\rule{.67\linewidth}{.4pt}} +\popProblem + \item Do this harder problem. + \begin{solution}[1in]\end{solution} + \end{parts} +\end{problem*} + +\begin{problem*}[\auto] +Do each of the following without error. + \begin{parts} + \item\PTs{3} This this problem. + \begin{solution}[1in]\end{solution} +\pushProblem +\begin{multicols}{2} +\popProblem + \item\PTs{4} This is a hard problem. + \begin{solution}[2in]\end{solution} + \item\PTs{4} Do this harder problem. + \begin{solution}[2in]\end{solution} + \end{parts} +\end{multicols} +\end{problem*} + +\end{exam} +\end{document} diff --git a/Master/texmf-dist/doc/latex/eqexam/examples/test01.tex b/Master/texmf-dist/doc/latex/eqexam/examples/test01.tex new file mode 100644 index 00000000000..4c9f7fa5c68 --- /dev/null +++ b/Master/texmf-dist/doc/latex/eqexam/examples/test01.tex @@ -0,0 +1,428 @@ +\documentclass{article} +\usepackage{amsmath} +\usepackage{graphicx} +%\usepackage[coverpage,forcolorpaper,pointsonboth,totalsonright]{eqexam} +%\usepackage[forcolorpaper,pointsonleft,nosolutions]{eqexam} +\usepackage[online,nosolutions,forcolorpaper,pointsonboth,totalsonright,noparttotals]{eqexam} + +\title[T1]{Test 1} +\author{D. P. Story} +\subject[C1]{Calculus I} +\date{Spring \the\year} +\keywords{Test~1, Section 001} + +\university +{% + THE UNIVERSITY OF AKRON\\ + Theoretical and Applied Mathematics +} +\email{dpstory@uakron.edu} + +\hfuzz = .7pt + +\begin{document} +\maketitle + + +\begin{exam}[Part I.]{Part1} + +\begin{instructions}[Part I.] +Solve each of the problems without error. If you make an error, +points will be subtracted from your total score. +\end{instructions} + +\begin{problem}[5] +This is an example of a objective question, the student fills in +his/her response in the space below. + +\begin{solution}[.5in] +The solution to the question. This solution will not appear when +the option \texttt{nosolutions} is specified. It will appear +immediately after the question with the \texttt{solutionsafter} +option, and appear at the end of the document if a solutions +option is not specified. +\end{solution} +\end{problem} + + +\begin{problem}[5] +An example of a fill-in question: +It is well known that \fillin{1in}{Newton} and +\fillin{1in}{Leibniz} are jointly credited as the founders of +modern calculus. + +\begin{solution} +It is well known that \underbar{Newton} and \underbar{Leibniz} are +jointly credited as the founders of modern calculus. + +\medskip\noindent\textbf{Notes.} Here the optional argument for +the \texttt{solution} environment is not specified, this implies +that no room should be left for the student to answer, seems +reasonable since this is a fill-in. +\end{solution} +\end{problem} + +\begin{problem*}[2ea] +\textit{True} or \textit{False}. No justification needed. + +% Comment out this next line to see the effect. +\fillinWidth\defaultTFwidth + +\begin{parts} + + \item[h] \TF{T} If triangles have $4$ sides, then all monkeys + are green. Now is the time for all good men to come to the aid + of their country. + +\begin{solution} + This is the solution, let's hope it's correct, or I would be + embarrassed to no end. Now is the time for all good men to + come to the aid of their country. + + \medskip\noindent\textbf{Notes.} This \texttt{\string\item} + has an optional argument `\texttt{[h]}', so the + solution will not appear at the end of the document when there + is no solutions option, but will appear when + \texttt{solutionsafter} is specified. The + \texttt{nohiddensolutions} option can override this feature. +\end{solution} + + \item[H] \TF{T} $1+1=3$ iff $\sqrt2$ is a rational number. Now + is the time for all good men to come to the aid of their + country. + +\begin{solution} + \textbf{Notes.} This \texttt{\string\item} has an optional + argument `\texttt{[H]}', so the solution will not appear at + the end of the document when there is no solutions option, nor + does it appear when \texttt{solutionsafter} is specified. The + \texttt{noHiddensolutions} option can override this feature. +\end{solution} + + \item[h] \TF{F} $(\forall x)(\exists y)(xy>1)$\hskip1em($x$, + $y$~real numbers). Now is the time for all good men to come to + the aid of their country. +\begin{solution} +This is a tough solution. +\end{solution} + + \item[h] \TF{F} $(\forall x)(\exists y)(\forall z)(z(x+y)>0)$, + \hskip1em($x$,~$y$, and~$z$ real numbers). +\begin{solution} +This is a tough solution. +\end{solution} + +\end{parts} +\end{problem*} + + +\begin{problem*}[\auto] +Here is an example of a auto calculate problem. It takes the +optional argument `\texttt{[\string\auto]}'. You specify the +points associated with each part using the \texttt{\string\PTs} +command. + +\begin{parts} + +\item \PTs{10} This a hard one! + +\begin{solution}[1in] +This is a tough solution. +\end{solution} + +\item \PTs{5} This one is ``half'' as hard. + +\begin{solution}[1in] +This solution is easy. +\end{solution} + +\end{parts} +\end{problem*} + +\begin{problem*}[\auto] +Select the correct answer for each of the following multiple +choice. There is only one correct answer. +\begin{parts} + \item\PTs{6} In what year did Columbus sail the ocean blue? + \begin{answers}{6} % specify tabular any with 6 columns + \bChoices + \Ans0 1490\eAns + \Ans0 1491\eAns + \Ans1 1492\eAns + \Ans0 1493\eAns + \eChoices + \end{answers} +\begin{solution} + Yes, Columbus sailed the ocean blue in 1492. +\end{solution} + + \item\PTs{4} In what year did Columbus sail the ocean blue? + \begin{answers}{1} % specify a list environment. + \bChoices + \Ans0 1490\eAns + \Ans0 1491\eAns + \Ans1 1492\eAns + \Ans0 1493\eAns + \eChoices + \end{answers} +\begin{solution} + Yes, Columbus sailed the ocean blue in 1492. +\end{solution} + +\end{parts} +\end{problem*} + + +\begin{problem}[5] +Which of the following best describes Augustin Cauchy? + +\sqForms % change this multiple choice to a forms style. + +\begin{multicols}{2} + +% use two columns + +\begin{answers}{1} % an argument of 1 means list style + +\bChoices + \Ans0 He developed the Calculus while his University was closed + for the plague.\eAns % Newton + + \Ans0 Given credit for first using the functional notation + $f(x)$.\eAns % Euler + + \Ans0 He created the ``bell-shaped curve'' and first used the + method of least squares.\eAns % Gauss + + \Ans1 He first formulated a precise definition of the limit + and continuity of a function.\eAns % Cauchy + + \Ans0 Gave a rigorous definition of the definite integral---an + integral that now bears his name.\eAns % Riemann + + \Ans0 His notation for the derivative and the integral is used + even to this day.\eAns % Leibnitz +\eChoices + +\end{answers} + +\end{multicols} + +\begin{solution} +This is a solution to a problem question. +\end{solution} + +\end{problem} + + +\begin{problem}[5] +Which of the following are primary colors? + \begin{manswers}{6} % specify tabular any with 6 columns + \bChoices + \Ans1 Blue\eAns + \Ans0 Green\eAns + \Ans1 Yellow\eAns + \Ans0 Orange\eAns + \Ans1 Red\eAns + \eChoices + \end{manswers} +\begin{solution} + Yes, Columbus sailed the ocean blue in 1492. +\end{solution} +\end{problem} + +\begin{problem}[3] +This is a question. Work \OnBackOfPage, and be quick about it! +\begin{solution}[1in] +This is the solution, let's hope it's correct, or I would be +embarrassed to no end. +\end{solution} +% +% This example illustrates the use of the work area. Place the +% \texttt{workarea} environment just below the \texttt{solution} environment, it's +% parameter must be the same as the one specified by \texttt{solution}. The material +% in the \texttt{workarea} environment will lay on top the vertical space generated above, +% when the \texttt{nosoutions} option is specified; otherwise, it does nothing. +% +\begin{workarea}[.5\linewidth]{1in} +Peter piper picked a peck of pickled peppers, how many pecks of pickled +peppers did Peter Piper pick? +% +\vfill\hfill\setlength{\fboxsep}{6pt}\fbox{Answer: \fillin[n]{1in}{17}} +\end{workarea} +\end{problem} + +% The previous solution works well for paper publications, however, when the online +% or email option is taken, a text field is created for the student to type into, +% the graphics and text are superimposed on top this text field, so the student +% types over these elements, not a good solution in this case. +% +% The next example illustrates a work around. It works for both paper and for online +% documents. + +\begin{problem}[5] +This is a question worth $5$ points. + +\sbox{\eqpanelbox}{\includegraphics[scale=.2]{fig1}} + +\begin{splitsolution}{\panelheight} +\begin{panel}{\panelwidth} +\includegraphics[scale=.2]{fig1} +\end{panel} +\begin{solution} +This a really good solution. I hope this solution is correct or I will be total +embarrassed to no end. Even if it is wrong, maybe the students will appreciate +my tremendous effort. You can see from the figure that the solution is obvious. +What is less obvious is why this works! +\end{solution} +\end{splitsolution} +\end{problem} + +% Here is the same layout, but without the computation of the figure width and height +% Here I set the width to 1in and the depth to 1.25in. + +\begin{problem}[7] +This is a question worth $7$ points. + +\begin{splitsolution}{1.25in} +\begin{panel}{1in} +\includegraphics[scale=.2]{fig1} +\end{panel} +\begin{solution} +This a really good solution. I hope this solution is correct or I will be total +embarrassed to no end. Even if it is wrong, maybe the students will appreciate +my tremendous effort. You can see from the figure that the solution is obvious. +What is less obvious is why this works! +\end{solution} +\end{splitsolution} +\end{problem} + + +% This example illustrates multiple part a question + +\begin{problem*}[10ea] +Answer each of the following questions. +\begin{parts} +\item This is a question. + +\sbox{\eqpanelbox}{\includegraphics[scale=.2]{fig1}} + +\begin{splitsolution}{\panelheight} +\begin{panel}[r]{\panelwidth} +\includegraphics[scale=.2]{fig1} +\end{panel} +\begin{solution} +This a really good solution. I hope this solution is correct or I will be total +embarrassed to no end. Even if it is wrong, maybe the students will appreciate +my tremendous effort. You can see from the figure that the solution is obvious. +What is less obvious is why this works! +\end{solution} +\end{splitsolution} + +\item This is a question. +\begin{solution}[.75in] +Now is the time for all good men to come to the aid of their country. +Now is the time for all good men to come to the aid of their country. +Now is the time for all good men to come to the aid of their country. +\end{solution} +\end{parts} +\end{problem*} + +% The next problem falls at the bottom of the the page, so I'll increment +% \nbaselineskip from 6\baselineskip, the default, to 7\baselineskip. +% This is enough to move the problem to the next page. + +\nbaselineskip{7} + +% This example illustrates multiple part a question using the multicol package + +\begin{problem*}[12] +Solve each of the following. Work \OnBackOfPage. +\begin{multicols}{2} + +\def\solnsp{1in} + +\begin{parts} +\item This is a question. Be sure you don't make any error, I'm watching. + +\begin{solution}[\solnsp] +This is the solution. +\end{solution} + +\item This is a question. +\begin{solution}[\solnsp] +This is the solution. +\end{solution} + +\item This is a question. +\begin{solution}[\solnsp] +This is the solution. +\end{solution} + +\item This is a question. +\begin{solution}[\solnsp] +This is the solution. +\end{solution} +\end{parts} +\end{multicols} +\end{problem*} + +\end{exam} + +\begin{exam}[Part II.]{Part2} + +\begin{instructions}[Part II.] +The following is a short review of previously mastered material. +\end{instructions} + +\begin{problem}[5] +This is a question. +\begin{solution}[.5in] +This is the solution to answer all questions. +\end{solution} +\end{problem} + +\begin{problem}[7] +This is a question. +\begin{solution}[.5in] +This is the solution to answer all questions. +\end{solution} +\end{problem} + +\begin{problem}[8] +This is a question. +\begin{solution}[1in] +This is the solution to answer all questions. +\end{solution} +\end{problem} + +\begin{problem}[5] +This is a question. +\begin{solution}[1in] +This is the solution to answer all questions. +\end{solution} +\end{problem} + +\begin{problem}[10] +This is a question. +\begin{solution}[1in] +This is the solution to answer all questions. +\end{solution} +\end{problem} + +\begin{problem}[5] +This is a question. +\begin{solution}[1in] +This is the solution to answer all questions. +\end{solution} +\end{problem} + +\begin{problem}[10] +This is a question. +\begin{solution}[1in] +This is the solution to answer all questions. +\end{solution} +\end{problem} +\end{exam} + +\end{document} diff --git a/Master/texmf-dist/doc/latex/eqexam/examples/test02.tex b/Master/texmf-dist/doc/latex/eqexam/examples/test02.tex new file mode 100644 index 00000000000..224cff56339 --- /dev/null +++ b/Master/texmf-dist/doc/latex/eqexam/examples/test02.tex @@ -0,0 +1,390 @@ +\documentclass[10pt]{article} +\usepackage{amsmath} +\usepackage{graphicx} +\usepackage[coverpage,pointsonboth,totalsonright,nosolutions,forpaper]{eqexam} + +\title[T1]{Test 1} +\author{D. P. Story} +\subject[C1]{Calculus I} +\date{Spring \the\year} +\keywords{Test~1, Section 001} + +\university +{% + THE UNIVERSITY OF AKRON\\ + Theoretical and Applied Mathematics +} +\email{dpstory@uakron.edu} + +% The purpose of the test02.tex file is to demonstrated a fancier cover page. +% Here, \eqexcoverpagedesign is redefined to include a frame box at the bottom +% of the page in which the grader can place the score for each part of the test +% and the final grade. +\makeatletter +\let\oldeqexcoverpagedesign\eqexcoverpagedesign +\renewcommand\eqexcoverpagedesign +{% + \oldeqexcoverpagedesign + \vspace{\stretch{-1}} % this is to neutralize the \vfill at the end of \oldeqexcoverpagedesign + \bigskip + \fbox{% + \begin{minipage}[t]{.45\linewidth} + \begin{flushleft} + \expandafter\ifx\csname NumberOfParts\endcsname\relax + \else + \count2 = 0 + \medskip + \textbf{Exam Record}\par\parskip=\bigskipamount + \def\\##1{\advance\count2 by\csname ##1total\endcsname + \underbar{\makebox[0pt][l]{##1}\hspace*{1.5in}}% + / \csname ##1total\endcsname\space points\par} + \thePartNames + \fi + \underbar{\makebox[0pt][l]{Total:}\hspace{1.5in}}/ {\the\count2 } points\par + \underbar{\makebox[0pt][l]{Grade:}\hspace{1.5in}}\medskip + \end{flushleft} + \end{minipage}} + \par +} +\makeatother + +\begin{document} + +\maketitle + +\begin{exam}[Part I.]{Part1} + +\begin{instructions}[Part I.] +Solve each of the problems without error. If you make an error, +points will be subtracted from your total score. +\end{instructions} + +\begin{problem}[5] +This is an example of a objective question, the student fills in his/her response +in the space below. + +\begin{solution}[.5in] +The solution to the question. This solution will not appear when +the option \texttt{nosolutions} is specified. It will appear +immediately after the question with the \texttt{solutionsafter} +option, and appear at the end of the document if a solutions +option is not specified. +\end{solution} +\end{problem} + +\begin{problem}[5] +An example of a fill-in question: +It is well known that \fillin{1in}{Newton} and +\fillin{1in}{Leibniz} are jointly credited as the founders of +modern calculus. + +\begin{solution} +It is well known that \underbar{Newton} and \underbar{Leibniz} are +jointly credited as the founders of modern calculus. + +\medskip\noindent\textbf{Notes.} Here the optional argument for +the \texttt{solution} environment is not specified, this implies +that no room should be left for the student to answer, seems +reasonable since this is a fill-in. +\end{solution} +\end{problem} + +\begin{problem*}[3ea] +\textit{True} or \textit{False}. No justification needed. + +% Comment out this next line to see the effect. +\fillinWidth\defaultTFwidth + +\begin{parts} + + \item[h] \TF{T} If triangles have $4$ sides, then all monkeys + are green. Now is the time for all good men to come to the aid + of their country. + +\begin{solution} + This is the solution, let's hope it's correct, or I would be embarrassed to no end. + Now is the time for all good men to come to the aid + of their country. + + \medskip\noindent\textbf{Notes.} This \texttt{\string\item} + has an optional argument `\texttt{[h]}', so the + solution will not appear at the end of the document when there + is no solutions option, but will appear when + \texttt{solutionsafter} is specified. The + \texttt{nohiddensolutions} option can override this feature. +\end{solution} + + \item[H] \TF{T} $1+1=3$ iff $\sqrt2$ is a rational number. Now is the time for all good men to come to the aid + of their country. + +\begin{solution} + \textbf{Notes.} This \texttt{\string\item} has an optional argument `\texttt{[H]}', so + the solution will not appear at the end of the document when there is no solutions option, nor does + it appear when \texttt{solutionsafter} is specified. The + \texttt{noHiddensolutions} option can override this feature. +\end{solution} + + \item[h] \TF{F} $(\forall x)(\exists y)(xy>1)$\hskip1em($x$, $y$~real numbers). Now is the time for all good men to come to the aid + of their country. + + \item[h] \TF{F} $(\forall x)(\exists y)(\forall z)(z(x+y)>0)$, + \hskip1em($x$,~$y$, and~$z$ real numbers). + +\end{parts} +\end{problem*} + + +\begin{problem*}[\auto] +Here is an example of a auto calculate problem. It takes the optional +argument `\texttt{[\string\auto]}'. You specify the points associated with each part +using the \texttt{\string\PTs} command. + +\begin{parts} + +\item \PTs{10} This a hard one! + +\begin{solution}[1in] +This is a tough solution. +\end{solution} + +\item \PTs{5} This one is ``half'' as hard. + +\begin{solution}[1in] +This solution is easy. +\end{solution} + +\end{parts} +\end{problem*} + +\begin{problem*}[\auto]\sqForms +Select the correct answer for each of the following multiple choice. There is +only one correct answer. +\begin{parts} + \item\PTs{5} In what year did Columbus sail the ocean blue? + \begin{answers}{6} % specify 6 columns for a tabular environment + \Ans0 1490 &\Ans0 1491 &\Ans1 1492 &\Ans0 1493 + \end{answers} + \begin{solution} + Yes, Columbus sailed the ocean blue in 1492. + \end{solution} + + \item\PTs{6} In what year did Columbus sail the ocean blue? + \begin{answers}{1} % specify a list environment. + \Ans0 1490 + \Ans0 1491 + \Ans1 1492 + \Ans0 1493 + \end{answers} + \begin{solution} + Yes, Columbus sailed the ocean blue in 1492. + \end{solution} + +\end{parts} +\end{problem*} + + +\begin{problem}[5] +Which of the following best describes Augustin Cauchy? + +\sqForms % change this multiple choice to a forms style. + +\begin{multicols}{2} + +% use two columns + +\begin{answers}{1} % an argument of 1 means list style + +\Ans0 He developed the Calculus while his University was closed +for the plague. % Newton +\Ans0 Given credit for first using the functional notation +$f(x)$. % Euler +\Ans0 He created the ``bell-shaped curve'' and first used the +method of least squares. % Gauss + + +\Ans1 He first formulated a precise definition of the limit +and continuity of a function. % Cauchy +\Ans0 Gave a rigorous definition of the definite integral---an +integral that now bears his name. % Riemann +\Ans0 His notation for the derivative and the integral is used +even to this day. % Leibniz + +\end{answers} +\end{multicols} + + +\begin{solution} +This is a solution to a problem question. +\end{solution} + +\end{problem} + +\begin{problem}[3] +This is a question. Work \OnBackOfPage, and be quick about it! + +\begin{solution}[1in] +This is the solution, let's hope it's correct, or I would be embarrassed to no end. +\end{solution} +% +% This example illustrates the use of the work area. Place the +% \texttt{workarea} environment just below the \texttt{solution} environment, it's +% parameter must be the same as the one specified by \texttt{solution}. The material +% in the \texttt{workarea} environment will lay on top the vertical space generated above, +% when the \texttt{nosoutions} option is specified; otherwise, it does nothing. +% +\begin{workarea}[.5\linewidth]{1in} +Peter piper picked a peck of pickled peppers, how many pecks of pickled +peppers did Peter Piper pick? +% +\vfill\hfill\setlength{\fboxsep}{6pt}\fbox{Answer: \fillin[n]{1in}{17}} +\end{workarea} +\end{problem} + +\begin{problem}[7] +This is a question. Now is the time for all good men to come to +the aid of their country. Peter Piper picked a peck of pickled +peppers. Use the figure below. + + +\begin{solution}[1in] +This a really good solution. I hope this solution is correct or I will be +embarrassed to no end. Even if it is wrong, maybe the students will appreciate +my effort. You can see from the figure that the solution is obvious. +(You could also use commands from a figure wrapping package as well.) +\end{solution} +\begin{workarea}[\linewidth]{1in} +\hfill\includegraphics[scale=.2]{fig1} +\end{workarea} +\end{problem} + +% The previous solution works well for paper publications, however, when the online +% or email option is taken, a text field is created for the student to type into, +% the graphics and text are superimposed on top this text field, so the student +% types over these elements, not a good solution in this case. +% +% The next example illustrates a work around. It works for both paper and for online +% documents. + +\begin{problem}[5] +This is a question worth $5$ points. + +\begin{solution}[1.5in] +This a really good solution. I hope this solution is correct or I will be total +embarrassed to no end. Even if it is wrong, maybe the students will appreciate +my tremendous effort. You can see from the figure that the solution is obvious. +\end{solution} +\end{problem} + +% This example illustrates multiple part a question + +\begin{problem*}[10ea] +Answer each of the following questions. +\begin{parts} +\item This is a question. +\begin{solution}[1in] +Now is the time for all good men to come to the aid of their country. +Now is the time for all good men to come to the aid of their country. +Now is the time for all good men to come to the aid of their country. +\end{solution} +\item This is a question. +\begin{solution}[1in] +Now is the time for all good men to come to the aid of their country. +Now is the time for all good men to come to the aid of their country. +Now is the time for all good men to come to the aid of their country. +\end{solution} +\end{parts} +\end{problem*} + +% This example illustrates multiple part a question using the multicol package + +\begin{problem*}[12] +Solve each of the following. Work \OnBackOfPage +\begin{multicols}{2} + +\def\solnsp{1in} + +\begin{parts} +\item This is a question. Be sure you don't make any error, I'm watching. + +\begin{solution}[\solnsp] +This is the solution. +\end{solution} + +\item This is a question. +\begin{solution}[\solnsp] +This is the solution. +\end{solution} + +\item This is a question. +\begin{solution}[\solnsp] +This is the solution. +\end{solution} + +\item This is a question. +\begin{solution}[\solnsp] +This is the solution. +\end{solution} +\end{parts} +\end{multicols} +\end{problem*} + +\end{exam} + +\begin{exam}[Part II.]{Part2} + +\begin{instructions}[Part II.] +The following is a short review of previously mastered material. +\end{instructions} + +\begin{problem}[5] +This is a question. +\begin{solution}[.5in] +This is the solution to answer all questions. +\end{solution} +\end{problem} + +\begin{problem}[7] +This is a question. +\begin{solution}[.5in] +This is the solution to answer all questions. +\end{solution} +\end{problem} + +\begin{problem}[8] +This is a question. +\begin{solution}[1in] +This is the solution to answer all questions. +e $t$ is given by $\boxed{v=2t-5}$. +\end{solution} +\end{problem} + +\begin{problem}[5] +This is a question. +\begin{solution}[1in] +This is the solution to answer all questions. +\end{solution} +\end{problem} + +\begin{problem}[10] +This is a question. +\begin{solution}[1in] +This is the solution to answer all questions. +\end{solution} +\end{problem} + +\begin{problem}[5] +This is a question. +\begin{solution}[1in] +This is the solution to answer all questions. +\end{solution} +\end{problem} + +\begin{problem}[10] +This is a question. +\begin{solution}[1in] +This is the solution to answer all questions. +\end{solution} +\end{problem} +\end{exam} + +\end{document} diff --git a/Master/texmf-dist/doc/latex/eqexam/examples/test_matching.tex b/Master/texmf-dist/doc/latex/eqexam/examples/test_matching.tex new file mode 100644 index 00000000000..92d1929b0ee --- /dev/null +++ b/Master/texmf-dist/doc/latex/eqexam/examples/test_matching.tex @@ -0,0 +1,68 @@ +\documentclass{article} +\usepackage{amsmath} +\usepackage{graphicx} +%\usepackage[forpaper,pointsonleft]{eqexam} +\usepackage[forpaper,pointsonleft,nosolutions]{eqexam} +%\usepackage[online,forpaper,pointsonleft,answerkey]{eqexam} + +\title[T1]{Test 1} +\author{D. P. Story} +\subject[Eq]{EqExam} +\date{Spring \the\year} +\keywords{Test 1, Section 001} + +\university +{% + NORTHWEST FLORIDA STATE COLLEGE\\ + Department of Mathematics +} +\email{storyd@nwfsc.edu} + +\hfuzz = .7pt + +\begin{document} +\maketitle + + +\begin{exam}{Part1} + +\begin{instructions} +Solve each of the problems without error. If you make an error, +points will be subtracted from your total score. +\end{instructions} + + +\begin{problem*}[\auto] +Match each of names on the left, with the corresponding names on the right. + +\begin{multicols}{2} +\begin{parts} +\item\PTs*{2}\fillin{.5in}{\ref{george}} Washington +\item\PTs*{2}\fillin{.5in}{\ref{john}} Adams +\item\PTs*{2}\fillin{.5in}{\ref{thomas}} Jefferson + +\columnbreak + +\renewcommand{\thepartno}{\Alph{partno}} +\partsformat{\Alph{partno}.} + +% The above redefinitions are reset when we leave the group, when \end{parts} +% is completed. If the original definitions are needed to be reset before then +% execute the following commands: \defaultthepartno, \defaultpartsformat + +% \foritem{a} resets the partno counter back to 0, and displays (a), which +% has been redefined to A. + +\foritem{a}\label{john} John + +\item\label{thomas} Thomas + +\item\label{george} George + +\end{parts} +\end{multicols} +\end{problem*} + +\end{exam} + +\end{document} diff --git a/Master/texmf-dist/doc/latex/eqexam/examples/tex_survey.tex b/Master/texmf-dist/doc/latex/eqexam/examples/tex_survey.tex new file mode 100644 index 00000000000..b2c3dc62ad2 --- /dev/null +++ b/Master/texmf-dist/doc/latex/eqexam/examples/tex_survey.tex @@ -0,0 +1,538 @@ +\documentclass{article} + +% +% AcroTeX eDucation Bundle required for the email option. +% +\usepackage[email,coverpage,forcolorpaper,nopoints,nosolutions,useforms]{eqexam} + +\title[TS]{\texorpdfstring{\TeX}{\textbackslash TeX} Usage Survey} +\author{D. P. Story} +\subject{\texorpdfstring{\sffamily eqExam}{eqExam} Demo} +\date{Spring, \the\year} +\keywords{TeX Usage Survey, eqExam, AcroTeX} + +\university +{% + THE UNIVERSITY OF AKRON\\ + Theoretical and Applied Mathematics +} +\email{dpstory@uakron.edu} + +\EmailSubject{TeX/LaTeX Survey Results} +\EmailCourseName{eqExam Demo} +\EmailExamName{TeX Usage Survey} +\ServerRetnMsg{Your TeX survey results have been received, thank you.} +\SubmitInfo{http://myWebSite/scripts/eqAttach.asp?nopath\#FDF}{myname@mymailprovider} + +\lhead{\textsf{eqExam} Demo} +\rhead{\TeX{} Usage Survey} + +\renewcommand\maketitledesign +{% + \parbox{\textwidth}{\normalsize + \makebox[\textwidth][c]{\bfseries\sffamily\Large\webtitle}\\[3ex] + \makebox[\textwidth][s]{An \textsf{eqExam} Demo \hfill\webauthor}} +} +\makeatletter +\renewcommand\eqexcoverpagedesign +{% + \thispagestyle{empty} + \addtolength\textwidth{\oddsidemargin} + \vspace*{.1\textheight} + \noindent\hspace*{-\oddsidemargin}% + \makebox[\linewidth]{\parbox{\linewidth}% + {\bfseries\color{blue}\large\centering\webuniversity}} + \par\vspace{.1\textheight} + \noindent\hspace*{-\oddsidemargin}% + \makebox[\linewidth]{\parbox{\linewidth}% + {\bfseries\color{blue}\large\centering\websubject}} + \par\vspace{\bigskipamount} + \noindent\hspace*{-\oddsidemargin}% + \makebox[\linewidth]{\parbox{\linewidth}% + {\bfseries\color{blue}\large\centering\webtitle}} + \par\vfill + \optionalpagematter + \par\vfill + \parindent0pt + \@date +} +\makeatother + +% +% From the Web package, part of the AcroTeX eDucation Bundle +% +\newNaviIcon[j]{\GoToSubmit}{20pt}{15pt}{\textcolor{webblue}{$\blacktriangleleft$}}{this.pageNum=1} +\def\optionalpagematter +{% + \begin{center}\setlength{\fboxrule}{1pt} + \fcolorbox{blue}{webyellow}{% + \begin{minipage}{.67\linewidth} + \noindent\textcolor{red}{\textbf{Instructions:}} First, thank + you very much for taking the time to fill out this survey of + \TeX/\LaTeX{} usage. I will summarize the results, and make + them publicly available. The survey has not been commissioned + by TUG ({\TeX} User's Group), but is a demo of some of + capabilities of my new {\LaTeX} package + \textsf{eqExam}.\par\medskip When you have finished, click on + the ``Submit'' button to record your responses.\par\medskip + \textbf{\textcolor{red}{Note:}} The \textcolor{webblue}{Adobe + Reader}, or an \textcolor{webblue}{Acrobat} application + (version 5.0 or later) is required to submit this + survey.\hfill\mbox{D. P. Story} + \end{minipage}} + \end{center} +} + +\begin{document} + +\maketitle + +\begin{exam}{Part1} + +\begin{instructions}[\TeX/\LaTeX.] +This first block of questions concerns your use of {\TeX/\LaTeX}. +\end{instructions} + +\begin{problem*} +Experience using \TeX/\LaTeX. +\begin{parts} +\item How would you describe yourself in terms of experience using \TeX/\LaTeX? +\begin{answers}{4} +\rowsep{1bp} +\bChoices + \Ans0 Novice\eAns + \Ans0 Intermediate\eAns + \Ans0 Experienced\eAns + \Ans0 Package Developer\eAns +\eChoices +\end{answers} + +\item I have used \TeX/\LaTeX{} for\dots +\begin{answers}{3} +\rowsep{1bp} +\bChoices + \Ans0 less than a year\eAns + \Ans0 one to two years\eAns + \Ans0 two to five years\eAns + \Ans0 five to ten years\eAns + \Ans0 ten to fifteen years\eAns + \Ans0 fifteen to twenty years\eAns + \Ans0 more than twenty years\eAns +\eChoices +\end{answers} + +\end{parts} +\end{problem*} + +\begin{problem} +Approximately how many hours do you spend using \TeX/\LaTeX{} in a typical week? +On a per week basis, I use \TeX/\LaTeX\dots +\begin{answers}{4} +\rowsep{1bp} +\bChoices + \Ans0 less than an hour\eAns + \Ans0 one to two hours\eAns + \Ans0 three to five hours\eAns + \Ans0 ten hours\eAns + \Ans0 more than ten hours\eAns +\eChoices +\end{answers} +\end{problem} + +\begin{problem} +There are many {\TeX} user's groups worldwide, are you a member of one or more? +\begin{answers}{4} +\bChoices + \Ans0 Yes\eAns + \Ans0 No\eAns +\eChoices +\end{answers} +\end{problem} + +\begin{problem*} +The following questions concern your preferred use of \TeX. +\begin{parts} +\item\label{whichTeX} Which styles to you predominately use? +\begin{answers}{4} +\rowsep{1bp} +\bChoices[2] + \Ans0 Plain \TeX\eAns + \Ans0 \LaTeX\eAns + \Ans0 Con\TeX t\eAns + \Ans0 Other, \makebox[0pt][l]{please specify \fillin{1.25in}{\empty}}\eAns +\eChoices +\end{answers} + +\item Based on your response to \hyperref[whichTeX]{(\ref*{whichTeX})}, +please explain why you made the choice you did. +\begin{solution}[.75in] +\end{solution} + + +\item There are many {\TeX} Systems available for use, commercial, +shareware, freeware. Which one do you primarily use? +\begin{answers}{4} +\rowsep{1bp} +\bChoices + \Ans0 A \TeX{} Live System\eAns + \Ans0 te\TeX\eAns + \Ans0 Mik\TeX\eAns + \Ans0 PC\TeX\eAns + \Ans0 Y\negthinspace{\scriptsize\&}\negthinspace Y \TeX{} System\eAns + \Ans0 Textures\eAns + \Ans0 CMac\TeX\eAns + \Ans0 True\TeX\eAns + \Ans0 Oz\TeX\eAns + \Ans0 Other, \makebox[0pt][l]{please specify \fillin{1.75in}{\empty}}\eAns +\eChoices +\end{answers} + +\item What is your favorite {\TeX} editor? Specify \fillin{1.75in}{\empty} + +\end{parts} +\end{problem*} + +\begin{problem*} +What operating systems (OS) do you use \TeX? + +\setlength\columnseprule{0pt} + +\begin{parts} + +\item What operating system (OS) runs on the machine you +most frequently use when working with \TeX/\LaTeX? Select one. +\begin{multicols}{2} +\begin{answers}{1} +\bChoices + \Ans0 Windows XP\eAns + \Ans0 Windows ME\eAns + \Ans0 Windows NT\eAns + \Ans0 Windows 2000\eAns + \Ans0 Windows 98\eAns + \Ans0 Windows 95\eAns + \Ans0 Macintosh OS X\eAns + \Ans0 Macintosh OS 9\eAns + \Ans0 Macintosh OS 8\eAns + \Ans0 Macintosh OS 7 or earlier\eAns + \Ans0 Unix or Linux\eAns + \Ans0 Other, please specify \fillin{1.25in}{\empty}\eAns + \Ans0 Don't know\eAns +\eChoices +\end{answers} +\end{multicols} + +\item Some people work on multiple platforms, what is your secondary +OS for working with \TeX/\LaTeX? +\begin{multicols}{2} +\begin{answers}{1} +\bChoices + \Ans0 Windows XP\eAns + \Ans0 Windows ME\eAns + \Ans0 Windows NT\eAns + \Ans0 Windows 2000\eAns + \Ans0 Windows 98\eAns + \Ans0 Windows 95\eAns + \Ans0 Macintosh OS X\eAns + \Ans0 Macintosh OS 9\eAns + \Ans0 Macintosh OS 8\eAns + \Ans0 Macintosh OS 7 or earlier\eAns + \Ans0 Unix or Linux\eAns + \Ans0 Other, please specify \fillin{1.25in}{\empty}\eAns + \Ans0 Don't use two systems.\eAns +\eChoices +\end{answers} +\end{multicols} + +\end{parts} + +\end{problem*} + + +\begin{eqComments}[Seeking Help.]\end{eqComments} + +\begin{problem*} +These questions concern any problems you may have with \TeX/\LaTeX{} and resources available to you. +\begin{parts} +\item Do you struggle on alone (with \TeX/\LaTeX ) if things are going wrong, or do you + seek help? + \begin{answers}{3} + \bChoices + \Ans0 Struggle on along\eAns + \Ans0 Seek help from a friend or colleague\eAns + \Ans0 Seek help from a public forum\eAns + \eChoices + \end{answers} + +\item Do you use on-line resources? + \begin{answers}{4} + \bChoices + \Ans0 No\eAns + \Ans0 Yes, I use \makebox[0pt][l]{\fillin{1.75in}{\empty}}\eAns + \eChoices + \end{answers} + +\goodbreak + +\item Do you seek help from \texttt{comp.text.tex}? + \begin{answers}{3} + \bChoices + \Ans0 No\eAns + \Ans0 Yes, I read the postings occasionally\eAns + \Ans0 Yes, I read the postings regularly\eAns + \Ans0 Yes, I even ask questions\eAns + \Ans0 Yes, I answer questions on occasion\eAns + \Ans0 Yes, I regularly answer questions\eAns + \eChoices + \end{answers} +\end{parts} +\end{problem*} + +\begin{problem*} +The \textsf{CTAN} Archive. +\begin{parts} +\item\label{CTAN} Do you know about \textsf{CTAN} (Central {\TeX} Archive Network)? + \begin{answers}{4} + \bChoices + \Ans0 No\eAns + \Ans0 Yes\eAns + \eChoices + \end{answers} + +\item If you answered ``Yes'' to question~\hyperref[CTAN]{(\ref*{CTAN})}, approximately, how often + do you use this archive? + \begin{answers}{3} + \bChoices + \Ans0 Once or twice a month\eAns + \Ans0 three to five times per month\eAns + \Ans0 More than five times per month\eAns + \eChoices + \end{answers} + +\end{parts} +\end{problem*} + +\begin{problem*} +The {\TeX} \textsf{FAQ} Resource. +\begin{parts} +\item\label{FAQ} Do you know there is a {\TeX} \textsf{FAQ} online resource? (\texttt{http://www.tex.ac.uk/faq}) + \begin{answers}{4} + \bChoices + \Ans0 No\eAns + \Ans0 Yes\eAns + \eChoices + \end{answers} + +\item\label{FAQ1} If you answered ``Yes'' to question, \hyperref[FAQ]{(\ref*{FAQ})} have you ever used the \textsf{FAQ}? + \begin{answers}{4} + \bChoices + \Ans0 No\eAns + \Ans0 Yes, \makebox[0pt][l]{how often? \fillin{1in}{\empty} per year.}\eAns + \eChoices + \end{answers} +\end{parts} +\end{problem*} + +\begin{problem} +In terms of paper publications, what are the titles of the books you use for a reference to your +work in \TeX/\LaTeX? Please list titles/authors in the space provided below. +\begin{solution}[1.8in] +\end{solution} +\end{problem} + +\goodbreak +\begin{eqComments}[Print and PDF.]\end{eqComments} + +\begin{problem} +What application do you use to create PDF? Adobe Distiller, ps2pdf, other. +\begin{answers}{3} +\rowsep{1bp} + \bChoices + \Ans0 Adobe Distiller\eAns + \Ans0 \textsf{ps2pdf} (\textsf{pdfwriter})\eAns + \Ans0 \textsf{pdftex}\eAns + \Ans0 \textsf{dvipdfm}\eAns + \Ans0 Other, \makebox[0pt][l]{please specify \fillin{1.75in}{\empty}}\eAns + \eChoices +\end{answers} +\end{problem} + +\begin{problem} +Describe the reasons you create PDF document from a \TeX/\LaTeX{} source. Is it for +distribution over the Internet; to create interactive, high +content materials; for business purposes? Please elaborate in the +space provided below. +\begin{solution}[.75in] +\end{solution} +\end{problem} + +\begin{problem} +Do you use {\TeX/\LaTeX} primarily for creating printable documents, or for creating +a PDF document suitable for publication on the Internet, or distribution to a colleague? +\begin{answers}{3} + \bChoices + \Ans0 Exclusively for print\eAns + \Ans0 Mostly for PDF\eAns + \Ans0 About half and half\eAns + \eChoices +\end{answers} +\end{problem} + +\begin{problem} +If you have any experience or knowledge of commercial publishing +houses that use a \TeX/\LaTeX{} or \textsf{pdftex} work flow for +prepress typesetting, please list publishing houses and countries +in the space provided below. +\begin{solution}[.75in] +\end{solution} +\end{problem} + +\begin{eqComments}[Population Demographics.] +The next set of questions concern you. +\end{eqComments} + +\begin{problem} +My gender is \dots +\begin{answers}{5} + \bChoices + \Ans0 Male\eAns + \Ans0 Female\eAns + \Ans0 \makebox[0pt][l]{Prefer not to disclose}\eAns + \eChoices +\end{answers} +\end{problem} + +\begin{problem} +I am \fillin{.75in}{\empty} years old. +\end{problem} + +\begin{problem} +Which of the following best describes your status as +an \TeX{} user today? Select one: + +\begin{answers}{1} + \bChoices + \Ans0 Use as a student\eAns + \Ans0 Use as an educator/trainer\eAns + \Ans0 Use at home for personal use or as a hobby\eAns + \Ans0 Use for a home-based business\eAns + \Ans0 Use in a company or business (non-home based)\eAns + \eChoices +\end{answers} +\end{problem} + +\begin{problem} +What is your country of residence? Select one: + +\setlength\columnseprule{0pt} + +\begin{multicols}{2} +\begin{answers}{1} + \bChoices + \Ans0 United States of America\eAns + \Ans0 Canada\eAns + \Ans0 Other Americas, \mbox{specify: \fillin{1.24in}{\empty}}\eAns + \Ans0 United Kingdom\eAns + \Ans0 France\eAns + \Ans0 Germany\eAns + \Ans0 Sweden\eAns + \Ans0 Netherlands\eAns + \Ans0 Other Europe, \mbox{specify: \fillin{1.25in}{\empty}}\eAns + \Ans0 Japan\eAns + \Ans0 Hong Kong/Taiwan\eAns + \Ans0 China\eAns + \Ans0 Other Asia, \mbox{specify: \fillin{1.25in}{\empty}}\eAns + \Ans0 Australia\eAns + \Ans0 New Zealand\eAns + \Ans0 Africa, \mbox{specify: \fillin{1.25in}{\empty}}\eAns + \eChoices +\end{answers} +\end{multicols} +\end{problem} + +\def\myDing{\makebox[0pt][r]{\textcolor{red}{\ding{042}}\enspace}} + +\begin{eqComments}[]% +\myDing If your company/organization uses \TeX/\LaTeX/\textsf{pdftex} in their business work flow, +please answer questions \textbf{\textcolor{blue}{\ref*{buss1}}} and \textbf{\textcolor{blue}{\ref*{buss2}}}. +\end{eqComments} + +\begin{problem}\label{buss1} +How many employees work at your company including all +sites? Select one: + +\setlength\columnseprule{0pt} +\begin{multicols}{3} +\begin{answers}{1} + \bChoices + \Ans0 One/work alone\eAns + \Ans0 2 - 9\eAns + \Ans0 10 - 49\eAns + \Ans0 50 - 99\eAns + \Ans0 100 - 499\eAns + \Ans0 500 - 999\eAns + \Ans0 1000 - 2999\eAns + \Ans0 3000 - 4999\eAns + \Ans0 5000 or more\eAns + \Ans0 Don't know\eAns + \eChoices +\end{answers} +\end{multicols} +\end{problem} + +\begin{problem}\label{buss2} +What is your company/organization's PRIMARY industry? Select one: + +\setlength\columnseprule{0pt} + +\begin{multicols}{2} +\begin{answers}{1} + \bChoices + \Ans0 Aerospace\eAns + \Ans0 Automotive\eAns + \Ans0 Computer hardware\eAns + \Ans0 Computer software\eAns + \Ans0 Education\eAns + \Ans0 Engineering\eAns + \Ans0 Financial services\eAns + \Ans0 Government\eAns + \Ans0 Graphic design/fine art\eAns + \Ans0 Healthcare/social services\eAns + \Ans0 Insurance\eAns + \Ans0 Legal\eAns + \Ans0 Manufacturing\eAns + \Ans0 Membership organizations - religious, nonprofit, trade unions\eAns + \Ans0 Military\eAns + \Ans0 Pharmaceuticals/bio tech\eAns + \Ans0 Professional services (documentation)\eAns + \Ans0 Professional services (technical/IT/Internet)\eAns + \Ans0 Printing and publishing\eAns + \Ans0 Public and protective services (police, fire)\eAns + \Ans0 Retail\eAns + \Ans0 Telecommunications\eAns + \Ans0 Transportation\eAns + \Ans0 Travel\eAns + \Ans0 Wholesale\eAns + \Ans0 Other, \mbox{please specify: \fillin{1.25in}{\empty}}\eAns + \eChoices +\end{answers} +\end{multicols} +\end{problem} + +\begin{eqComments}[Improvements in \TeX.]\end{eqComments} + +\begin{problem} +What you most like to see improved in \TeX/\LaTeX? Use the space provided +below: +\begin{solution}[2in] +\end{solution} +\end{problem} + + +\begin{eqComments}[Thank You] once again for participating in this survey.\end{eqComments} +\begin{eqComments}[\GoToSubmit] +Click on the left arrow to return to the first page to submit your responses.\end{eqComments} + + + +\end{exam} +\end{document} diff --git a/Master/texmf-dist/doc/latex/eqexam/script/eqAttach.asp b/Master/texmf-dist/doc/latex/eqexam/script/eqAttach.asp new file mode 100644 index 00000000000..f87f8b47c12 --- /dev/null +++ b/Master/texmf-dist/doc/latex/eqexam/script/eqAttach.asp @@ -0,0 +1,202 @@ +<%@ LANGUAGE = VBScript%> +<% +' Copyright 2005 D. P. Story +' All Rights Reserved +' See eqexamman.pdf for some documentation + +' NOTICE: This program can redistributed and/or modified under +' the terms of the LaTeX Project Public License +' Distributed from CTAN archives in directory +' macros/latex/base/lppl.txt; either version 1 of the +' License, or (at your option) any later version. + +' This script is offered "as is", no guarantees are extended. +' eqRecord should be extensively tested on your own system +' until you are satisfied with its functionality and +' reliability. +' +' Note: You need to edit one line below. Search this file for the line that +' contains the string "mySMTP". Replace this string with your SMTP server. + +Response.buffer = True + +Dim DebugTxt, DebugFDF +Dim ErcStatus : ErcStatus = "Problems Reported: " +DebugTxt = False +DebugFDF = False + +' Send FDF file +If DebugTxt Then + Response.ContentType = "text/html" + Response.Write "Debug Info" & "
" +Else + Response.ContentType = "application/vnd.fdf" +End If + +On error Resume Next + +Dim silentMode : silentMode = False +Dim stripPath : stripPath = False + +If Request.QueryString("silent").Count > 0 Then silentMode = True +If Request.QueryString("nopath").Count > 0 Then stripPath = True + +Rem Create an FDF object +Set FdfAcx = Server.CreateObject("FdfApp.FdfApp") +Set FDFout = FdfAcx.FDFCreate + +Rem Parse Incoming Data +Set FDFin = FdfAcx.FDFOpenFromBuf (Request.BinaryRead(Request.TotalBytes)) + +Dim cPDFPath, pos + +If stripPath Then + If DebugTxt Then Response.Write "stripPath is true " & "
" + cPDFPath = FDFin.FDFGetFile + pos = InStrRev( cPDFPath, "/") + If pos <> 0 Then + If DebugTxt Then Response.Write "pos = " & pos & "
" + cPDFPath = Mid(cPDFPath, pos + 1, Len(cPDFPath) - pos ) + If DebugTxt Then Response.Write "cPDFPath = " & cPDFPath & "
" + FDFin.FDFSetFile cPDFPath + End If +End If + +Rem Declare some variables +Dim cBuf +Dim cTime : cTime = Now +Dim eqMail, cMailTo, cMailFrom, cMailSubject +Dim cCourseName, cExam, cStudent, cSID, strMessage, cRetnMsg, eqTab, eqCR +eqTab = chr(9) +eqCR = chr(10) + +' Get Required Info ------------------- +' The only thing we really need is the email address to send this data to +cMailTo = FDFin.FDFGetValue("IdInfo.mailTo") +' cMailFrom = cMailTo + +' Get Optional Info ------ + +On error Resume Next +cCourseName = "" : cCourseName = Trim(FDFin.FDFGetValue("IdInfo.courseName")) + +On error Resume Next +cExam = "" : cExam = Trim(FDFin.FDFGetValue("IdInfo.examName")) + +On error Resume Next +cStudent = "" : cStudent = Trim(FDFin.FDFGetValue("IdInfo.Name")) + +On error Resume Next +cSID = "" : cSID = Trim(FDFin.FDFGetValue("IdInfo.SID")) + +On error Resume Next +cMailFrom = "" : cMailFrom = Trim(FDFin.FDFGetValue("IdInfo.email")) +If Trim(cMailFrom) = "" Then cMailFrom = cMailTo + +On error Resume Next +cMailSubject = "" : cMailSubject = FDFin.FDFGetValue("IdInfo.subject") +If Trim(cMailSubject) = "" Then cMailSubject = "Exam Results: " & cExam & " of " & cCourseName + +On error Resume Next +cRetnMsg = "" : cRetnMsg = Trim(FDFin.FDFGetValue("IdInfo.retnmsg")) + +strMessage = "Summary Information:" +If cCourseName <> "" Then strMessage = strMessage & eqCR & eqTab & "Subject: " & cCourseName +If cExam <> "" Then strMessage = strMessage & eqCR & eqTab & "Title: " & cExam +If cStudent <> "" Then strMessage = strMessage & eqCR & eqTab & "Name: " & cStudent +strMessage = strMessage & eqCR & eqTab & "TimeOfQuiz: " & cTime + +If Trim(cRetnMsg) = "" Then + cBuf = "Exam results successfully sent to your instructor!" +Else + cBuf = cRetnMsg +End If + +If DebugFDF Then cBuf = cBuf & " " & ErcStatus + +If Not silentMode Then FDFout.FDFSetStatus cBuf + +' Construct and send e-mail + +'CDONTS +' Set eqMail = CreateObject("CDONTS.NewMail") 'cdots + +' CDOSYS +Set eqMail = Server.CreateObject("CDO.Message") +eqMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 +eqMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mySMTP" +eqMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 +eqMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 +' eqMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 0 +eqMail.Configuration.Fields.Update + +eqMail.To = cMailTo +' See if there is a comma in the cMailFrom string, if yes, then we have multiple addresses +' that we are sending to. We extract the first e-mail address as the one we will put in +' the eqMail.From address. +position = InStr(1,cMailFrom,",",0) +If position <> 0 Then cMailFrom = Trim(Mid(cMailFrom,1,position-1)) +eqMail.From = cMailFrom +eqMail.Subject = cMailSubject + +' CDOSSYS or CDONTS +eqMail.TextBody = strMessage +' eqMail.Body = strMessage 'cdots + +Dim strTempFile +Dim strTempFolder +Dim strTemp +Dim fso + +Set fso = CreateObject("Scripting.FileSystemObject") +Set strTempfolder = fso.GetSpecialFolder(2) +strTempFile = fso.GetTempName() +strTempFile = left(strTempFile, len(strTempFile)-4) +strTemp = strTempFolder & "\" & strTempFile & ".fdf" +FDFin.FDFSaveToFile strTemp + +If DebugTxt Then Response.Write "strTemp = " & strTemp & "
" + +' CDOSSYS or CDONTS +eqMail.AddAttachment strTemp +' eqMail.AttachFile strTemp 'cdots + +eqMail.Send +Set eqMail = Nothing +' Send back to the browser +Response.BinaryWrite FDFout.FDFSaveToBuf + +' Delete temporary file +fso.DeleteFile strTemp +Set fso = nothing + +FDFin.FDFClose +FDFout.FDFClose +Set FdfAcx = Nothing +Set FDFin = Nothing +Set FDFout = Nothing + +If DebugTxt Then + Response.Write strMessage +End If + +Sub RecordError(field) + If Err.Number <> 0 And DebugFDF Then + ErcStatus = ErcStatus & " "&field&": " & Err.Description + End If + If Err.Number <> 0 And DebugTxt Then + Response.Write "Set Error: "&field&": " & Err.Description & "
" + End If + Err.Clear +End Sub + +Sub ReportError(ByRef localErr) + DebugMsg "Err.Description: ", localErr.Description + DebugMsg "Err.Number: ", localErr.Number + localErr.Clear +End Sub + +Sub DebugMsg(myText, myEval) + If DebugTxt Then Response.Write myText & myEval &"
" +End Sub +%> diff --git a/Master/texmf-dist/source/latex/eqexam/eqexam.drv b/Master/texmf-dist/source/latex/eqexam/eqexam.drv new file mode 100644 index 00000000000..04cd89e6348 --- /dev/null +++ b/Master/texmf-dist/source/latex/eqexam/eqexam.drv @@ -0,0 +1,37 @@ +%% +%% This is file `eqexam.drv', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% eqexam.dtx (with options: `copyright,driver') +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% eqExam.sty package, 2005-02-05 %% +%% Copyright (C) 2005 D. P. Story %% +%% dpstory@uakron.edu %% +%% %% +%% This program can redistributed and/or modified under %% +%% the terms of the LaTeX Project Public License %% +%% Distributed from CTAN archives in directory %% +%% macros/latex/base/lppl.txt; either version 1 of the %% +%% License, or (at your option) any later version. %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\documentclass{ltxdoc} +\usepackage[colorlinks,hyperindex]{hyperref} +\RecordChanges +\begin{document} + \GetFileInfo{eqexam.sty} + \title{eqExam: An Exam Construction Package} + \author{D. P. Story\\ + Email: \texttt{dpstory@uakron.edu}} + \date{Processed \today} + \maketitle + \tableofcontents + \let\Email\texttt + \DocInput{eqexam.dtx} +\PrintIndex +\end{document} +\endinput +%% +%% End of file `eqexam.drv'. diff --git a/Master/texmf-dist/source/latex/eqexam/eqexam.dtx b/Master/texmf-dist/source/latex/eqexam/eqexam.dtx new file mode 100644 index 00000000000..6faa7208bd6 --- /dev/null +++ b/Master/texmf-dist/source/latex/eqexam/eqexam.dtx @@ -0,0 +1,3049 @@ +% \iffalse +%<*copyright> +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% eqExam.sty package, 2005-02-05 %% +%% Copyright (C) 2005 D. P. Story %% +%% dpstory@uakron.edu %% +%% %% +%% This program can redistributed and/or modified under %% +%% the terms of the LaTeX Project Public License %% +%% Distributed from CTAN archives in directory %% +%% macros/latex/base/lppl.txt; either version 1 of the %% +%% License, or (at your option) any later version. %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +%\NeedsTeXFormat{LaTeX2e} +%\ProvidesPackage{eqexam} +% [2009/09/28 v1.9a An Exam Construction Package (dps)] +%<*driver> +\documentclass{ltxdoc} +\usepackage[colorlinks,hyperindex]{hyperref} +%\pdfstringdefDisableCommands{\let\\\textbackslash}% +%\EnableCrossrefs +%\CodelineIndex +\RecordChanges +\begin{document} + \GetFileInfo{eqexam.sty} + \title{eqExam: An Exam Construction Package} + \author{D. P. Story\\ + Email: \texttt{dpstory@uakron.edu}} + \date{Processed \today} + \maketitle + \tableofcontents + \let\Email\texttt + \DocInput{eqexam.dtx} +\PrintIndex +\end{document} +% +% \fi +% +% \MakeShortVerb{|} +% \StopEventually{} +% +% \DoNotIndex{\def,\edef,\gdef,\xdef,\global,\long,\let} +% \DoNotIndex{\expandafter,\string,\the,\ifx,\else,\fi} +% \DoNotIndex{\csname,\endcsname,\relax,\begingroup,\endgroup} +% \DoNotIndex{\DeclareTextCommand,\DeclareTextCompositeCommand} +% \DoNotIndex{\space,\@empty,\special} +% \newpage +% \section{Change History} +% +% \makeatletter +% \renewenvironment{theglossary}{% +% \let\efill=\relax +% \begin{itemize}}% +% {\end{itemize}} +% \global\c@GlossaryColumns = 1 +% \makeatother +% \PrintChanges +% \section{Introduction} +% This package is my attempt at writing a set of macros for creating exams. +% The package can be used with our without \textsf{web} or \textsf{exerquiz}. When used +% without, what is produced is a document suitable for printing. When \textsf{exerquiz} +% is used, the same document is produced, but with hypertext links to solutions. This +% may be useful for publishing solutions on the web, or publishing pretests with/without +% solutions. +% +% The package must be as flexible as possible vis-\`a-vis PDF. (1) \textsf{web} only does not add much, +% it does input hyperrref and test info such as \cs{title}, \cs{subject}, etc are placed in the +% Document Info fields of the PDF. (2) If \textsf{exerquiz} is also input (prior to \textsf{eqExam}), +% then hyperlinks will be created to the solutions to the test, if solutions are included at the end +% of the document. (3) If \textsf{web} and \textsf{exerquiz} are input, and the \texttt{online} option +% is taken, then the checkboxes will be come interactive, the space left to work the problems +% will be multi-line text boxes, fill-ins limited to True/False and simple text fill-in the blank will +% also become text boxes. +% +% When in \texttt{online} mode, the student can take the test in a computer lab, the completed exam +% can be printed and handed in, or perhaps submitted server-side script. +% +% \newpage +% \section{Package options and Process Options} +% Let us catalog the options of this package. +% +% \subsection{Options New to eqExam} +% +% Here are some options unique to this package. +% \begin{macrocode} +%<*package> +% \end{macrocode} +% \begin{macrocode} +\usepackage{keyval} +% \end{macrocode} +% \begin{macro}{myconfig} +% \begin{macro}{myconfigi} +% \begin{macro}{myconfigii} +% \begin{macro}{pointsonleft} +% \begin{macro}{pointsonright} +% \begin{macro}{nopoints} +% \begin{macro}{totalsonleft} +% \begin{macro}{totalsonright} +% \begin{macro}{pointsonboth} +% \begin{macro}{nototals} +% \begin{macro}{noparttotals} +% \begin{macro}{noseparationrule} +% \begin{macro}{nosummarytotals} +% \begin{macro}{coverpage} +% \begin{macro}{nospacetowork} +% \begin{macro}{answerkey} +% \begin{macro}{useforms} +% \begin{macro}{online} +% \begin{macro}{pdf} +% \begin{macro}{links} +% \begin{macro}{email} +% \begin{macro}{obeylocalversions} +% The following is the list of options that control the behavior of \textsf{eqExam}. +% \begin{macrocode} +\DeclareOption{myconfig}{\AtEndOfPackage{\eqemyconfig}} +\DeclareOption{myconfigi}{\AtEndOfPackage{\eqemyconfigi}} +\DeclareOption{myconfigii}{\AtEndOfPackage{\eqemyconfigii}} +\DeclareOption{pointsonleft}{\AtEndOfPackage{\PointsOnLeft}} +\DeclareOption{pointsonright}{\AtEndOfPackage{\PointsOnRight}} +\DeclareOption{nopoints}{\AtEndOfPackage{\NoPoints}} +\DeclareOption{totalsonleft}{\AtEndOfPackage{\TotalsOnLeft}} +\DeclareOption{totalsonright}{\AtEndOfPackage{\TotalsOnRight}} +\DeclareOption{pointsonboth}{\AtEndOfPackage{\PointsOnBothSides}} +\DeclareOption{nototals}{\AtEndOfPackage{\NoTotals}} +\DeclareOption{noparttotals}{\AtEndOfPackage{\let\eq@parttotals=n}} +\DeclareOption{noseparationrule}{% + \AtEndOfPackage{\let\separationrule\relax}} +\DeclareOption{nosummarytotals}{\let\eq@nosummarytotals=y} +\DeclareOption{coverpage}{\def\eqex@coverpage{\eqexcoverpage}} +\DeclareOption{nospacetowork}{% + \AtEndOfPackage{\let\eq@insertverticalspace=n}} +\newif\ifanswerkey \answerkeyfalse +\DeclareOption{answerkey}{\answerkeytrue\eq@proofingtrue + \eq@solutionsaftertrue} +\DeclareOption{useforms}{\AtEndOfPackage{\def\sqstar{*}}} +\DeclareOption{online}{\let\eq@online=y\ExecuteOptions{links}} +\DeclareOption{pdf}{\let\load@web=y} +\DeclareOption{links}{\let\load@web=y\let\load@exerquiz=y} +\DeclareOption{email}{\let\use@email=y\ExecuteOptions{online}} +\newif\ifeqobeylocalversion\eqobeylocalversionfalse +\DeclareOption{obeylocalversions}{\eqobeylocalversiontrue} +\DeclareOption{usexkv}{\let\eq@usexkeys=y} +\let\eq@usexkeys=n +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{allowrandomize} +% Use this option to randomize the choices of a multiple choice question. +% \begin{macrocode} +\DeclareOption{allowrandomize}{\AtEndOfPackage{\inputRandomizeChoices}} +\def\inputRandomizeChoices{\InputIfFileExists{aebrandom.def} + {\typeout{inputting aebrandom.def}}{cannot find aebrandom.def}} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\let\eq@online=n +\let\use@email=n +\let\load@web=n +\let\load@exerquiz=n +\def\sqstar{} +\def\sqLinks{\def\sqstar{}} +\def\sqForms{\def\sqstar{*}} +\def\NoSpaceToWork{\let\eq@insertverticalspace=n} +\def\SpaceToWork{\let\eq@insertverticalspace=y} +\let\eq@nototals=n +\let\eq@nosummarytotals=n +\let\eq@parttotals=y +\let\eqx@separationrule=y +\let\eq@insertverticalspace=y +\let\eqex@coverpage=\relax +\def\@reportpoints{0} +\let\marginpoints=\@empty +\let\totalsbox=\hfil +% \end{macrocode} +% +% \subsection{Options from Exerquiz} +% +% Options from \textsf{exerquiz} that are useful for this package. +% \begin{macro}{forpaper} +% \begin{macro}{forcolorpaper} +% \begin{macro}{preview} +% \begin{macro}{nosolutions} +% \begin{macro}{nohiddensolutions} +% \begin{macro}{noHiddensolutions} +% \begin{macro}{solutionsafter} +% \begin{macro}{solutionsonly} +%\changes{v1.7b}{2007/21/07}{Added a \texttt{solutionsonly} option} +% \begin{macro}{proofing} +% Here is the list of options of \textsf{exerquiz} we plan to recognize. +% \begin{macrocode} +\DeclareOption{forpaper}{\eqforpapertrue + \PassOptionsToPackage{monochrome}{\eq@ColorPackage}} +\DeclareOption{forcolorpaper}{\eqforpapertrue} % for print +\DeclareOption{preview}{\previewtrue} +\DeclareOption{nosolutions}{\eq@nolinktrue\eq@nosolutionstrue} +\DeclareOption{nohiddensolutions}{\eq@globalshowsolutionstrue} +\DeclareOption{noHiddensolutions}% + {\eq@globalshowsolutionstrue\AtBeginDocument{\def\Hidesymbol{h}}} +\DeclareOption{solutionsafter}{\eq@solutionsaftertrue} +\DeclareOption{solutionsonly}{\solutionsonlytrue\answerkeytrue + \AtEndOfPackage{\therearesolutionstrue\let\exerSolnsHeadnToc\relax}} +\DeclareOption{proofing}{\eq@proofingtrue} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{showgrayletters} +%\changes{v1.7c}{2008/08/21} +%{ +% Added the \texttt{showgrayletters} option to eqexam (ported from exerquiz) +%} +% When this option is in effect, capital letters in gray appear under +% the multiple choice question boxes. +% \begin{macrocode} +\newif\ifaebshowgrayletters\aebshowgraylettersfalse +\DeclareOption{showgrayletters}% + {\AtEndOfPackage{\aebshowgrayletterstrue}} +% \end{macrocode} +% \end{macro} +% Set the driver dependent code, these are passed to web/exerquiz. +% \begin{macrocode} +\IfFileExists{xcolor.sty}% +{\def\eq@ColorPackage{xcolor}\PassOptionsToPackage{xcolor}{table}} +{\def\eq@ColorPackage{color}} +\DeclareOption{noxcolor}{\def\eq@ColorPackage{color}} +\def\eq@drivernum{5} +\def\eqDriverName{dvipsone} +% \end{macrocode} +% +% \subsection{Drivers Recognized} +% +% \begin{macro}{dvipsone} +% \begin{macro}{dvips} +% \begin{macro}{pdftex} +% \begin{macro}{dvipdfm} +% \begin{macro}{textures} +% A list of recognized drivers. +% \begin{macrocode} +\DeclareOption{dvipsone}{\def\eq@drivernum{0}\def\eqDriverName{dvipsone} + \PassOptionsToPackage{\eq@ColorPackage}{dvipsone}} +\DeclareOption{dvips}{\def\eq@drivernum{0}\def\eqDriverName{dvips} + \PassOptionsToPackage{\eq@ColorPackage}{dvips}} +\DeclareOption{pdftex}{\def\eq@drivernum{1}\def\eqDriverName{pdftex} + \PassOptionsToPackage{\eq@ColorPackage}{pdftex}} +\DeclareOption{dvipdfm}{\def\eq@drivernum{2}\def\eqDriverName{dvipdfm} + \PassOptionsToPackage{\eq@ColorPackage}{dvipdfm}} +\DeclareOption{textures}{\def\eq@drivernum{3}\def\eqDriverName{textures} + \PassOptionsToPackage{\eq@ColorPackage}{textures}} +\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{\eq@ColorPackage}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macrocode} +\@ifpackageloaded{xcolor}% +{% + \@ifpackagelater{xcolor}{2004/07/04}{} + {% + \PackageError{eqexan}{% + *************************************************\MessageBreak + * Your Version of `xcolor.sty' is too old!\MessageBreak + * You need the version from 2004/07/04 or newer\MessageBreak + * or use: \string\usepackage[noxcolor]{eqexam}\MessageBreak + * or \string\documentclass[noxcolor]{article}\MessageBreak + *************************************************}{}% + }% +}{} +% \end{macrocode} +% If \textsf{exerquiz} is not loaded, when we need to define some of the switches that +% were defined in \textsf{exerquiz}. +% +% The following switches are used in the options above, and are also defined +% in web, exerquiz, or eforms. +% \begin{macrocode} +\newif\ifeq@solutionsafter \eq@solutionsafterfalse +\newif\ifsolutionsonly\solutionsonlyfalse +\newif\ifeq@hidesolution \eq@hidesolutionfalse +\newif\ifeq@globalshowsolutions \eq@globalshowsolutionsfalse +\newif\ifeq@nosolutions \eq@nosolutionsfalse +\newif\ifeq@proofing \eq@proofingfalse +\newif\ifeq@nolink \eq@nolinkfalse +\newif\ifpreview \previewfalse +\newif\ifeqforpaper \eqforpaperfalse +\def\eqemyconfig{\InputIfFileExists{eqexam.cfg}{}{}} +\def\eqemyconfigi{\InputIfFileExists{eqexami.cfg}{}{}} +\def\eqemyconfigii{\InputIfFileExists{eqexamii.cfg}{}{}} +% \end{macrocode} +% +% \subsection{Bring in Config Files} +% +% First read \texttt{web.cfg}, to possibly get the driver, then input \texttt{eqecus.opt}, +% which is used to create convenient custom options. +% \changes{v1.6e}{2006/05/07} +%{ +% Added a custom option feature. Just before the options are processed, +% the tex compiler looks for the file \texttt{eqecus.opt}. This file should +% contain one or more custom options. +%} +% +% Here is an example of usage for defining your own custom options, must be based on +% current options, this code would be in the file \texttt{eqecus.opt}. +%\begin{verbatim} +%\DeclareOption{atbdbopts} +%{% +% \ExecuteOptions{online} +% \ExecuteOptions{forcolorpaper} +% \ExecuteOptions{nosolutions} +% \ExecuteOptions{nopoints} +% \ExecuteOptions{nototals} +% \ExecuteOptions{nospacetowork} +% \ExecuteOptions{obeylocalversions} +% \ExecuteOptions{myconfig} +%} +%\end{verbatim} +% \begin{macrocode} +\InputIfFileExists{web.cfg}{}{} +\InputIfFileExists{eqecus.opt}{}{} +% \end{macrocode} +% +% \subsection{Process Options} +% +% Now process the options. +% \begin{macrocode} +\ProcessOptions +% \end{macrocode} +% +% \subsection{Save Switch Values} +% +% Now, save the current state of the switches defined above. When, and if, +% the packages web, \textsf{exerquiz} and \textsf{eforms} are loaded, they will overwrite the +% choices set by the author, so we save them. +% \begin{macrocode} +\let\savedeq@online\eq@online +\let\savedifeq@solutionsafter\ifeq@solutionsafter +\let\savedifeq@hidesolution\ifeq@hidesolution +\let\savedifeq@globalshowsolutions\ifeq@globalshowsolutions +\let\savedifeq@nosolutions\ifeq@nosolutions +\let\savedifeq@proofing\ifeq@proofing +\let\savedifeq@nolink\ifeq@nolink +\let\savedifpreview\ifpreview +\let\savedifeqforpaper\ifeqforpaper +\let\ifnosolutions\ifeq@nosolutions +% \end{macrocode} +% \section{Required Packages} +% The following are the required packages for \texttt{eqExam}. +% \begin{macrocode} +\RequirePackage{amstext,amssymb} +% \end{macrocode} +% Bring the \texttt{comment} package in early, before \texttt{verbatim}, these two +% clash a bit. +% \begin{macrocode} +\RequirePackage{comment} +% \end{macrocode} +% If user has specified one of the pdf options (pdf, links, online, email), we bring in +% the web package. +% \begin{macrocode} +\@ifpackageloaded{web}{\let\load@web=y} +{% + \ifx\load@web y + \ifnum\eq@drivernum=5 + \PackageError{eqexam}{****You have not selected a driver % + for eqExam****}{Specify dvipsone, dvips, pdftex, % + dvipdfm or textures in option list.} + \fi + \RequirePackage[\eqDriverName]{web} + \edef\@pdfcreator{\@pdfcreator, The eqExam Package} + + \fi +} +% \end{macrocode} +% If user has specified links, online or email, we bring in the exerquiz package. +% \begin{macrocode} +\@ifpackageloaded{exerquiz}{\let\load@exerquiz=y} +{% + \ifx\load@exerquiz y + \RequirePackage[nodljs]{exerquiz}[2005/1/23] +% \end{macrocode} +% We input \textsf{exerquiz} with the \texttt{nodljs}, we don't need all the JavaScript +% to process interactive shortquizzes or quizzes, but we do want the option of +% adding in document JavaScript, so after we input \textsf{exerquiz}, we set the +% switches to allow these features. +% \begin{macrocode} + \let\importdljs=y + \let\execjs=y + \fi +} +% \end{macrocode} +% Here is a fix to a problem I've been having previewing in dviwindo. I've traced +% the problem down to \cs{@pdfviewparams}, and changing the the following. Hope it +% causes no more problems. +% \begin{macrocode} +\def\eqDvipsone{dvipsone} +\ifx\eqDriverName\eqDvipsone +\@ifpackageloaded{hyperref} + {\renewcommand\@pdfviewparams{ null null null}}{} +\fi +% \end{macrocode} +% Now that we have possibly input web or exerquiz, we need to restore the authors options. +% \begin{macrocode} +\let\eq@online\savedeq@online +\let\ifeq@solutionsafter\savedifeq@solutionsafter +\def\ifsolutionsafter{\ifeq@solutionsafter} % user interface +\let\ifeq@hidesolution\savedifeq@hidesolution +\let\ifeq@globalshowsolutions\savedifeq@globalshowsolutions +\let\ifeq@nosolutions\savedifeq@nosolutions +\let\ifeq@proofing\savedifeq@proofing +\let\ifeq@nolink\savedifeq@nolink +\let\ifpreview\savedifpreview +\let\ifeqforpaper\savedifeqforpaper +% \end{macrocode} +% Other packages of interest. +% \begin{macrocode} +\RequirePackage{\eq@ColorPackage} +\RequirePackage{calc} +\RequirePackage{pifont} +% \end{macrocode} +% Here, I input the \texttt{verbatim} package after the comment package. +% \begin{macrocode} +\RequirePackage{verbatim} +% \end{macrocode} +% When constructing paper tests, I often use a multi-column format for some of +% the questions, so let's require this package +% \begin{macrocode} +\RequirePackage{multicol} +\setlength\columnseprule{.4pt} +\raggedcolumns\multicolsep=3pt +% \end{macrocode} +% \section{Page Layout} +% Here we provide a simple page layout, which yields a ``maximum'' amount of space for the test. +% \begin{macrocode} +\setlength{\headsep}{0pt} +\settowidth{\oddsidemargin}{\normalsize\normalfont\bfseries00.\ } +\setlength{\evensidemargin}{0pt} +\setlength{\marginparsep}{11pt} +\setlength{\marginparwidth}{35pt} +\setlength{\headheight}{12pt} +\setlength{\topmargin}{-.5in} +%\setlength{\topmargin}{0pt} +\setlength{\headsep}{20pt} +\setlength{\footskip}{\marginparsep} +% \end{macrocode} +% \begin{macro}{\eqExamPageLayout} +% Set the basic parameters of this exam page package +% \begin{macrocode} +\def\eqExamPageLayout +{% + \setlength\textwidth\paperwidth + \addtolength{\textwidth}{-2in} + \addtolength{\textwidth}{-\oddsidemargin} + \setlength\textheight{\paperheight} + \addtolength\textheight{-2in} + \addtolength\textheight{-\headheight} + \addtolength\textheight{-\headsep} + \addtolength\textheight{-\topmargin} + \addtolength\textheight{-\footskip} +} +\eqExamPageLayout +% \end{macrocode} +% \end{macro} +% A simple page layout scheme for this exam. +% \begin{macrocode} +\newcommand{\ps@eqExamheadings} +{% + \renewcommand{\@oddhead}{% + {% + \normalfont\normalsize + \ifnum\value{page}=1 \hfil + \else + \ifx\eqex@coverpage\relax + \eqExamRunHead + \else + \ifnum\value{page}=2 \hfil + \else + \eqExamRunHead + \fi + \fi + \fi + }% +} +\renewcommand{\@evenhead}{\@oddhead} +\renewcommand{\@oddfoot}{\settotalsbox} +\renewcommand{\@evenfoot}{\@oddfoot}} +\raggedbottom +% \end{macrocode} +% \section{Counters, Lengths and Tokens} +% Some counters to keep track of things. \DescribeEnv{eqpointsofar} +% \DescribeEnv{eqpointsthispage} The first two counters keep track, respectively, +% of the total points so far up the current page, and the number of points +% on the current page. \DescribeEnv{eq@numparts} The counter \texttt{eq@numparts} +% holds the number of parts of the multi-part question. +% \begin{macrocode} +\newcounter{eqpointsofar} +\newcounter{eqpointsthispage} +\newcounter{eq@numparts} +\newcounter{eq@count} +\newtoks\partNames \partNames={} +\newlength{\eq@tmplengthA} +\newbox{\eq@pointbox} +\newlength{\eq@pointboxtotalheight} +% \end{macrocode} +% Some scratch registers to do calc calculations. +% \begin{macrocode} +\newlength{\eqetmplengtha} +\newlength{\eqetmplengthb} +% \end{macrocode} +% \section{Some Macros to Support the Options} +% We make a few definitions to support various options. +% \begin{macrocode} +\def\eqbothmargins#1#2{\eqleftmargin{#1}{#2}\eqrightmarginbox{#1}{#2}} +\def\PointsOnLeft{\def\@reportpoints{1}\let\marginpoints=\eqleftmargin} +\def\PointsOnRight{\def\@reportpoints{2}\relax + \let\marginpoints=\eqrightmarginbox} +\def\PointsOnBothSides{\def\@reportpoints{3}\relax + \let\marginpoints=\eqbothmargins} +\def\NoPoints{\def\@reporttotals{0}\let\totalsbox=\hfil + \let\marginpoints=\@empty\let\eq@nosummarytotals=y} +\def\TotalsOnLeft{\def\@reporttotals{1}\def\totalsbox{\totalsboxleft}} +\def\TotalsOnRight{\def\@reporttotals{2}\def\totalsbox{\totalsboxright}} +\def\NoTotals{\def\@reporttotals{0}\let\totalsbox=\hfil} +\def\eoeTotalOff{\let\eq@parttotals=n} +\def\eoeTotalOn{\let\eq@parttotals=y} +\def\separationruleOn{\let\eqx@separationrule=y} +\def\separationruleOff{\let\eqx@separationrule=n} +% \end{macrocode} +% \begin{macro}{\encloseProblemsWith} +%\changes{v1.7b}{2007/21/07}{Added \cs{encloseProblemsWith} to +% support the \texttt{solutionsonly} option} +% \begin{macrocode} +\def\encloseProblemsWith#1{\ifsolutionsonly + \excludecomment{#1}\else + \includecomment{#1}\fi +} +% \end{macrocode} +% \end{macro} +% \section{Colors} +% \begin{macro}{\proofingsymbolColor} +% \begin{macro}{\instructionsColor} +% \begin{macro}{\eqCommentsColor} +% \begin{macro}{\universityColor} +% \begin{macro}{\titleColor} +% \begin{macro}{\authorColor} +% \begin{macro}{\subjectColor} +% \begin{macro}{\linkcolor} +% \begin{macro}{\nolinkcolor} +% Here we list commands for controlling colors. There are some other colors defined +% in the stand alone code. +% \changes{v1.6e}{2006/05/07} +% { +% Added easy user access to various colors, \cs{proofing\-symbol\-Color}, +% \cs{instructionsColor}, \cs{eqCommentsColor}, \cs{authorColor}, +% \cs{title\-Color}, \cs{universityColor} and \cs{subjectColor} +% } +% \begin{macrocode} +\providecommand{\proofingsymbolColor}[1]{\def\@proofingsymbolColor{#1}} +\proofingsymbolColor{red} +\providecommand{\instructionsColor}[1]{\def\@instructionsColor{#1}} +\instructionsColor{blue} +\providecommand{\eqCommentsColor}[1]{\def\@eqCommentsColor{#1}} +\eqCommentsColor{blue} +\providecommand{\universityColor}[1]{\def\webuniversity@color{#1}} +\universityColor{blue} +\providecommand{\titleColor}[1]{\def\webtitle@color{#1}} +\titleColor{black} +\providecommand{\authorColor}[1]{\def\webauthor@color{#1}} +\authorColor{black} +\providecommand{\subjectColor}[1]{\def\websubject@color{#1}} +\subjectColor{blue} +\providecommand{\linkcolor}[1]{\def\@linkcolor{#1}} +\linkcolor{blue} +\providecommand{\nolinkcolor}[1]{\def\@nolinkcolor{#1}} +\nolinkcolor{blue} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \section{Version Control} +% Here are some simple macros use to create two versions, +% version A and version B, of the same test. +% \begin{macro}{\examNum} +% Convenience macro for holding the exam number. It sets the +% value of \cs{nExam}. +% \begin{macrocode} +\def\examNum#1{\def\nExam{#1}} +\examNum{1} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Exam} +% \begin{macro}{\sExam} +% Convenience macros for titling the exam. Usage: +%\begin{verbatim} +%\VersionAtext{Test~\nExam--Version A} +%\VersionBtext{Test~\nExam--Version B} +%\shortVersionAtext{T\nExam A} +%\shortVersionBtext{T\nExam B} +% +%\examNum{1} +%\forVersion{c} +%\subject[C3]{Calculus III} +%\title[\sExam]{\Exam} +%\author{Dr.\ D. P. Story} +%\end{verbatim} +% These next two definitions are overwritten by the two +% commands \cs{longTitleText} and \cs{shortTitleText}. +% \begin{macrocode} +\def\Exam{\ifAB{\eq@VersionAtext}{\eq@VersionBtext}} +\def\sExam{\ifAB{\eq@shortVersionAtext}{\eq@shortVersionBtext}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\VersionAtext} +% \begin{macro}{\VersionBtext} +% \begin{macro}{\shortVersionAtext} +% \begin{macro}{\shortVersionBtext} +% Convenience macros for entering the text for the title, long and short +% for versions A and B. +% \begin{macrocode} +\def\VersionAtext#1{\def\eq@VersionAtext{#1}} +\def\VersionBtext#1{\def\eq@VersionBtext{#1}} +\def\shortVersionAtext#1{\def\eq@shortVersionAtext{#1}} +\def\shortVersionBtext#1{\def\eq@shortVersionBtext{#1}} +\VersionAtext{Exam~\nExam--Version A} +\VersionBtext{Exam~\nExam--Version B} +\shortVersionAtext{Exam~\nExam A} +\shortVersionBtext{Exam~\nExam B} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% In this section we introduce a new set of commands that supersedes +% the commands defined above. Those commands were limited to only +% two versions. The ones below can handle up to $26$ versions. +% \begin{macrocode} +\newtoks\eqtemptokena +\newtoks\eqtemptokenb +% \end{macrocode} +% \begin{macro}{\numVersions} +% In the preamble, declare the number of versions for this document +% using \cs{numVersions}, e.g., |\numVersions{3}|. This sets the value +% of \cs{eq@nVersions} +% \begin{macrocode} +\def\numVersions#1{\ifnum#1>26\def\eq@nVersions{26}% + \PackageWarning{eqexam}{The value of \string\numVersions is too + large. \MessageBreak Choose a natural number less than 27.} + \else\def\eq@nVersions{#1}\fi} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\longTitleText} +% \begin{macro}{\endlongTitleText} +% \begin{macro}{\shortTitleText} +% \begin{macro}{\endshortTitleText} +% Next we state the long and short titles for our document, +% one for each of our declare number of versions given earlier. +% For example, we can use the value \cs{nExam} in out titles. Usage: +%\begin{verbatim} +%\longTitleText +% {Test~\nExam--Version A} +% {Test~\nExam--Version B} +% {Test~\nExam--Make Up} +%\endlongTitleText +%\shortTitleText +% {T\nExam A} +% {T\nExam B} +% {T\nExam MU} +%\endshortTitleText +%\end{verbatim} +% I've added markers that delimit the end of the arguments. In this +% way, the end of the list of titles can be detected, even though +% the number of titles is not the same as what is declared by the +% \cs{numVersions}. +% +% If there are more titles than what is declared, the rest are absorbed (gobbled). +% If there are fewer titles than declared, a {\LaTeX} package error is generated, +% and substitute titles are generated. +% \begin{macrocode} +\def\longTitleText +{% + \setcounter{eq@count}{0} + \eqtemptokena={} + \let\endtitleMarker\endlongTitleText + \@gatherTitleText{\Exam} +} +\def\endlongTitleText{l} +\def\shortTitleText +{% + \setcounter{eq@count}{0} + \eqtemptokena={} + \let\endtitleMarker\endshortTitleText + \@gatherTitleText{\sExam} +} +\def\endshortTitleText{s} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macrocode} +\def\@gatherTitleText#1#2{% + \def\eqe@argii{#2} + \if\endtitleMarker\eqe@argii +% \end{macrocode} +% Encountered the end marker. See if we have collected the +% correct number of titles declared. If we have collected too +% few, we note an warning in the log, and create titles. +% +% \begin{macrocode} + \ifnum\value{eq@count}>\eq@nVersions\let\eq@next\relax + \else\def\eq@next{\eq@shortTitlesFix{#1}}\fi + \else + \stepcounter{eq@count} + \eqtemptokenb=\expandafter{#2} + \xdef#1{\the\eqtemptokena\expandafter\noexpand + \csname v\Alph{eq@count}\endcsname{\the\eqtemptokenb}} + \xdef\sExam{\the\eqtemptokena\expandafter\noexpand + \csname v\Alph{eq@count}\endcsname{\the\eqtemptokenb}} + \eqtemptokena=\expandafter{#1} + \ifnum\value{eq@count}<\eq@nVersions + \def\eq@next{\@gatherTitleText{#1}}% + \else + \def\eq@next{% + \if\endtitleMarker\endlongTitleText + \expandafter\eqe@absorbTokensLong + \else + \expandafter\eqe@absorbTokensShort + \fi + }% + \fi + \fi + \eq@next +} +\long\def\eqe@absorbTokensLong#1\endlongTitleText{} +\long\def\eqe@absorbTokensShort#1\endshortTitleText{} +% \end{macrocode} +% We have reached \cs{endtitleMarker}, but the count is still less than \cs{eq@nVersions}, +% so we'll warn the user, and create titles for user. +% \begin{macrocode} +\def\eq@shortTitlesFix#1{% + \PackageWarning{eqexam}{You have defined an insufficient number + of titles for the number of versions declared in + \string\numVersions. Please fix the problem}% + \stepcounter{eq@count}% + \if\endtitleMarker\endlongTitleText + \edef\eqe@tmp{\noexpand\@gatherTitleText{\noexpand#1} + {??---Title \# \the\value{eq@count}---??}% + \noexpand\endlongTitleText} + \else + \edef\eqe@tmp{\noexpand\@gatherTitleText{\noexpand#1} + {T\#\the\value{eq@count}??}\noexpand\endshortTitleText} + \fi + \addtocounter{eq@count}{-1}% + \eqe@tmp +} +% \end{macrocode} +% Here, we define \cs{ifAB} so that document under the old system +% still work properly, I hope. Usage of \cs{ifAB} at this point +% is discouraged. +% \begin{macrocode} +\def\ifAB#1#2{\if\eq@selectedVersion A#1% + \else\if\eq@selectedVersion B#2% +\fi\fi} +\def\eq@replaceToken#1{#1} +% \end{macrocode} +% \begin{macro}{\forVersion} +% Here is the command that does all the work. It creates alternate +% text macros for each of the versions declared using \cs{numVersions}. +% +% For example, assuming |\numVersions{3}| appeared earlier, the +% command |\forVersion{a}| (or |\forVersion{A}|) defines $3$ text commands \cs{vA}, \cs{vB} and +% \cs{vC}, each taking one argument, the text you want to display: +%\begin{verbatim} +% Name the \vA{place}\vB{date}\vC{year} of the signing of the Declaration +% of independence. +%\end{verbatim} +% Since we said |forVersion{a}| only the \cs{vA} text +% is displayed, the others are gobbled up, etc. But wait, the \cs{forVersion} +% does more than that! It also creates a series of comment environments +% |\begin{verA}/\end{verA}|, |\begin{verB}/\end{verB}|, |\begin{verC}/\end{verC}|, etc., +% where only the version for which this compile applies will be typeset, +% the others are commented out. +%\begin{verbatim} +%\numVersions{3} +%\forVersion{b} +%... +%\begin{document} +%... +% Solve the equation for $\vA{x}\vB{y}\vC{z}$: +%\[ +%\begin{verA} +% 2x + 4 = 7 +%\end{verA} +%\begin{verB} +% 5y + 2 = 4 +%\end{verB} +%\begin{verC} +% 3z - 2 = 2 +%\end{verC} +%\] +%\end{verbatim} +% \changes{1.6b}{2006/04/03} +% { +% Changed the alphabet environments \texttt{A}, \texttt{B}, etc.\ due to a +% conflict with \cs{S}, the control sequence for the \textsf{amsmath} package +% for a section: \cs{S} expands to \S. Names changed to \texttt{verA}, \texttt{verB}, etc. +% } +% \changes{v1.6f}{2006/10/24} +% { +% Fixed a bug in the \cs{eqe@initializeMultiVersions} command, made sure that any +% already defined comment environments are set to relax. +% } +% \begin{macrocode} +\newif\ifeqglobalversion \eqglobalversionfalse +\newif\ifeqlocalversion \eqlocalversionfalse +\newif\if@templocalversion \@templocalversionfalse +\def\eqe@initializeMultiVersions{% + \let\save@message\message\let\message\@gobble + \@tfor\eqe@tmp:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{% + \expandafter\let\csname v\eqe@tmp\endcsname\@gobble + \expandafter\excludecomment\expandafter{ver\eqe@tmp}% + \expandafter\let\csname Afterver\eqe@tmp Comment\endcsname\relax + }\let\message\save@message +} +\AtBeginDocument{\let\eqe@initializeMultiVersions\relax} +\def\forVersion#1% +{% + \eqe@initializeMultiVersions + \global\eqglobalversiontrue + \setcounter{eq@count}{0} + \uppercase{\def\eq@selectedVersion{#1}} + \@ifundefined{eq@nVersions}{\PackageInfo{eqexam}{% + \string\numVersions\space has not been declared, \MessageBreak + taking the number of versions to be 2.}\def\eq@nVersions{2}}{} + \loop + \stepcounter{eq@count} + \expandafter\if\Alph{eq@count}\eq@selectedVersion + \xdef\eq@nSelectedVersion{\the\value{eq@count}}% + \setcounter{eq@count}{27}\fi + \ifnum\value{eq@count}<26\repeat + \ifnum\eq@nSelectedVersion >\eq@nVersions + \PackageError{eqexam} + {The value of \string\forVersion + \space(\eq@selectedVersion)\MessageBreak + exceeds the value of \string\numVersions\space + (\eq@nVersions)} + {Decrease the value of \string\forVersion.} + \fi + \setcounter{eq@count}{0} + \let\save@message\message\let\message\@gobble + \loop + \stepcounter{eq@count} + \expandafter + \let\csname After\Alph{eq@count}Comment\endcsname\relax + \lowercase + {% + \if#1\alph{eq@count} + \expandafter\let + \csname v\Alph{eq@count}\endcsname\@empty + \else + \expandafter\let + \csname v\Alph{eq@count}\endcsname\@gobble + \fi + \if#1\alph{eq@count} + \edef\eq@next + {\noexpand\includecomment{ver\Alph{eq@count}}} + \else + \edef\eq@next + {\noexpand\excludecomment{ver\Alph{eq@count}}} + \fi + }\eq@next + \ifnum\value{eq@count}<\eq@nVersions\repeat + \let\message\save@message +} +% \end{macrocode} +% Let us assume version A initially, user with reset this in document. +%\changes{1.6c}{2006/05/02} +%{% +% At the end of the package, set the initial value of \cs{select\-Version} to +% \string\verb!*+\string\selectVersion{26}+ and set the initial value +% of \cs{forVersion} to \string\verb!*+\string\forVersion{A}+. +%} +% \begin{macrocode} +\AtEndOfPackage{\numVersions{26}\forVersion{A}} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\selectVersion} +% When an exam has questions in which the number of variations are not all the same, +% then you can locally change the version between problems. +% If the first argument is empty, the first variation is chosen. +% The syntax is +%\begin{verbatim} +%\selectVersion{2}{3} +%\end{verbatim} +%This command says that the next problem has 3 variations, and here we select the second one. +%\changes{1.6a}{2006/01/22} +% {% +% added \cs{selectVersion} command, fixed \cs{forVersion} so that it can be changed +% within the document, added switches to control new selection. +% Added option \texttt{ignorelocalversions} +% } +% \begin{macrocode} +\def\selectVersion#1#2% 1 \le #1 \le #2 +{% + \gdef\nLocalSelection{#1}% + \gdef\nLocalVersions{#2}% +% \end{macrocode} +% If \cs{eqglobalversion} is true, then a \cs{forVersion} has been executed. If the number +% of versions declared by \cs{numVersions} is greater than the number of local versions +% for this problem, then we perform modular arithmetic to get an appropriate alternative. +% It may be necessarily to temporarily put \cs{eqobeylocalversion} to true to accomplish, +% but we use change it back at the end. +% \begin{macrocode} + \ifeqglobalversion\ifnum\eq@nSelectedVersion>\nLocalVersions + {\count0=\eq@nSelectedVersion \count2=\count0 + \advance\count0by-1 \divide\count0by\nLocalVersions + \multiply\count0by\nLocalVersions \count2=\eq@nSelectedVersion + \advance\count2by-\count0 + \xdef\nLocalSelection{\the\count2\relax}% + \ifeqobeylocalversion\else + \global\@templocalversiontrue + \global\eqobeylocalversiontrue + \fi}% + \fi\fi + \ifeqobeylocalversion + \global\eqlocalversiontrue + \setcounter{eq@count}{0} + \ifx\nLocalSelection\@empty\def\nLocalSelection{1}\fi + \let\save@message\message\let\message\@gobble + \loop + \stepcounter{eq@count}\expandafter + \let\csname Afterver\Alph{eq@count}Comment\endcsname\relax + \lowercase + {% + \ifnum\value{eq@count}=\nLocalSelection + \expandafter\let + \csname v\Alph{eq@count}\endcsname\@empty + \else + \expandafter\let + \csname v\Alph{eq@count}\endcsname\@gobble + \fi + \ifnum\value{eq@count}=\nLocalSelection + \edef\eq@next{% + \noexpand\includecomment{ver\Alph{eq@count}}} + \else + \edef\eq@next{% + \noexpand\excludecomment{ver\Alph{eq@count}}} + \fi + }\eq@next + \ifnum\value{eq@count}<\nLocalVersions\repeat + \let\message\save@message + \fi + \if@templocalversion\global\eqobeylocalversionfalse\fi +} +% \end{macrocode} +% \end{macro} +% \section{Title Definitions from Web} +% \begin{macro}{\title} +% \begin{macro}{\subject} +% \begin{macro}{\author} +% \begin{macro}{\email} +% \begin{macro}{\keywords} +% \begin{macro}{\university} +% Make Title Definitions taken from the \texttt{Web} package. This is +% to maintain compatibility with \texttt{Web}. +% \begin{macrocode} +\@ifpackageloaded{web}{} +{ + \def\title{\@ifnextchar[{\@title}{\@title[\@empty]}} + \def\@title[#1]#2{\gdef\webtitle{#2}% + \ifx#1\@empty\gdef\shortwebtitle{#2}% + \else\gdef\shortwebtitle{#1}\fi} + \def\subject{\@ifnextchar[{\@subject}{\@subject[\@empty]}} + \def\@subject[#1]#2{\gdef\websubject{#2}% + \ifx#1\@empty\gdef\shortwebsubject{#2}% + \else\gdef\shortwebsubject{#1}\fi} + \def\author#1{\gdef\webauthor{#1}} + \def\email#1{\gdef\webemail{#1}} + \def\keywords#1{\gdef\webkeywords{#1}} + \def\university#1{\gdef\webuniversity{#1}} + \def\web@versionlabel{Version} + \def\web@toc{Table of Contents} + \def\web@continued{cont.} +% set some defaults + \title{}\author{}\email{}\subject{}\keywords{}\university{} + \def\optionalpagematter{} +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\date} +% {\LaTeX} (\TeX) defines a \cs{date} command that is also used by \textsf{eqExam}. +% \begin{macrocode} +\def\duedate#1{\def\theduedate{#1}} +\duedate{} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\duedate} +% In addition to these, we also define a \cs{duedate} macro, may be useful for +% writing assignments with a due date. +% \begin{macrocode} +\def\duedate#1{\def\theduedate{#1}} +\duedate{} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\thisterm} +% The command \cs{thisterm} can be used in the \cs{date} field to indicate the term +% of this test, for example, \verb!\date{\thisterm, \the\year}! This command may +% be redefined to conform to your own academic terms. +% \begin{macrocode} +\newcommand\thisterm +{% + \ifnum\the\month<6 + Spring% + \else + \ifnum\the\month<8 + Summer% + \else + % August or later + \ifnum\the\month>8 + % September or later + Fall% + \else + % month of August + \ifnum\the\day>25 + Fall% + \else + Summer% + \fi + \fi + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% \section{Identification Information} +% We define a series of commands in support of building an exam: Lines to identify +% the student and his/her student id (SID), the instructors email address, the name of the +% test and the course. +%\par\medskip +%\noindent\DescribeMacro{\eqExamName}\DescribeMacro{\examNameLabel} provides a line for the student to enter his/her name into the +% exam. The command \cs{examNameLabel} can be used to define the name label, the default +% is \texttt{Name:} +% +% Will insert a text box as well if the \texttt{option} is taken in addition +% to \texttt{nosolutions} and with \texttt{solutionsafter} not taken. +% This macro defines \cs{eq@ExamName}, which actually contains the code. +% The first (optional) parameter is passed to \cs{insTxtFieldIdInfo}, and can be +% used to change the appearance of the text field created; the second required parameter +% is the width of the field. +% \begin{macrocode} +\newcommand\examNameLabel[1]{\gdef\@examNameLabel{#1}} +\examNameLabel{Name:} +\newcommand\eqExamName[2][]{\gdef\eq@ExamName{% + \bgroup\settowidth\eq@tmplengthA{\@examNameLabel\ }% + \@tempdima=#2 \advance\@tempdima by-\eq@tmplengthA + \underbar{\makebox[#2][l]{\@examNameLabel}}% + \insTxtFieldIdInfo[#1]{\@tempdima}{IdInfo.Name}% + \egroup}% +} +% \end{macrocode} +% Here we set the field to be a required field with width of $2.25$ inches +% \begin{macrocode} +\eqExamName[\Ff\FfRequired]{2.25in} +% \end{macrocode} +% \DescribeMacro{\eqSID} provides a line for the student to enter his/her ID number (SID). +% +% Will insert a text box as well if the \texttt{option} is taken in addition +% to \texttt{nosolutions} and with \texttt{solutionsafter} not taken. +% The first (optional) parameter is passed to \cs{insTxtFieldIdInfo}, and can be +% used to change the appearance of the text field created; the second required parameter +% is the width of the field. +% \begin{macrocode} +\newcommand\examSIDLabel[1]{\gdef\@examSIDLabel{#1}} +\examSIDLabel{SID:} +\newcommand\eqSID[2][]{\gdef\eq@SID{% + \bgroup\settowidth\eq@tmplengthA{\@examSIDLabel\ }% + \@tempdima=#2 \advance\@tempdima by-\eq@tmplengthA + \underbar{\makebox[#2][l]{\@examSIDLabel}}% + \insTxtFieldIdInfo[#1]{\@tempdima}{IdInfo.SID}% + \egroup}% +} +% \end{macrocode} +% Here we set the field to be a required field with width of $2.25$ inches +% \begin{macrocode} +\eqSID[\Ff\FfRequired]{2.25in} +% \end{macrocode} +% \DescribeMacro{\eqEmail} provides a line for the student +% to enter his/her email address. Useful for documents submitted by email, the +% instructor can reply. +% +% Will insert a text box as well if the \texttt{option} is taken in addition +% to \texttt{nosolutions} and with \texttt{solutionsafter} not taken. +% The first (optional) parameter is passed to \cs{insTxtFieldIdInfo}, and can be +% used to change the appearance of the text field created; the second required parameter +% is the width of the field. +% \begin{macrocode} +\newcommand\examEmailLabel[1]{\gdef\@examEmailLabel{#1}} +\examEmailLabel{Email:} +\newcommand\eqEmail[2][]{\gdef\eq@Email{% + \bgroup\settowidth\eq@tmplengthA{\@examEmailLabel\ }% + \@tempdima=#2 \advance\@tempdima by-\eq@tmplengthA + \underbar{\makebox[#2][l]{\@examEmailLabel}}% + \insTxtFieldIdInfo[#1]{\@tempdima}{IdInfo.email}% + \egroup}% +} +% \end{macrocode} +% Here we set the field to be a field with width of $2.25$ inches. (Not set to be a required field.) +% \begin{macrocode} +\eqEmail{2.25in} +% \end{macrocode} +% \DescribeMacro{\insTxtFieldIdInfo} The above macros (\cs{eqExamName}, \cs{eqSID} and \cs{eqEmail}) +% all call this macro, which inserts a Acroforms text field if the \texttt{option} is taken in addition +% to \texttt{nosolutions} and with \texttt{solutionsafter} not taken. +% +% The first (optional) parameter is used to change the appearance of the text field. +% The second parameter is the width of the field, and the third is the field name. +% \begin{macrocode} +\def\insTxtFieldIdInfo[#1]#2#3{% + \@ifundefined{@quiz}{}{\ifx\eq@online y\relax + \ifeq@nosolutions\ifeq@solutionsafter\else + \makebox[0pt][r]{\textField[\BC{}#1]{#3}{#2}{11bp}}% + \fi\fi\fi + }% +} +% \end{macrocode} +% \DescribeMacro{\SubmitInfo} is required when the \texttt{email} option is taken, +% and should appear in the preamble. The first argument is the URL to the \textsf{eqAttach.asp} +% code on the server, and the second is the email of the instructor is to receive the results. +% (Multiple recipients can be specified by separating each with a comma.) +% \begin{macrocode} +\def\SubmitInfo#1#2{% + \def\EqExam@SubmitURL{#1}\def\@EmailInstr{#2}% +} +% \end{macrocode} +% \DescribeMacro{\EmailCourseName} is used to specify the course name of the course. The default +% value for this is \cs{websubject}, obtained from the \cs{subject} macro used in the preamble; however, +% if you want a different name in the email, perhaps with more information included, you can redefine +% the value using this macro. +% \begin{macrocode} +\def\EmailCourseName#1{\def\@EmailCourseName{#1}} +% \end{macrocode} +% Here's the default value. +% \begin{macrocode} +\EmailCourseName{\websubject} +% \end{macrocode} +% \DescribeMacro{\EmailExamName} is used to specify the exam name of the course. The default +% value for this is \cs{webtitle}, obtained from the \cs{title} macro used in the preamble; however, +% if you want a different name in the email, perhaps with more information included, you can redefine +% the value using this macro. +% (Multiple recipients can be specified by separating each with a comma.) +% \begin{macrocode} +\def\EmailExamName#1{\def\@EmailExamName{#1}} +% \end{macrocode} +% Here's the default value. +% \begin{macrocode} +\EmailExamName{\webtitle} +% \end{macrocode} +% \DescribeMacro{\EmailSubject} The document author mail want a custom subject in the email, instead +% of the standard one. By using this macro, he can design his own email subject. +% \begin{macrocode} +\def\EmailSubject#1{\def\@EmailSubject{#1}} +% \end{macrocode} +% Here's the default value, which generates no custom subject line. +% \begin{macrocode} +\EmailSubject{} +% \end{macrocode} +% In this case \textsf{eqAttach.asp} inserts the standard one. +%\begin{verbatim} +%Exam Results: \webtitle of \websubject +%\end{verbatim} +% The email would read like ``\texttt{Exam Results:~Test 1 of Calculus I}'', for example. +% +% \DescribeMacro{\ServerRetnMsg} Unless submitted in \texttt{silent} mode, the \textsf{eqAttach.asp} +% returns a message acknowledging the receipt of the data. \cs{ServerRetnMsg} is used to customize +% this message. +% \begin{macrocode} +\def\ServerRetnMsg#1{\def\@ServerRetnMsg{#1}} +% \end{macrocode} +% Here's the default value, which generates no custom return message +% \begin{macrocode} +\ServerRetnMsg{} +% \end{macrocode} +% \noindent\DescribeMacro{\SubmitButtonLabel} is the label that appears on the submit button. +% \begin{macrocode} +\def\SubmitButtonLabel#1{\def\@SubmitButtonLabel{#1}} +% \end{macrocode} +% Here's the default value. +% \begin{macrocode} +\SubmitButtonLabel{Submit} +% \end{macrocode} +% \DescribeMacro{\SubmitButton} is the macro that provides the submit button +% when the \texttt{email} option is taken. It appears automatically at the top of +% the first page of the exam, and appears only if \texttt{nosolutions} has has been +% taken, and \texttt{solutionsafter} has not been taken. +% \begin{macrocode} +\let\priorSubmitJS\@gobble +\let\postSubmitJS\@empty +\def\SubmitButton +{% + \ifx\use@email y\ifeq@nosolutions\ifeq@solutionsafter\else + \makebox[0pt][l]{\pushButton + [\CA{\@SubmitButtonLabel}\A{\JS{% + var _eqEok2Submit = true;\r + var aSubmitFields = new Array("eqexam", "IdInfo");\r + \priorSubmitJS\r + if(_eqEok2Submit) this.submitForm("\EqExam@SubmitURL", + true, false, aSubmitFields);\r + \postSubmitJS + }}]{Submit}{1.5in}{16bp}}% + \makebox[0pt][l]{\textField[\F\FHidden\DV{\@EmailInstr} + \V{\@EmailInstr}]{IdInfo.mailTo}{11bp}{11bp}}% + \makebox[0pt][l]{\textField[\F\FHidden\DV{\@EmailCourseName} + \V{\@EmailCourseName}]{IdInfo.courseName}{11bp}{11bp}}% + \makebox[0pt][l]{\textField[\F\FHidden\DV{\@EmailExamName} + \V{\@EmailExamName}]{IdInfo.examName}{11bp}{11bp}}% + \makebox[0pt][l]{\textField[\F\FHidden\DV{\@EmailSubject} + \V{\@EmailSubject}]{IdInfo.subject}{11bp}{11bp}}% + \makebox[0pt][l]{\textField[\F\FHidden\DV{\@ServerRetnMsg} + \V{\@ServerRetnMsg}]{IdInfo.retnmsg}{11bp}{11bp}}% + \fi\fi\fi +} +% \end{macrocode} +% \begin{macrocode} +\def\thequizno{\if\probstar*\arabic{quizno}\else\alph{quizno}\fi} +\def\linkContentFormat{% + \if\probstar*\arabic{quizno}\else\alph{quizno}\fi} +\def\linkContentWrapper{(\hfil\linkContentFormat\hfil)}% +\def\eqExam@Ans@sq@l{% + \leavevmode\stepcounter{quizno}\PBS\raggedright + \settowidth{\eq@tmplength}{\eq@lw@l}\sbox{\eq@tmpbox}{\eq@l@l}% + \eq@tmpdima=\wd\eq@tmpbox + \def\link@@Content{\linkContentWrapper}% + \hangindent=\eq@tmplength\hangafter=1\relax + \edef\fieldName{\if\probstar*% + eqexam.\curr@quiz.\theeqquestionnoi.part\alph{partno}\else + eqexam.\curr@quiz.\theeqquestionnoi\fi + }% + \ifx\eq@online y\relax + \makebox[0pt][l]{\radio@@Button{}{\fieldName}% + {\eq@tmpdima}{\RadioFieldSize}{\Ans@choice\alph{quizno}}% + {\eq@protect\A}{\eq@setWidgetProps\eq@l@check@driver}% + {\Ans@r@l@Defaults\every@RadioButton\every@qRadioButton}}% + \else + \edef\@linkcolor{\@nolinkcolor}% + \fi + \ifeq@nosolutions\edef\@linkcolor{\@nolinkcolor}\fi + \textcolor{\@linkcolor}{\makebox[\eq@tmpdima]{\link@@Content}}% + \Ans@proofing{\eq@tmpdima}% +} +\def\eqExam@Ans@sq@f{% + \stepcounter{quizno}\PBS\raggedright + \settowidth{\eq@tmplength}{\eq@lw@f}% + \eq@tmpdima=\wd\eq@tmpbox% + \hangindent=\eq@tmplength\hangafter=1\relax + \ifx\eq@online n\previewtrue + \Ans@sq@f@driver + \else + \edef\fieldName{% + \if\probstar*eqexam.\curr@quiz.\theeqquestionnoi.% + part\alph{partno} + \else + eqexam.\curr@quiz.\theeqquestionnoi + \fi + }\insertGrayLetters + \radio@@Button{}{\fieldName}{\RadioFieldSize}% + {\RadioFieldSize}{\Ans@choice\alph{quizno}}{\eq@protect\A}% + {\eq@setWidgetProps\eq@RadioCheck@driver}% + {\@@Ans@sq@f@Defaults\Ans@sq@f@Actions\every@RadioButton + \every@sqRadioButton}% + \fi + \Ans@proofing{\RadioFieldSize}% +} +\def\eqExam@Ans@ck@sq@l{% + \leavevmode\stepcounter{quizno}\PBS\raggedright + \settowidth{\eq@tmplength}{\eq@lw@l}\sbox{\eq@tmpbox}{\eq@l@l}% + \eq@tmpdima=\wd\eq@tmpbox + \def\link@@Content{\linkContentWrapper}% + \hangindent=\eq@tmplength\hangafter=1\relax + \edef\fieldName{% + \if\probstar*eqexam.\curr@quiz.\theeqquestionnoi.% + part\alph{partno}.\alph{quizno} + \else + eqexam.\curr@quiz.\theeqquestionnoi.\alph{quizno} + \fi + }% + \ifx\eq@online y\relax + \makebox[0pt][l]{\check@@Box{}{\fieldName}% + {\eq@tmpdima}{\RadioFieldSize}{\Ans@choice\alph{quizno}}% + {\eq@protect\A}{\eq@setWidgetProps\eq@l@check@driver}% + {\Ans@r@l@Defaults\every@RadioButton\every@qRadioButton}}% + \else + \def\@linkcolor{blue}% + \fi + \ifeq@nosolutions\def\@linkcolor{blue}\fi + \textcolor{\@linkcolor}{\makebox[\eq@tmpdima]{\link@@Content}}% + \Ans@proofing{\eq@tmpdima}% +} +\def\eqExam@Ans@ck@sq@f{% + \stepcounter{quizno}\PBS\raggedright + \settowidth{\eq@tmplength}{\eq@lw@f}% + \eq@tmpdima=\wd\eq@tmpbox% + \hangindent=\eq@tmplength\hangafter=1\relax + \ifx\eq@online n\previewtrue + \Ans@sq@f@driver + \else + \edef\fieldName{% + \if\probstar*eqexam.\curr@quiz.\theeqquestionnoi.% + part\alph{partno}.\alph{quizno} + \else + eqexam.\curr@quiz.\theeqquestionnoi.\alph{quizno} + \fi + }% + \check@@Box{}{\fieldName}{\RadioFieldSize}% + {\RadioFieldSize}{\Ans@choice\alph{quizno}}{\eq@protect\A}% + {\eq@setWidgetProps\eq@RadioCheck@driver}% + {\@@Ans@sq@f@Defaults\Ans@sq@f@Actions\every@RadioButton + \every@sqRadioButton}% + \fi + \Ans@proofing{\RadioFieldSize}% +} +\def\eqExamPriorVspace#1{\edef\fieldName{% + \if\probstar*eqexam.\curr@quiz.% + \theeqquestionnoi.part\alph{partno}.solution + \else + eqexam.\curr@quiz.\theeqquestionnoi.solution + \fi + }% + \nobreak\textField[\Ff\FfMultiline\BC{}] + {\fieldName}{\linewidth}{#1}% + \@gobble +} +% \end{macrocode} +% +% Test to see if \texttt{exerquiz} is loaded. If not, we input +% the `stand alone', \texttt{eqalone.def}, followed by \texttt{eqexam.def}. The latter +% definition file is maintained in \texttt{exerquiz.dtx} under the \texttt{eqexam} option. +% +% \begin{macrocode} +\@ifpackageloaded{exerquiz}{% + \let\Ans@sq@l\eqExam@Ans@sq@l + \let\Ans@sq@f\eqExam@Ans@sq@f + \let\Ans@ck@sq@l\eqExam@Ans@ck@sq@l + \let\Ans@ck@sq@f\eqExam@Ans@ck@sq@f + \def\eqexheader@wrapper{\makebox[0pt][r]{% + \hypertarget{qex.\the@exno}{\eqexheader}}} + \ifx\eq@online y\relax + \newcounter{@cntfillin} + \let\eqPriorVspace=\eqExamPriorVspace + \fi +}% +{% + \input{eqalone.def} + \input{eqexam.def} + \def\eqexheader@wrapper{\makebox[0pt][r]{\eqexheader}} +} +% \end{macrocode} +% We define the appearance of the \texttt{partno} counter, defined in \texttt{eqexam.def} +% to include the question number and the part number. May be redefined. +% \begin{macrocode} +\renewcommand{\thepartno}{\theeqquestionnoi (\alph{partno})} +\newcommand{\defaultthepartno}{% + \renewcommand{\thepartno}{\theeqquestionnoi (\alph{partno})}% +} +% +% \end{macrocode} +% \section{Stand alone Code} +% +% \begin{macrocode} +%<*standalone> +% \end{macrocode} +% Now we begin the listing of the stand alone code. This code is necessary if +% \texttt{exerquiz} has not been loaded. +% +% Many of the following definitions are given in \texttt{eqforms}, which was recently separated +% from \texttt{exerquiz} and is now maintained as a separate package. +% \begin{macrocode} +\@ifundefined{eq@tmpbox}{\newsavebox{\eq@tmpbox}}{}% defined in eforms +\@ifundefined{eq@tmpdima}{\newdimen\eq@tmpdima}{} % defined in eforms +\def\RadioFieldSize{11bp} +% \end{macrocode} +% \begin{macrocode} +\newdimen\eqcenterWidget +% \end{macrocode} +% This macro is used to vertically center the response box on the line. Seems to +% work well. +% \begin{macrocode} +\def\centerWidget +#1{% + \eqcenterWidget=#1 + \eqcenterWidget=.5\eqcenterWidget + \advance\eqcenterWidget by -4bp +} +% \end{macrocode} +% The macro \cs{include@solutions} is defined in \texttt{eqexam.def} +% \begin{macrocode} +\AtEndDocument{\include@solutions} +% \end{macrocode} +% When the \texttt{preview} option has been used, draw a frame box +% around the bounding rectangle. +% \begin{macrocode} +\def\Bbox#1#2{\vbox{\hrule width #1 + \hbox to#1{\vrule height#2\hfill\vrule height#2}\vfill\hrule}} +% \end{macrocode} +% \begin{macrocode} +\def\Rect#1{\textcolor{\@linkcolor}{#1}} +\def\ReturnTo#1#2{\eq@fititin{#2}} +\newcommand{\proofingsymbol}[1]{% + \def\@proofingsymbol{\textcolor{\@proofingsymbolColor}{#1}}} +\proofingsymbol{$\bullet$} +% \end{macrocode} +% This is the answers macro for the link-style and is called from the \texttt{eqexam.def} file. +% \begin{macrocode} +% +% \end{macrocode} +% \begin{macrocode} +%<*package> +% \end{macrocode} +% \section{The Main Code} +% We now continue with the main package. Mostly, we define macros specific to the +% \texttt{eqExam} package: define the \texttt{problem} and \texttt{problem*} environments, +% macros for calculating totals per page, etc. +% +% \begin{macrocode} +\def\Ans@sq@l@driver{% + \Rect{\makebox[\eq@tmpdima]{\linkContentWrapper}}% + \Ans@proofing{\eq@tmpdima}% +} +% \end{macrocode} +% This is the answers macro for the form-style and is called from the \texttt{eqexam.def} file. +% \begin{macrocode} +\def\Ans@sq@f@driver{% + \centerWidget\RadioFieldSize + \leavevmode\lower\eqcenterWidget\Bbox + {\RadioFieldSize}{\RadioFieldSize}% + \Ans@proofing{\RadioFieldSize}% +} +% \end{macrocode} +% Write quiz solutions to the exercise solutions file +% \begin{macrocode} +\def\eq@sqsllabel{\string\textbf{Solution to Quiz:}} +\def\sqsllabel{\eq@sqsllabel} +% \end{macrocode} +% We will right all solutions to the \texttt{.sol} auxiliary file. +% \begin{macrocode} +\let\quiz@solns=\ex@solns +\def\writetoSolns#1{% + \immediate\write\quiz@solns{\string\goodbreak\noindent + \string\hspace*{-\string\oddsidemargin}% + \string\textbf{#1}\par\string\medskip}% +} +% \end{macrocode} +% Turn off interactivity of short quiz. +\def\Ans@sq@l@Actions{} +\def\Ans@sq@f@Actions{} +% \begin{macrocode} +% \end{macrocode} +% This macro is defined in \texttt{exerquiz}, but has a little different definition for \texttt{eqExam}. +% \begin{macrocode} +\def\Ans@proofing +#1{% + \ifeq@proofing\if\Ans@choice1\relax + \llap{\rlap{\,\@proofingsymbol}\hskip#1\relax}% + \fi\fi +} +% \end{macrocode} +% This macro gets the page number of the last page of the exam. It is read in through +% a macro definition made and written to the \texttt{.aux} file. +% \begin{macrocode} +\def\eq@ExamLastPage{\csname eqExamLastPage\endcsname} +% \end{macrocode} +% \subsection{Running Heads, \cs{maketitle} and Cover Pages} +% We develop a series of macros for creating a running header for the exam, and a cover page, if +% desired. +% +% \begin{macro}{\lhead} +% \begin{macro}{\chead} +% \begin{macro}{\rhead} +% \begin{macro}{\runExamHeader} +% \begin{macro}{\eqExamRunHead} +% The running header of the exam, may be redefined. +% \begin{macrocode} +\newcommand{\lhead}[1]{\def\eq@lhead{#1}} +\lhead{\shortwebsubject/\shortwebtitle} +\newcommand{\chead}[1]{\def\eq@chead{#1}} +\chead{-- Page \arabic{page}\space of \eq@ExamLastPage\space--} +\newcommand{\rhead}[1]{\def\eq@rhead{#1}} +\rhead{\eq@ExamName} +\newcommand{\runExamHeader}{\eq@lhead\hfill\eq@chead\hfill\eq@rhead} +\newcommand\eqExamRunHead +{% + \addtolength\textwidth{\oddsidemargin}% + \noindent\hspace*{-\oddsidemargin}\makebox[\textwidth] + {\runExamHeader}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\lheadSol} +% \begin{macro}{\cheadSol} +% \begin{macro}{\rheadSol} +% \begin{macro}{\eqsolutionshook} +% The running header of the exam, when solutions are included at the end of the document, perhaps +% for posting the solutions to the exam, or publication of a ``pretest''. Note that \cs{eqsolutionshook} +% is defined in \texttt{exerquiz/eqexam.def}. May be redefined. +% \begin{macrocode} +\newcommand{\lheadSol}[1]{\def\eq@lheadSol{#1}} +\lheadSol{\shortwebsubject/\shortwebtitle} +\newcommand{\cheadSol}[1]{\def\eq@cheadSol{#1}} +\cheadSol{-- Page \arabic{page}\space of \eq@ExamLastPage\space--} +\newcommand{\rheadSol}[1]{\def\eq@rheadSol{#1}} +\rheadSol{SOLUTIONS} +\newcommand\runExamHeaderSol + {\eq@lheadSol\hfill\eq@cheadSol\hfill\eq@rheadSol} +\def\eqsolutionshook +{% + \gdef\eqExamRunHead{\addtolength\textwidth{\oddsidemargin}% + \noindent\hspace*{-\oddsidemargin}\makebox[\textwidth] + {\runExamHeaderSol}}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\maketitle} +% \begin{macro}{\maketitledesign} +% \begin{macro}{\altTitle} +% Standard {\LaTeX} macro, but this time it is used to create the header at the top of the first +% page of the exam. Typically, consisting of two rows of info. (1) first row has course name, exam name, and +% a place for the student to put his/her name. (2) second row has date and instructor. May be redefined. +% +% Modify the title by redefining \cs{maketitledesign}, the \cs{maketitle} command +% itself has {\LaTeX} commands in it that should not be changed. +% \changes{v1.6i}{2007/09/18} +%{ +% Added the command \cs{altTitle} as an alternate title for the exam +% document. This alternate title appear centered under the title +% of the document. +%} +% \begin{macrocode} +\newcommand\maketitledesign +{% + \makebox[\textwidth]{\normalsize + \shortstack[l]{\strut\websubject\\\@date}\hfill + \shortstack[c]{\webtitle\\\strut\@altTitle}\hfill + \shortstack[l]{\strut\eq@ExamName\\\webauthor}}% +} +\def\altTitle#1{\def\@altTitle{#1}} +\let\@altTitle\@empty +\def\maketitle +{% + \begingroup + \addtolength\textwidth{\oddsidemargin}% + \noindent\hspace*{-\oddsidemargin}% + \raisebox{.7in}[0pt][0pt]{\SubmitButton}% + \maketitledesign + \endgroup +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\eqexcoverpage} +% The \texttt{eqExam} package allows for the possibility of a cover page, if the \texttt{coverpage} +% option is taken. +% \begin{macrocode} +\def\eqexcoverpage +{% + \begingroup + \eqexcoverpagedesign + \endgroup\newpage +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\eqexcoverpagedesign} +% The \texttt{eqExam} package allows for the possibility of a cover page, if the \texttt{coverpage} +% option is taken. This macro can and should be redefined to fit your needs. The definition below +% is just a representative example. +% \begin{macro}{\coverpagesubject} +% \begin{macro}{\coverpageUniversityFmt} +% \begin{macro}{\coverpageSubjectFmt} +% \begin{macro}{\coverpageTitleFmt} +% The following four commands are used with the cover page. +% The \cs{coverpagesubject} is used to provide a special subject +% for the cover page, different from \cs{websubject}. The others +% are used for formatting. +%\changes{v1.9a}{2009/28/09}{Added these various Fmt commands for coverpage.} +% \begin{macrocode} +\newcommand{\coverpagesubject}[1]{\def\coverpage@subject{#1}} +\let\coverpage@subject\@empty +\def\eqexamsubject{\ifx\coverpage@subject\@empty\websubject + \else\coverpage@subject\fi} +\newcommand{\coverpageUniversityFmt}[1]{% + \def\eqex@coverpageUniversityFmt{#1}} +\coverpageUniversityFmt{\bfseries\large} +\newcommand{\coverpageSubjectFmt}[1]{% + \def\eqex@coverpageSubjectFmt{#1}} +\coverpageSubjectFmt{\bfseries\large} +\newcommand{\coverpageTitleFmt}[1]{% + \def\eqex@coverpageTitleFmt{#1}} +\coverpageTitleFmt{\bfseries\large} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% Now we present the definition of \cs{eqexcoverpagedesign}. +% \begin{macrocode} +\newcommand{\eqexcoverpagedesign} +{% + \thispagestyle{empty} + \addtolength\textwidth{\oddsidemargin} + \vspace*{.1\textheight} + \noindent\hspace*{-\oddsidemargin}% + \makebox[\linewidth]{\parbox{\linewidth}% + {\eqex@coverpageUniversityFmt + \color{\webuniversity@color}% + \centering\webuniversity}} + \par\vspace{.1\textheight} + \noindent\hspace*{-\oddsidemargin}% + \makebox[\linewidth]{\parbox{\linewidth}% + {\eqex@coverpageSubjectFmt + \color{\websubject@color}% + \centering\eqexamsubject}} + \par\vspace{\bigskipamount} + \noindent\hspace*{-\oddsidemargin}% + \makebox[\linewidth]{\parbox{\linewidth}% + {\eqex@coverpageTitleFmt + \color{\webtitle@color}% + \centering\webtitle}} + \par\vspace{\stretch{1}} + \optionalpagematter + \par\vspace{\stretch{1}}\parindent0pt + \eq@ExamName\\[2ex]\eq@SID\\[2ex] + \ifx\use@email y\eq@Email\\[2ex]\fi + \textcolor{\webauthor@color}{\webauthor}, \@date\par\vfill +} +% \end{macrocode} +% \end{macro} +% If the author takes the \texttt{coverpage} option, \cs{eqex@coverpage} is set equal +% to \cs{eqexcoverpagedesign}, otherwise, it is set equal to \cs{relax}. +% \begin{macrocode} +\AtBeginDocument{\eqex@coverpage} +% \end{macrocode} +% \subsection{Insert Points in Margins and Compute Page Totals} +% Here we attempt to place point values of a problem in the margins and +% to compute the page totals. +% +%\begin{macro}{\probvalue} +% This is a fundamental macro for keeping track of the points of the problem. +% It increments the counter \texttt{eqpointvalue}, which keeps a running total +% of the points of the current part of the quiz, puts the value in the margins, +% and sets a \texttt{mark}, so that at the end of the page, we can compute the +% number of points on the current page. This macro is used in several situations, +% for example, in the \texttt{problem} environment, \cs{manualcalcparts} and in +% \cs{autocaleparts}. \textbf{Should not be redefined}. +%\begin{flushleft} +%Parameters +%\begin{verbatim} +%#1 = total points for this problem +%#2 = 0 if total points, otherwise, #2 is the number of points each +% problem. +%\end{verbatim} +%\end{flushleft} +% \begin{macrocode} +\def\probvalue#1#2{% + \addtocounter{eqpointvalue}{#1}% + \marginpoints{#1}{#2}% + \mark{\theeqpointvalue\csname eqExam\endcsname\theeq@numparts}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\eqleftmarginbox} +% This macro places the problem value in the left margin, can be redefined, if you dare. +%\begin{flushleft} +% Parameters +%\begin{verbatim} +%#1 = total points for this problem +%#2 = 0 if total points, otherwise, #2 is the number of points each +% problem. +%\end{verbatim} +%\end{flushleft} +% Currently, this macro is not used. +% \begin{macrocode} +\def\eqleftmarginbox#1#2{\makebox[0pt][r]{% + \setlength\tabcolsep{0pt}% + \raisebox{-.5\height}[0pt][0pt]{\parbox{\marginparwidth}{% + \tabcolsep=0pt\relax + \begin{tabular}{|c|}\hline + \vrule height15pt width0pt\\\hline + \makebox[\marginparwidth]{% + \marginpointsboxtext{#1}{#2}}\\\hline + \end{tabular}% + }}% + \hspace*{\oddsidemargin}\hspace*{\marginparsep}}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ptsLabel} +% \begin{macro}{\eachLabel} +% \begin{macro}{\pointsLabel} +% The following three convenience commands can be used to localize some of +% the strings to other languages. +% \begin{macrocode} +\providecommand{\ptsLabel}[1]{\def\eqptsLabel{#1}}\ptsLabel{pts} +\providecommand{\ptLabel}[1]{\def\eqptLabel{#1}}\ptLabel{pt} +\newcommand{\eachLabel}[1]{\def\eq@eachLabel{#1}}\eachLabel{ea.} +\newcommand{\pointsLabel}[1]{% + \def\eq@pointsLabel{#1}}\pointsLabel{points} +\newcommand{\pointLabel}[1]{% + \def\eq@pointLabel{#1}}\pointLabel{point} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\marginpointtext} +% Creates the text for \cs{eqleftmargin} to use. Use can see from the macro, +% if \texttt{\#2} is 0, then we write the points for the problem, else, we write +% the points each for the problem. +% \begin{macrocode} +\newcommand\leftmarginPtsTxt[1]{(\small$#1^{\text{% + \ifnum#1=1\relax\eqptLabel\else\eqptsLabel\fi}}$)} +\newcommand\leftmarginPtsEaTxt[1]{(\small$#1_{\text{% + \eq@eachLabel}}^{\text{\ifnum#1=1\relax + \eqptLabel\else\eqptsLabel\fi}}$)} +\def\marginpointtext#1#2{\ifnum#2=0\leftmarginPtsTxt{#1}\else + \leftmarginPtsEaTxt{#2}\fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\eqleftmargin} +% Places the number of points (or points each) in the left margin. Can be redefined as +% desired. This macro is used when author chooses the \texttt{pointsonleft} +% or \texttt{pointsonbothsides} option. +% \begin{macrocode} +\def\eqleftmargin#1#2{\makebox[0pt][r]{\marginpointtext{#1}{#2}% + \hspace*{\oddsidemargin}\hspace*{\marginparsep}}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\marginpointsboxtext} +% When the author selects \texttt{pointsonright} or \texttt{pointsonbothsides}, a box +% appears in the right margin containing problem totals, this is the text for the box. +% \begin{macrocode} +\newcommand{\marginpointsboxtext}[2]{\small$#1\,\text{% + \ifnum#1=1\relax\eqptLabel\else\eqptsLabel\fi}$} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\eqrightmarginbox} +% When the author selects \texttt{pointsonright} or \texttt{pointsonbothsides}, a box +% appears in the right margin containing problem totals, this is the box that appears. +% \begin{macrocode} +\def\@insertPointsBoxPDF +{ + \def\fieldName{pointsgiven.\curr@quiz.page\thepage.% + \theeqquestionnoi}% + \calcTextField[\F\FHidden\BC{}\Q1\textColor{1 0 0 rg}] + {\fieldName}{\marginparwidth}{15pt}% +} +\def\@insertTotalsBoxPDF +{ + \def\fieldName{pagetotals.\curr@quiz.page\thepage}% + \calcTextField[\F\FHidden\BC{}\Q1\textColor{1 0 0 rg} + \AA{\AACalculate{AFSimple_Calculate("SUM", + new Array("pointsgiven.\curr@quiz.page\thepage"));}}] + {\fieldName}{\marginparwidth}{15pt}% +} +\ifx\use@email y + \let\insertPointsBoxPDF=\@insertPointsBoxPDF + \let\insertTotalsBoxPDF=\@insertTotalsBoxPDF +\else + \let\insertPointsBoxPDF=\@empty + \let\insertTotalsBoxPDF=\@empty +\fi +\def\eqrightmarginbox#1#2{% + \makebox[0pt][l]{% + \setlength\tabcolsep{0pt}% + \hspace*{\textwidth}\hspace*{\marginparsep}% + \raisebox{-.5\height}[0pt][0pt]{% + \parbox{\marginparwidth}{% + \tabcolsep=0pt\relax + \begin{tabular}{|c|}\hline + \vrule height15pt width0pt\insertPointsBoxPDF\\\hline + \makebox[\marginparwidth]{% + \marginpointsboxtext{#1}{#2}}\\\hline + \end{tabular}% + }% + }\hfil + }% +} +\def\eqeomarginbox#1#2{% + \makebox[0pt][l]{% + \setlength\tabcolsep{0pt}% + \hspace*{\textwidth}\hspace*{\marginparsep}% + \raisebox{-.5\height}[0pt][0pt]{% + \parbox{\marginparwidth}{% + \tabcolsep=0pt\relax + \begin{tabular}{|c|}\hline + \vrule height15pt width0pt\insertTotalsBoxPDF\\\hline + \makebox[\marginparwidth]{% + \marginpointsboxtext{#1}{#2}}\\\hline + \end{tabular}% + }% + }\hfil + }% +} +\setbox\eq@pointbox=\hbox{% + \parbox{\marginparwidth}{% + \tabcolsep=0pt\relax + \begin{tabular}{|c|}\hline + \vrule height15pt width0pt\\\hline + \makebox[\marginparwidth]{% + \marginpointsboxtext{00}{0}}\\\hline + \end{tabular}% + }% +} +\setlength\eq@pointboxtotalheight{\dp\eq@pointbox+\ht\eq@pointbox} +% \end{macrocode} +% \end{macro} +% The macro \cs{probvalue}, defined above, says +%\begin{verbatim} +%\mark{\theeqpointvalue\csname eqExam\endcsname\theeq@numparts} +%\end{verbatim} +% so the \cs{botmark} contains the point value of this page and the part number for +% this page. +% \begin{macrocode} +\def\lastparttotaled{0} +% \end{macrocode} +% The \texttt{botmark} looks like \texttt{18\string\eqExam0}, where $18$ will be the total number of +% points accumulated for this text part. We need to retrieve these number, I don't remember why +% I save them this way. +% +% \DescribeMacro{\parsetotals} +% The \cs{parsetotals} macro is called in \cs{settotalsbox} to retrieve the ongoing point values +% from \cs{botmark}, and returns to two parameters, contained in \cs{argi} and \cs{argiii}. +% \DescribeMacro{\stripeqExam} +% Whereas, \cs{stripeqExam} just retrieves the first parameter only. +% \begin{macrocode} +\def\parsetotals#1\eqExam#2\end{\def\argi{#1}\def\argii{#2}} +\def\stripeqExam#1\eqExam{\def\argii{#1}} +% \end{macrocode} +% \begin{macro}{\settotalsbox} +% This is the box containing the page total, it may appear on the left or right side bottom +% corner. +% \begin{macrocode} +\def\settotalsbox{% + \expandafter\parsetotals\botmark\eqExam\end + \ifx\argi\@empty\hfil + \else\ifx\argii\@empty\hfil + \else + \expandafter\stripeqExam\argii +% \end{macrocode} +% Set \texttt{eqpointsthispage} equal to \cs{argi}, which should be the accumulated total +% for this part of the test so far. +% \begin{macrocode} + \setcounter{eqpointsthispage}{\argi}% +% \end{macrocode} +% This subtract \texttt{eqpointsfofar}, which should be the total for this test part through the +% previous page. The difference is the number of points for this page. +% \begin{macrocode} + \addtocounter{eqpointsthispage}{-\value{eqpointsofar}}% +% \end{macrocode} +% Now we set \texttt{eqpointsofar} to the new accumulated total \cs{argi}. +% \begin{macrocode} + \setcounter{eqpointsofar}{\argi}% +% \end{macrocode} +% And save to the auxiliary file for later usage. +% \begin{macrocode} + \xdef\lastparttotaled{\argii}% + \immediate\write\@auxout{\string\expandafter\string\gdef + \string\csname\space Page\thepage total\string\endcsname + {\theeqpointsthispage}}% +% \end{macrocode} +% Finally, place the totals box. +% \begin{macrocode} + \totalsbox + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% \DescribeMacro{\totalsboxtext} This is the text that appears in the totals boxes +% \begin{macrocode} +\newcommand\totalsboxtext{\small$\theeqpointsthispage\,\text{% + \ifnum\theeqpointsthispage=1\relax + \eqptLabel\else\eqptsLabel\fi}$} +% \end{macrocode} +% \DescribeMacro{\totalsboxleft}\DescribeMacro{\totalsboxright} There are two totals boxes, one for the left and one +% for the right side. These can be redefined as desired. +% \begin{macrocode} +\def\totalsboxleft{% + \makebox[0pt][r]{\setlength\tabcolsep{0pt}% + \raisebox{-\height-\marginparsep}[0pt][0pt]{% + \parbox{\marginparwidth}{% + \begin{tabular}{|c|}\hline + \vrule height15pt width0pt\insertTotalsBoxPDF\\\hline + \parbox{\marginparwidth}{% + \strut\centering\totalsboxtext\strut}\\\hline + \end{tabular}% + }}\hspace*{\oddsidemargin}\hspace*{\marginparsep}% + \hspace*{\parindent}}\hfil +} +\def\totalsboxright +{% + \makebox[0pt][l]{\setlength\tabcolsep{0pt}% + \hspace*{\textwidth}\hspace*{\marginparsep}% + \raisebox{-\height-\marginparsep}[0pt][0pt]{% + \parbox{\marginparwidth}{% + \begin{tabular}{|c|}\hline + \vrule height15pt width0pt\insertTotalsBoxPDF\\\hline + \parbox{\marginparwidth}{% + \strut\centering\totalsboxtext\strut}\\\hline + \end{tabular}% + }% + }% + }\hfil +} +% \end{macrocode} +% We begin the document by declaring the current part is part 0 with 0 points. This is the default, +% in case the author writes a document with no parts or points! +% \begin{macrocode} +\AtBeginDocument{\mark{0\csname eqExam\endcsname0}} +% \end{macrocode} +% At the end of the document, we write out the number of parts for this test, and +% the names of the parts the author has given each part. +% \begin{macrocode} +\AtEndDocument{% + \immediate\write\@auxout{\string\expandafter\string\gdef + \string\csname\space NumberOfParts\string\endcsname + {\arabic{eq@numparts}}}% + \immediate\write\@auxout{\string\expandafter\string\gdef + \string\csname\space thePartNames\string\endcsname + {\the\partNames}}% + \clearpage\addtocounter{page}{-1}\writelastpage + \addtocounter{page}{1}% +} +% \end{macrocode} +% \begin{macro}{\theGrandTotal} +% When an exam has multiple parts, the total of each part is computed +% and the grand total is computed with \cs{theGrandTotal}. +% \begin{macrocode} +\def\theGrandTotal{% + \begingroup + \count0=0\relax + \def\\##1{\advance\count0by\csname##1total\endcsname}% + \csname thePartNames\endcsname + \xdef\eqeGrandTotal{\the\count0 }% + \endgroup + \csname eqeGrandTotal\endcsname +} +% \end{macrocode} +% \end{macro} +%\subsection{Computing Number of Points within a Segment of the Exam} +% +% We add some commands for calculating number of points in a segment of the exam. +% A segment being defined subset of consecutive problems within an exam. We can +% define segments by placing markers (using \cs{placeMarkerHere}) between problems. We can +% then calculate the total number of points between markers. +% +% The counter below is a scratch counter for making the calculations. We assume the +% \texttt{calc} package is loaded, it does the work for us. +% +% \begin{macrocode} +\newcounter{markerCnt} +% \end{macrocode} +% \begin{macro}{\placeMarkerHere} +% Placed outside of any \texttt{problem}/\texttt{problem*} environment, this command +% takes one argument, the symbolic name for this marker. We write to the auxiliary file +% and define a command whose name is based on \texttt{\#1}, and whose value is +% the cumulative total \cs{theeqpointvalue}. +%\changes{v1.8}{2008/11/02} +%{ +% Added a set of commands \cs{placeMarkerHere}, \cs{calcFromMarkers}, +% and \cs{markerTotalFmt} to enable the calculation of totals of segments +% of the exam. +%} +% \begin{macrocode} +\def\placeMarkerHere#1{% + \immediate\write\@auxout{\string\expandafter\string\gdef + \string\csname\space#1SaveTotalHere\string\endcsname + {\theeqpointvalue}}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\calcFromMarkers} +% Once the markers are in place, we can calculate the number of points defined between +% two such markers. The \cs{calcFromMarkers} takes three arguments, \texttt{\#2} and +% \texttt{\#3} are the symbolic names of the two markers. While, \texttt{\#1} is an optional +% argument for formatting the calculation. The default is \cs{@markerTotalFmt}, defined +% below in \cs{markerTotalFmt}. The value of the total is \cs{themarkerCnt}. +% \begin{macrocode} +\newcommand{\calcFromMarkers}[3][\@markerTotalFmt]{% + \@ifundefined{#2SaveTotalHere}{}% + {\@ifundefined{#3SaveTotalHere}{}{\setcounter{markerCnt}% + {\@nameuse{#2SaveTotalHere}-\@nameuse{#3SaveTotalHere}}% + \ifnum\value{markerCnt}<0\relax + \setcountertotalHereCnt{-\value{markerCnt}}\fi#1}}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\markerTotalFmt} +% Used to set the global format of the marker totals. The value of the marker total +% is \cs{themarkerCnt}. The default follows the definition of \cs{markerTotalFmt} +% \begin{macrocode} +\newcommand{\markerTotalFmt}[1]{\def\@markerTotalFmt{#1}} +\markerTotalFmt{ (\themarkerCnt\space points)} +% \end{macrocode} +% \end{macro} +% \subsection{Useful Commands to Write Problems} +% \begin{macrocode} +\def\placeAtxy#1#2#3{% + \par\nointerlineskip + \ifeq@nosolutions\ifx\eq@insertverticalspace y% + \ifvmode + \makebox[0pt][l]{\hspace*{-\parindent}\hspace*{#1}% + \raisebox{#2}[0pt][0pt]{#3}} + \fi + \fi + \fi +} +\newsavebox{\workareasb} +\newenvironment{workarea}[2][\linewidth] +{% + \edef\workareadepth{\if\currhideopt H0pt\else#2\fi}% + \begin{lrbox}{\workareasb}\setlength{\eqetmplengtha}{#1}% + \begin{minipage}[b][\workareadepth][t]{\eqetmplengtha}\vspace*{3pt}% +}% +{% + \end{minipage}\end{lrbox}% +% \par\nointerlineskip\vspace{-\baselineskip}% + \par\ifeq@nosolutions\ifx\eq@insertverticalspace y% + \vspace{-\baselineskip}\fi\fi%\nointerlineskip + \ifeq@nosolutions\ifx\eq@insertverticalspace y% + \if\currhideopt H\else + \noindent\strut\smash{\usebox{\workareasb}}% + \fi\fi\fi +} +% \end{macrocode} +% \begin{environment}{splitsolution} +% This is a special solution environment designed for use with the \texttt{online} or \texttt{email} +% options. +% \begin{macrocode} +\newcommand\panelgap{3pt} +\newsavebox{\eqpanelbox} +\def\panelwidth{\the\wd\eqpanelbox}\def\panelheight{\the\ht\eqpanelbox}% +\newcounter{panel@cnt} +\newwrite\panel@write +\let\usepanelwidth=\relax +\makeatletter +\newenvironment{panel}[2][l] +{% + \gdef\ss@Argi{#1}\gdef\ss@Argiii{#2}% #1 r or l #2 width of panel + \stepcounter{panel@cnt}% + \immediate\openout \panel@write panel\thepanel@cnt.cut + % need to manage the h, H, and global overrides. + \if\currhideopt H% + \immediate\write\panel@write{\vfill}% + \immediate\closeout\panel@write + \gdef\ss@Argii{0pt}% + \else + \if\currhideopt h\ifeq@solutionsafter\else + \ifeq@globalshowsolutions\else + \immediate\write\panel@write{\vfill}% + \immediate\closeout\panel@write + \gdef\ss@Argii{0pt}% + \fi\fi + \fi + \fi + \begingroup + \let\verbatim@out=\panel@write + \verbatimwrite +} +{% + \endverbatimwrite + \immediate\closeout\panel@write + \endgroup + \xdef\mp@Width{\ifeq@solutionsafter\noexpand\linewidth + \else\noexpand\linewidth-\ss@Argiii-\panelgap\fi}% +} +\long\def\eqe@IW#1{% + \ifeq@solutionsafter + \let\eq@next=\@empty + \else + \def\eq@next{\immediate\write\verbatim@out{#1}}% + \ifeq@nosolutions\else + \if\currhideopt H% + \gdef\ss@Argii{0pt}\let\eq@next=\@empty + \else + \if\currhideopt h% + \ifeq@globalshowsolutions\else + \gdef\ss@Argii{0pt}\let\eq@next=\@empty + \fi + \fi + \fi + \fi + \fi + \eq@next +} +\newenvironment{@ssSolution}[1][\ss@Argii]% +{% + \xdef\eqe@depth{\ifeq@nosolutions\ss@Argii\else + \ifeq@solutionsafter\ss@Argii\else0pt\fi\fi}% + \xdef\mp@Width{\ifeq@solutionsafter\noexpand\linewidth\else + \noexpand\linewidth-\ss@Argiii-\panelgap\fi}% + \if\ss@Argi l% + \ifeq@solutionsafter + \def\eqe@lPanel{\parbox[b][\eqe@depth][t]{\ss@Argiii} + {\input{panel\thepanel@cnt.cut}\vfill}\hfill}% + \def\eqe@rPanel{\@empty}% + \else + \def\eqe@lPanel{\string\parbox[b][\string\eqe@depth]% + {\ss@Argiii}% + {\string\input{panel\thepanel@cnt.cut}\vfill}\hfill^^J}% + \def\eqe@rPanel{\@empty}% + \fi + \else + \ifeq@solutionsafter + \def\eqe@lPanel{\@empty}% + \def\eqe@rPanel{\hfill\parbox[b][\eqe@depth][t]{\ss@Argiii} + {\hfill\input{panel\thepanel@cnt.cut}\vfill}}% + \else + \def\eqe@lPanel{\@empty}% + \def\eqe@rPanel{\hfill\string\parbox[b][\string\eqe@depth]% + {\ss@Argiii}% + {\endgraf\string\noindent\hfill% + \string\input{panel\thepanel@cnt.cut}\vfill}}% + \fi + \fi + \let\verbatim@out=\ex@solns + \par\ifeq@solutionsafter\smallskip\fi\noindent\minipage{\linewidth}% + \if\ss@Argi l\noindent\parbox[b][\eqe@depth][t]{\ss@Argiii}% + {\vfill}\hfill\fi + \minipage[b][\eqe@depth][t]{\mp@Width}% + {\lccode`C=`\%\lowercase{\eqe@IW{\def\string\panelgap{\panelgap}% + \edef\string\eqe@depth + {\ifeq@nosolutions\ss@Argii\else\ss@Argii\fi}C}}}% + {\lccode`C=`\%\lowercase{\eqe@IW{% + \string\strut\string\par\string\nobreak\string\noindent% + \string\hbox\space to\string\linewidth\bgroup^^J% + \eqe@lPanel\string\minipage[b][\string\eqe@depth][t]% + {\string\linewidth-\ss@Argiii-\panelgap}C + }}}% + \ifeq@solutionsafter + \noindent\strut\hbox to\linewidth\bgroup + \eqe@lPanel + \minipage[b][\eqe@depth][t]{\linewidth-\ss@Argiii-\panelgap}% + \def\solutionsafterSkip{}% + \fi + \@sssolution[#1]% +}{% + \eqe@IW{\noexpand\endminipage\eqe@rPanel\egroup}% + \ifeq@solutionsafter\endminipage\eqe@rPanel\egroup\fi + \end@sssolution + \endminipage\endminipage +} +\newenvironment{splitsolution}[1] % #1 depth +{% + \gdef\ss@Argii{#1}% + \let\@sssolution = \solution + \let\end@sssolution = \endsolution + \let\solution = \@ssSolution + \let\endsolution = \end@ssSolution + \par\noindent\ignorespaces +}{% + \ifeq@solutionsafter\strut\par\fi + \edef\eqe@workwidth{\if\ss@Argi l\noexpand\ss@Argiii + \else\noexpand\linewidth\fi}% + \edef\eqe@workfill{\if\ss@Argi l\else\hfill\fi}% + \begin{workarea}[\eqe@workwidth]{\eqe@depth}% + \eqe@workfill\input{panel\thepanel@cnt.cut}% + \end{workarea} + \strut\par +} +% \end{macrocode} +% \end{environment} +% Redefine the \cs{paragraph} command +% \begin{macrocode} +\renewcommand{\paragraph} + {\@startsection{paragraph}{4}{0pt}{12pt}{-3pt}{\bfseries}} +% \end{macrocode} +% \begin{macro}{\defaultInstructions} +% For the \texttt{instructions} environment, defined next, the default string +% for the instructions is \cs{eq@default@Instructions}, this command is +% defined using \cs{defaultInstructions}. +% \begin{macrocode} +\newcommand{\defaultInstructions}[1]{\def\eq@default@Instructions{#1}} +\defaultInstructions{Instructions.} +% \end{macrocode} +% \end{macro} +% \begin{environment}{instructions} +% Each test, or a part of a test usually have instructions. This \texttt{instruction} +% environment is used in this purpose. Normally, the number of points for the part is +% displayed following the heading (the default is \textbf{Instructions.}). You can +% eliminate the total points from the instructions by taking the \texttt{nosummarytotals} +% option. +% \begin{macrocode} +\newenvironment{instructions}[1][\eq@default@Instructions] +{% + \leftskip-\oddsidemargin \rightskip-\evensidemargin + \def\eq@argi{#1}% + \paragraph*{\textcolor{\@instructionsColor}{#1}\normalcolor% + \ifx\eq@nosummarytotals y\else\ifx\eq@argi\@empty\else\ \fi + {\normalfont\summaryTotalsTxt}\ \fi}\hskip-\lastskip + \ifx\eq@nosummarytotals y\ifx\eq@argi\@empty\else\ \fi\fi + \ignorespaces +}{\par\vskip\medskipamount} +\newcommand\summaryPointTotal{\csname\thisexamlabel total\endcsname} +\newcommand\summaryTotalsTxt{($\summaryPointTotal\,\text{% + \@ifundefined{\thisexamlabel total}{\eq@pointsLabel}% + {\ifnum\summaryPointTotal=1\relax + \eq@pointLabel\else\eq@pointsLabel\fi}}$)} +% \end{macrocode} +% \end{environment} +% Make this definition for \texttt{hyperref}, so its anchors will be unique. Useful +% when there are multiple parts of the test. +% \begin{macrocode} +\ifx\hyper@anchor\@undefined\else + \renewcommand\theHeqquestionnoi + {\curr@quiz.\theeqquestionnoi} + \renewcommand\theHquizno{% + \if\probstar*\curr@quiz.% + \theeqquestionnoi.part\alph{partno}.\arabic{quizno}% + \else + \curr@quiz.% + \theeqquestionnoi.\arabic{quizno}% + \fi + } +\fi +% \end{macrocode} +% \begin{environment}{eqComments} +% Often, I want to make additional instructions between problems, you can use +% this comment environment. +% \begin{macrocode} +\newenvironment{eqComments}[1][\strut] +{% + \removelastskip\removelastskip + \vskip\medskipamount\leftskip-\oddsidemargin + \rightskip-\evensidemargin + \noindent\textbf{\textcolor{\@eqCommentsColor}{#1}}% +}{% + \vskip\medskipamount +} +% \end{macrocode} +% \end{environment} +% \subsection{The \texttt{exam} Environment} +% Each part of the exam is enclosed in an \texttt{exam} environment. The environment is +% a customized version of the \texttt{shortquiz} environment. +% \begin{macro}{\exambegdef} +% Some definitions that are executed at the beginning of each exam environment. +% \begin{macrocode} +\def\exambegdef +{% + \csname\thisexamlabel pagemark\endcsname + \expandafter + \ifx\csname\thisexamlabel pageno\endcsname\relax + \else + \expandafter + \ifx\csname pagenofirstprob\thisexamlabel\endcsname\relax + \else + \ifnum\csname\thisexamlabel pageno\endcsname + <\csname pagenofirstprob\thisexamlabel\endcsname + \else + \expandafter + \ifx\csname\thisexamlabel pagemark\endcsname\relax + \else + \ifnum\value{page}=% + \csname\thisexamlabel pageno\endcsname + \immediate\write\@auxout{% + \string\expandafter\string\gdef + \string\csname\space + \thisexamlabel pagemark\string\endcsname + {\string\newpage}}% + \fi + \fi + \fi + \fi + \fi + \setcounter{eqquestionnoi}{0}% + \setcounter{eqpointvalue}{0}% + \setcounter{eqpointsofar}{0}% + \setcounter{eqpointsthispage}{0}% + \setcounter{eq@count}{0}% + \stepcounter{eq@numparts}% + \immediate\write\@auxout{\string\expandafter\string\gdef + \string\csname\space\thisexamlabel pageno\string\endcsname + {\thepage}}% + \let\sq@priorhook=\@empty + \settowidth{\labelwidth}{\normalfont\bfseries00.\ }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\examenddef} +% Some definitions that are executed at the end of each exam environment. +% We place a totals box to report the total since the last page. +% \begin{macrocode} +\def\examenddef +{% + \expandafter\ifx\csname NumberOfParts\endcsname\relax + \else + \ifnum\value{eq@numparts}<\NumberOfParts + \setcounter{eq@count}{\value{eqpointvalue}}% + \addtocounter{eq@count}{-\value{eqpointsofar}}% + \ifx\eq@parttotals y\relax +% \makeRoomForProb{0pt}{1}% +% \end{macrocode} +% See if there is enough room at the bottom of the page to place the end of exam +% totals, if not, forget it, and start a new page. +% \begin{macrocode} + \@actionsAtPageBreak{\global\let\@spacetobreak1} + {\global\let\@spacetobreak0}% + \ifx\@spacetobreak0\relax + \bgroup\@tempdima=\pagetotal + \advance\@tempdima32pt\relax + \ifdim\@tempdima>\pagegoal\aftergroup\newpage + \else + \ifnum\arabic{eq@count}>0 + \ifx\@reportpoints1\else\@checkSpacing\fi + \raisebox{0pt}[0pt][0pt]{% + \hspace*{-\parindent}% + \textcolor{blue}{\eqeomarginbox + {\arabic{eq@count}}{0}}}% + \fi + \ifx\eqx@separationrule y\separationrule\fi + \fi\egroup + \fi + \else\ifx\eqx@separationrule y\separationrule\fi + \fi + \fi + \fi + \writetotalstoaux + \writelastpage +} +\def\@actionsAtPageBreak#1#2{% + \bgroup\@tempdima\pagegoal\advance\@tempdima-\pagetotal + \@tempdimb\@fvsizeskip\vsize + \ifdim\@tempdima < \@tempdimb #1\else #2\fi\egroup +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\separationrule} +% For an exam with multiple parts, a separation rule is created, unless absorbed +% into a page break. The command \cs{separationrule} defines this separation rule, +% it can be redefined as desired. +% \changes{v1.7a}{2007/12/10} +%{ +% Added \cs{separationrule} so user's can redesign the separation rule +% that is created between two parts of an exam. +%} +% \begin{macrocode} +\newcommand{\separationrule}{\makebox[\linewidth]% + {\centering\rule{.67\linewidth}{.4pt}}} +% \end{macrocode} +% \end{macro} +% \begin{environment}{exam} +% Each part of the exam is enclosed in an \texttt{exam} environment. The one +% required parameter is the name of the part, for example, `Part1', `Part2'. +% These should be one word, no white spaces, just letters and possibly numbers. +% \begin{macrocode} +\def\setDefaultfvsizeskip#1{\def\default@fvsizeskip{#1}% + \def\@fvsizeskip{#1}} +\def\default@fvsizeskip{.3} +\edef\@fvsizeskip{\default@fvsizeskip} +\def\fvsizeskip#1{\def\@fvsizeskip{#1}} +\newenvironment{exam}[2][\@empty] +{% + \makeRoomForProb{\@fvsizeskip\vsize}{0}% + \xdef\@fvsizeskip{\default@fvsizeskip}% + \gdef\thisexamlabel{#2}\gdef\curr@quiz{#2}% + \edef\eq@tmp{\the\partNames}% + \global\partNames=\expandafter{\eq@tmp\\{#2}}% + \expandafter\ifx\csname NumberOfParts\endcsname\relax\else + \ifnum\csname NumberOfParts\endcsname=1\else + \ifx#1\@empty\writetoSolns{#2}\else\writetoSolns{#1}\fi\fi\fi + \exambegdef + \expandafter\shortquiz\sqstar[#2]% +}{% + \examenddef + \endshortquiz +} +% \end{macrocode} +% \end{environment} +% \begin{macrocode} +\def\writetotalstoaux{% + \immediate\write\@auxout{\string\expandafter\string\gdef + \string\csname\space\thisexamlabel total\string\endcsname + {\theeqpointvalue}}% +} +\def\writelastpage{% + \immediate\write\@auxout{\string\expandafter\string\gdef + \string\csname\space eqExamLastPage\string\endcsname{\arabic{page}}}% +} +\def\exlabel{} +\def\sqlabel{} +\def\exsolafter{\textit{Solution}:} +\def\sqsolafter{\textit{Solution}:} +\def\exlabelformat{\textbf{\theeqquestionnoi.\ }} +\def\exlabelformatwp{\exlabelformat}% +\def\exsllabelformat + {\string\llap{\string\textbf{\theeqquestionnoi.\ }}} +\def\exsllabelformatwp{\string\llap{% + \string\textbf{\theeqquestionnoi.\ }}\eq@partsformat\ }% +\ifeq@solutionsafter + \def\exrtnlabelformat{} + \def\exrtnlabelformatwp{} + \def\eq@sqslrtnlabel{} +\else + \def\exrtnlabelformat{$\square$} + \def\exrtnlabelformatwp{$\square$} + \def\eq@sqslrtnlabel{$\square$} +\fi +\def\sqslrtnlabel{\eq@sqslrtnlabel} +\def\exsectitle{\normalsize\hspace* + {-\oddsidemargin}Solutions to \webtitle} +\def\exsecrunhead{Solutions to \websubject}% +\def\eq@sqslsectitle{} +\def\eq@sqslsecrunhead{} +\def\eq@sqsllabel{{\string\llap{\string\textbf{\theeqquestionnoi.\ }}}} +\def\eq@sqlabel{} +\let\include@quizsolutions=\relax +\let\solnhspace=\@empty +% \end{macrocode} +% \subsection{\texttt{problem} Environments} +% A single question is posed with the \texttt{problem} environment, and a question with +% multiple parts with the \texttt{problem*} environment. +% \begin{macro}{\fillin} +% This macro is used for fill-in type questions. The first argument is the length +% of the underline blank to leave to fill-in, the second argument is the correct answer. +% \begin{macrocode} +\newcommand{\fillin}[3][u]{% + \ifx#1u\let\@fillinFmt=\underbar + \else\ifx#1b\let\@fillinFmt=\relax + \else\let\@fillinFmt=\relax\fi\fi + \ifeq@proofing + \@fillinFmt{\makebox[#2]{% + \strut\hfil\bfseries\color{red}#3\hfil}}% + \else + \@fillinFmt{\makebox[#2]{\strut\hfil}}% + \@ifundefined{@quiz}{}{% + \ifx\eq@online y\relax + \ifeq@nosolutions + \ifeq@solutionsafter\else + \ifx\eq@insertverticalspace y\relax + \stepcounter{@cntfillin}% + \edef\fieldName{% + \if\probstar*eqexam.\curr@quiz.fillin.% + \theeqquestionnoi.part\alph{partno}.% + fi\the@cntfillin + \else + eqexam.\curr@quiz.fillin.% + \theeqquestionnoi.fi\the@cntfillin + \fi + }\makebox[0pt][r]{\textField[\BC{}]{% + \fieldName}{#2}{11bp}}% + \fi + \fi + \fi + \fi + }% + \fi\space\ignorespaces} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\TF} +% A specialized version of \cs{fillin} for True/False questions. +% \begin{macrocode} +%\newcommand\TF[1]{\fillin{30pt}{#1}} +\newcommand\defaultTFwidth{30pt} +\newcommand\TF[2][\defaultTFwidth]{% + \def\eq@next{\fillin{#1}{#2}}% + \ifdim\eq@extralabelsep=0pt\relax\else + \if\probstar*\relax\if\exerwparts@cols x + \def\eq@next{\makebox[0pt][r]{% + \fillin{#1}{#2}}\ignorespaces}% + \fi\fi\fi +\eq@next} +\def\fillinWidth#1{% + \if\probstar* + \settowidth{\eq@tmplengthA}{\normalfont\ }% + \addtolength{\eq@tmplengthA}{#1}% + \edef\eq@extralabelsep{\the\eq@tmplengthA}% + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Do..\of..} +% When I teach senior or graduate-level classes, I often give a problem with +% multiple parts (each of equal value) and ask them to ``do 3 of the following 5'' +% parts. +% \begin{macrocode} +\def\makeDoNum#1{\xdef\nDoNum{#1}% + \xdef\DoNum{\ifcase#1??\or one\or two\or three\or + four\or five\or six\or seven\or eight\or nine\or ten\fi}} +\def\makeOutOfNum#1{\xdef\nOutOfNum{#1}% + \xdef\OutOfNum{\ifcase#1??\or one\or two\or three\or + four\or five\or six\or seven\or eight\or nine\or ten\fi}} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\def\prob@Arg#1ea#2\end{\def\argi{#1}\def\argii{#2}} +\def\makeRoomForProb#1#2{% + \bgroup\@nobreakfalse\addpenalty{-500}% + \@tempdima \pagegoal \advance \@tempdima -\pagetotal + \ifdim \@tempdima < #1 \newpage\fi \egroup + \ifx1#2\ifnum\@reportpoints>1 \@checkSpacing\fi\fi +} +\def\@checkSpacing{\bgroup +%\typeout{\theeqquestionnoi : \the\pagetotal}% + \@tempdima = \lastPageTotal + \@tempdimb = \pagetotal + \ifdim\@tempdima < \@tempdimb + \advance\@tempdimb by-\@tempdima +% \typeout{difference: \the\@tempdimb} +% \ifdim\@tempdimb < 36pt\relax +% \@tempdima = 39pt\relax + \ifdim\@tempdimb < \eq@pointboxtotalheight + \@tempdima=\eq@pointboxtotalheight + \advance\@tempdima3pt\relax + \advance\@tempdima by-\@tempdimb + \vspace*{\@tempdima}% +%\typeout{\theeqquestionnoi : issuing vspace}% + \fi + \fi +\egroup} +\def\default@nbaselineskip{6} +\edef\@nbaselineskip{\default@nbaselineskip} +\def\nbaselineskip#1{\def\@nbaselineskip{#1}} +% \end{macrocode} +% \begin{environment}{problem} +% The \texttt{problem} is used to pose a single---non-multi-part---question. +% The optional argument is the number of points for this problem. +% \begin{macrocode} +\newenvironment{problem}[1][]{% + \makeRoomForProb{\@nbaselineskip\baselineskip}{1}% + \xdef\@nbaselineskip{\default@nbaselineskip}% + \gdef\probstar{x}% + \let\afterlabelhskip=\@empty + \ifx\marginpoints\@empty + \else + \def\numpoints{#1}% + \ifx\numpoints\@empty + \let\marginpoints\@empty + \else + \def\marginparpriorhook{\noindent\probvalue{#1}{0}}% + \fi + \fi + \setcounter{eq@count}{\value{eqquestionnoi}}% + \addtocounter{eq@count}{1}% + \ifnum\value{eq@count}=1\relax + \immediate\write\@auxout{\string\expandafter\string\gdef\string + \csname\space pagenofirstprob\thisexamlabel\string\endcsname + {\thepage}}% + \fi + \proofingsymbol{\ding{52}}% +% \renewcommand\proofingsymbol +% {\textcolor{\@proofingsymbolColor}{\ding{52}}}% + \begin{exercise}[eqquestionnoi]% +}{\end{exercise}% + \ifeqlocalversion\ifeqglobalversion + \xdef\eqe@tmp{\noexpand\forVersion{\eq@selectedVersion}}% + \aftergroup\eqe@tmp + \fi\fi + \global\eqlocalversionfalse +} +% \end{macrocode} +% \end{environment} +% \begin{macro}{\PTs} +% \begin{macro}{\itemPTsTxt} +% \begin{macro}{\itemPTsFormated} +% When you specify \cs{auto} for the optional argument of the \texttt{problem*} +% environment, when each item must have the command \cs{PTs} to assign the +% value of that question. The \cs{PTs} has one optional star-parameter, and one +% required parameter. The required parameter is the number of points for this item, +% if the \texttt{*} is specified, then the point value is not typeset in the document. +% +% The command \cs{itemPTsTxt} has one argument, the number of points for this item. This +% argument is passed from the \cs{PTs} command. You can redefine the way the points appear +% in the document using \cs{itemPTsTxt}. As separate command \cs{itemPTsFormated} is used to +% put parentheses around \cs{itemPTsTxt}. If the \texttt{*} option is taken with \cs{PTs}, then +% you are free to place \cs{itemPTsTxt} anywhere in the problem statement. +% \changes{v1.6g}{2006/11/29} +%{ +% Added \cs{itemPTsTxt} and \cs{itemPTsFormated} to work with \cs{PTs}. +% Also added a \texttt{*} option, to \cs{PTs}, in this case the points +% are not typeset. +%} +% \begin{macrocode} +\newcommand\itemPTsTxt[1]{$#1\,\text{% + \ifnum#1=1\relax\eqptLabel\else\eqptsLabel\fi}$} +\newcommand{\itemPTsFormated}[1]{(#1)} +\def\PTs{\@ifstar{\@PTs{*}}{\@PTs{x}}} +\def\@PTs#1#2{% + \if\@reportpoints0\else + \addtocounter{eq@count}{#2}\if#1*\else + \itemPTsFormated{\itemPTsTxt{#2}}\fi + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macrocode} +\let\auto=\relax +\def\isItD@{\@ifnextchar\Do{\let\yest@D@=y\y@st@Do} + {\let\yest@D@=n\@gobblet@end}} +\let\yest@D@=n +\def\y@st@Do\Do#1\end{\gdef\D@Num{#1}} +\def\@gobblet@end#1\end{} +% \end{macrocode} +% \begin{environment}{problem*} +% The \texttt{problem*} environment is used to pose a multi-part question. +% The \texttt{parts} environment is used to enumerate the parts. +% \begin{macrocode} +\expandafter\def\csname problem*\endcsname{% + \@ifnextchar[{\pr@bl@m@star}{\pr@bl@m@star[\@empty]}} +\def\pr@bl@m@star[#1]{% + \@ifnextchar[{\pr@blem@star{#1}}{\pr@blem@star{#1}[\@empty]}} +\def\pr@blem@star#1[#2]{% + \makeRoomForProb{\@nbaselineskip\baselineskip}{1}% + \xdef\@nbaselineskip{\default@nbaselineskip}% + \proofingsymbol{\ding{52}}% + \gdef\probstar{*}% + \gdef\pr@b@secondarg{#2}% + \setcounter{eq@count}{0}% + \let\afterlabelhskip=\@empty + \global\let\probpointseach=\@empty + \ifx#1\auto\global\let\probpointseach\relax + \def\@next{\autocalcparts}% + \else + \ifx#2\@empty\else + \setcounter{eq@count}{\value{eqquestionnoi}}% + \addtocounter{eq@count}{1}% + \@ifundefined{nPartsThisProb\thisexamlabel.\theeq@count} + {\makeOutOfNum{0}\makeDoNum{0}}% + {% + \expandafter\makeOutOfNum{% + \csname nPartsThisProb\thisexamlabel.% + \theeq@count\endcsname}% + \expandafter\makeDoNum{% + \csname DoNumThisProb\thisexamlabel.% + \theeq@count\endcsname}% + }% + \fi + \def\@next{\manualcalcparts{#1}}% + \fi\@next + \begin{exercise}[eqquestionnoi]*}% +\expandafter\def\csname endproblem*\endcsname{% + \immediate\write\@auxout{\string\expandafter\string\gdef\string + \csname\space nPartsThisProb\thisexamlabel.\theeqquestionnoi + \string\endcsname{\arabic{partno}}}% + \ifx\probpointseach\@empty\else + \ifx\probpointseach\auto + \immediate\write\@auxout{% + \string\expandafter\string\gdef\string + \csname\space prob\thisexamlabel.\theeqquestionnoi + \string\endcsname{\theeq@count}}% + \else + \setcounter{eq@count}{\value{partno}}% + \ifx\pr@b@secondarg\@empty\else + \bgroup\toks0 =\expandafter{\pr@b@secondarg}% + \expandafter\isItD@\the\toks0 \end + \ifx\yest@D@ y + \immediate\write\@auxout{% + \string\expandafter\string\gdef\string + \csname\space DoNumThisProb\thisexamlabel.% + \theeqquestionnoi\string\endcsname{\D@Num}}% + \@tempcnta = \value{eq@count}% + \advance\@tempcnta -\D@Num + \global\advance\value{eq@count}-\@tempcnta + \fi + \egroup + \fi + \multiply\value{eq@count}\argi + \immediate\write\@auxout{% + \string\expandafter\string\gdef\string + \csname\space prob\thisexamlabel.\theeqquestionnoi + \string\endcsname{\theeq@count}}% + \fi\fi + \end{exercise}% + \ifeqlocalversion\ifeqglobalversion + \xdef\eqe@tmp{\noexpand\forVersion{\eq@selectedVersion}}% + \aftergroup\eqe@tmp + \fi\fi + \global\eqlocalversionfalse +} +% \end{macrocode} +% \end{environment} +% \begin{macro}{\pushProblem} +% \begin{macro}{\popProblem} +% There may be an occasion when a multi-part question needs to be broken between parts. +% use the \cs{pushProblem} and \cs{popProblem} for this purpose. The push saves the +% counter value, and ends the \texttt{parts} environment. The pop restarts the +% \texttt{parts}, and resets the parts counter. +% \changes{1.6b}{2006/3/12} +% { +% Added \cs{pushProblem} and \cs{popProblem} to grant the ability to interrupt +% a parts environment for, for example, a multicolumn environment. +% } +%\par\medskip\noindent +%In the example below, we have our parts in a \texttt{multicols} environment, we +%\cs{pushProblem}, close \texttt{multicols}, \cs{popProblem} and continue with +% the multi-parts in single column. +%\begin{verbatim} +%\item Compute $\lim_{x\to2^{\text{$-$}}} f(x)$ +%\begin{solution}[1in]\end{solution} +%\pushProblem +%\end{multicols} +%\popProblem +%\item What value(s) of $c$ make the function $f$ +%continuous at $x=2$? +%\begin{solution}[.5in]\end{solution} +%\end{parts} +%\end{verbatim} +% \begin{macrocode} +\def\pushProblem{\xdef\nlastItem{\arabic{partno}}\end{parts}} +\def\popProblem{\begin{parts}\setcounter{partno}{\nlastItem}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macrocode} +\def\lastPageTotal{0pt} +\def\marginparafterhook{\xdef\lastPageTotal{\the\pagetotal}} +\def\manualcalcparts#1{% + \expandafter\prob@Arg#1ea\end + \ifx\argii\@empty\def\numpoints{#1}% + \else + \gdef\probpointseach{x}% + \setcounter{eq@count}{\value{eqquestionnoi}}% + \addtocounter{eq@count}{1}% + \expandafter + \ifx\csname prob\thisexamlabel.\theeq@count\endcsname\relax + \def\numpoints{\argi}% + \else + \def\numpoints{\expandafter + \csname prob\thisexamlabel.\theeqquestionnoi\endcsname}% + \fi + \fi + \ifx\marginpoints\@empty + % no points for this problem specified + \else + \ifx\argi\@empty + \let\marginpoints\@empty + \else + \ifx\argii\@empty + \ifx\marginpoints\@empty\else + \def\marginparpriorhook{% + \noindent\probvalue{\numpoints}{0}% + }% + \fi + \else + \ifx\marginpoints\@empty\else + \def\marginparpriorhook{% + \noindent\probvalue{\numpoints}{\argi}% + }% + \fi + \fi + \fi + \fi + \ifnum\value{eq@count}=1\relax + \immediate\write\@auxout{\string\expandafter\string\gdef\string + \csname\space pagenofirstprob\thisexamlabel\string\endcsname + {\thepage}}% + \else + \goodbreak + \fi +} +\def\autocalcparts{% + \setcounter{eq@count}{\value{eqquestionnoi}}% + \addtocounter{eq@count}{1}% + \expandafter + \ifx\csname prob\thisexamlabel.\theeq@count\endcsname\relax + \def\numpoints{0}% assume zero points until we get the total + \else + \edef\numpoints{\expandafter + \csname prob\thisexamlabel.\theeq@count\endcsname}% + \fi + \ifx\marginpoints\@empty\else + \def\marginparpriorhook{\noindent\probvalue{\numpoints}{0}}% + \fi + \setcounter{eq@count}{0}% +} +% \end{macrocode} +% \begin{macro}{\forproblem} +% \begin{macro}{\foritem} +% When typing solutions from assigned problems in a textbook, the problems +% assigned are not consecutive. You can set the problem number before the problem +% environments by using the \cs{forproblem} command. The one required argument is +% the problem number: \verb!\forproblem{10)!. +% \changes{v1.6h}{2007/01/24} +% { +% Added \cs{forproblem}, \cs{foritem}, \cs{aNewPage} +% } +% \begin{macrocode} +\newcommand{\forproblem}[1]{\setcounter{eqquestionnoi}{#1 - 1}} +% \end{macrocode} +% A similar comment for \cs{item}. These are useful for making out solution +% sets to homework assignments where problems are assigned from the textbook +% and you want to give a solution to problem 12, part (b), An example of usage is +%\begin{verbatim} +%\forproblem{12} +%\begin{problem*} +%Factor each. +%\begin{parts} +% \foritem{b} $ x^2 + 2x + 1 = ( x + 1 )^2 $ +% \item $ x^2 - x - 2 = ( x - 2 )( x + 1) $ % this is part (c) +% \foritem{e} $ x^2 + 7x + 10 = ( x - 2 )( x + 7) $ +% \item ... % this will be part (f) +%\end{parts} +%\end{problem*} +%\end{verbatim} +% \begin{macrocode} +\newcommand{\foritem}[1]{% + \setcounter{partno}{0}% + \lowercase{\def\eq@selectedItem{#1}}% + \let\eq@initLoop=0 + \loop + \stepcounter{partno}% + \expandafter\if\alph{partno}\eq@selectedItem + \let\eq@initLoop=1 + \fi + \if\eq@initLoop0\repeat + \addtocounter{partno}{-1}% + \item +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\aNewPage} +% \begin{macro}{\qNewPage} +% A simple command for inserting \cs{newpage}, only if the \cs{answerkey} +% option has been taken. +% \changes{v1.6h}{2007/01/24} +% { +% Added \cs{aNewPage} and \cs{qNewPage} +% } +% \begin{macrocode} +\newcommand\aNewPage{\ifanswerkey\newpage\fi} +\newcommand\qNewPage{\ifanswerkey\else\newpage\fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\OnBackOfPage} +% +% In an effort to make maximum use of the paper, I sometimes ask the +% students to solve the problem on the back of a page. The following +% command is an automated instruction. Generally, we work on the back +% of the previous page, unless we are on page 1, in this case we work +% on the back of page 1. +% +% \begin{macrocode} +\newcounter{backofpage} +\newcommand\bopText{on the back of page~\boPage} +\newcommand\bopCoverPageText{\space(the cover page)} +\newcommand\OnBackOfPage[1][\bopText]{% + \refstepcounter{backofpage}\label{bop\thebackofpage} + \begingroup + \expandafter\ifx\csname r@bop\thebackofpage\endcsname\relax + \def\boPage{??}% + \else + \edef\temp{\csname r@bop\thebackofpage\endcsname}% + \ifx\hyper@anchor\@undefined + \edef\boPage{\expandafter\@secondoftwo\temp}% + \else + \edef\boPage{\expandafter\@secondoffive\temp}% + \fi + \c@eq@count\boPage + \advance\c@eq@count-1\relax +% \end{macrocode} +% If on page 1, we work on the back of page 1, otherwise, we work on the +% back of the previous page. +% \begin{macrocode} + \edef\boPage + {% + \ifx\eqex@coverpage\relax + \expandafter\ifnum\value{eq@count}=0\relax + 1% + \else + {\theeq@count}% + \fi + \else + \ifnum\value{eq@count}=1\relax + {\theeq@count}\bopCoverPageText + \else + {\theeq@count}% + \fi + \fi + }% + \fi + #1% + \endgroup +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\pagestyle{eqExamheadings} +% \end{macrocode} +% \newpage +% \subsection{\texttt{xkeyval} Extensions} +% +% We load this material if \texttt{xkeyval} exists, and if the document author has specified +% the \texttt{usexkv} option. +% +% \begin{macrocode} +\IfFileExists{xkeyval}{% + \if\eq@usexkeys y\RequirePackage{xkeyval}\else + \endinput\fi}{\endinput} +% \end{macrocode} +% We redefine selected commands if the user has \texttt{xkeyval}. +%\begin{verbatim} +% \fillin[ +% underline=true|false,u,b,boxed=true|false,boxpretext=, +% align=l|r|c,boxsize=\tiny|..\normalsize|\large|...|\Huge, +% color=,format=<\bfseries|\ttfamily|\Large|whatever> +% ]{}{} +%\end{verbatim} +% \DescribeMacro{underline}\DescribeMacro{u}\DescribeMacro{b} +% \DescribeMacro{boxed}\DescribeMacro{boxpretext}\DescribeMacro{boxsize} +% \DescribeMacro{align}\DescribeMacro{color}\DescribeMacro{format} +% Below are the \texttt{xkeyval} definitions of the keys recognized by \texttt{fillin}. +% \begin{macrocode} +\define@boolkey{eqFillin}{underline}[true]{} +\define@key{eqFillin}{u}[]{\KV@eqFillin@underlinetrue} +\define@key{eqFillin}{b}[]{\KV@eqFillin@underlinefalse} +\define@boolkey{eqFillin}{boxed}[true]{} +\define@key{eqFillin}{boxpretext}[]{\def\eq@fillintext{#1}} +\let\eq@fillintext\@empty +\define@choicekey+{eqFillin}{boxsize}{tiny,scriptsize,footnotesize,% + small,normalsize,large,Large,LARGE,huge,Huge}[normalsize]{% + \def\eq@eqFillin@boxsize{\text{\csname#1\endcsname\strut}}% +}{\PackageWarning{eqexam}{Bad choice for boxsize, permissible values + are tiny, scriptsize, footnotesize, small, normalsize, + large, Large, LARGE, huge and Huge. Try again}} +\def\eq@eqFillin@boxsize{\text{\normalsize\strut}} +\define@key{eqFillin}{color}[red]{\def\eq@fillin@color{#1}} +\define@choicekey+{eqFillin}{align}{l,r,c}[c]{% + \def\eq@eqFillin@align{#1}}{% + \PackageWarning{eqexam}{Bad choice for align, permissible values + are l, r, and c. Try again}} +\define@key{eqFillin}{format}[\bfseries]{\def\eq@fillin@format{#1}} +% \end{macrocode} +% \begin{macro}{\fillin} +% I've re-worked \cs{fillin} to have \texttt{xkeyval} in the optional first parameter. +% The syntax is illustrated above. +% \begin{macrocode} +\renewcommand{\fillin}[3][]{\begingroup% + \setkeys{eqFillin}{boxsize,underline=false,boxed=false,% + boxpretext,color,align,format}% + \protected@edef\eq@temp@exp{\noexpand\setkeys{eqFillin}{#1}}% + \eq@temp@exp + \ifKV@eqFillin@underline\let\@fillinFmt\underbar + \else\let\@fillinFmt\relax\fi + \ifeq@proofing + \ifKV@eqFillin@boxed + \ensuremath{\boxed{\eq@eqFillin@boxsize\eq@fillintext + \@fillinFmt{\makebox[#2][\eq@eqFillin@align]{% + \strut\eq@fillin@format\color{\eq@fillin@color}% + \ensuremath{#3}}}}}% + \else + \ifmmode\let\@eqmath\ensuremath\else\let\@eqmath\relax\fi + \@fillinFmt{\makebox[#2][\eq@eqFillin@align]{% + \strut\eq@fillin@format\color{\eq@fillin@color}% + \@eqmath{#3}}}% + \fi + \else + \ifKV@eqFillin@boxed + \ensuremath{\boxed{\eq@eqFillin@boxsize\eq@fillintext + \@fillinFmt{\makebox[#2]{\strut\hfil}}}}% + \else + \@fillinFmt{\makebox[#2]{\strut\hfil}}% + \fi + \@ifundefined{@quiz}{}{% + \ifx\eq@online y\relax + \ifeq@nosolutions + \ifeq@solutionsafter\else + \ifx\eq@insertverticalspace y\relax + \stepcounter{@cntfillin}% + \edef\fieldName{% + \if\probstar*eqexam.\curr@quiz.fillin.% + \theeqquestionnoi.part\alph{partno}.% + fi\the@cntfillin + \else + eqexam.\curr@quiz.fillin.% + \theeqquestionnoi.fi\the@cntfillin + \fi + }\makebox[0pt][r]{\textField[\BC{}]{% + \fieldName}{#2}{11bp}}% + \fi + \fi + \fi + \fi + }% + \fi\endgroup\space\ignorespaces} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\TF} +% The \cs{TF} command depends on \cs{fillin}, so we make the appropriate changes. +% \begin{macrocode} +\renewcommand\TF[2][\defaultTFwidth]{% + \def\eq@next{\fillin[underline]{#1}{#2}}% + \ifdim\eq@extralabelsep=0pt\relax\else + \if\probstar*\relax\if\exerwparts@cols x + \def\eq@next{\makebox[0pt][r]{% + \fillin[underline]{#1}{#2}}\ignorespaces}% + \fi\fi\fi +\eq@next} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +% +% \end{macrocode} +\endinput diff --git a/Master/texmf-dist/source/latex/eqexam/eqexam.ins b/Master/texmf-dist/source/latex/eqexam/eqexam.ins new file mode 100644 index 00000000000..3abfe28968c --- /dev/null +++ b/Master/texmf-dist/source/latex/eqexam/eqexam.ins @@ -0,0 +1,63 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1999-2006 D. P. Story +%% +%% This file is part of the `AcroTeX eDucation Bundle'. +%% ------------------------------------------- +%% +%% It may be distributed under the conditions of the LaTeX Project Public +%% License, either version 1.2 of this license or (at your option) any +%% later version. The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.2 or later is part of all distributions of LaTeX +%% version 1999/12/01 or later. +%% +%% --------------- start of docstrip commands ------------------ +%% +\def\filedate{2001/01/22} +\def\batchfile{eqexam.ins} +\input docstrip + +\ifx\generate\undefined + \Msg{**********************************************} + \Msg{*} + \Msg{* This installation requires docstrip} + \Msg{* version 2.4 or later.} + \Msg{*} + \Msg{* An older version of docstrip has been input} + \Msg{*} + \Msg{**********************************************} + \errhelp{Move or rename old docstrip.tex and get a newer one.} + \errmessage{Old docstrip in input path} + \batchmode + \csname @@end\endcsname\end +\fi + +\keepsilent +\askforoverwritefalse +%\askonceonly +%\usedir{tex/latex/hyperref} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\preamble +\endpreamble + +\generate{% + \file{eqexam.sty}{\from{eqexam.dtx}{copyright,package}} + \file{eqalone.def}{\from{eqexam.dtx}{copyright,standalone}} + \file{eqexam.drv}{\from{eqexam.dtx}{copyright,driver}} +} + +\Msg{***************************************************************} +\Msg{*} +\Msg{* \space To finish the installation you have to copy the files } +\Msg{*} +\Msg{* \space *.sty, *.cfg and *.def into a directory searched by TeX} +\Msg{*} +\Msg{***************************************************************} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\endinput diff --git a/Master/texmf-dist/tex/latex/eqexam/eqalone.def b/Master/texmf-dist/tex/latex/eqexam/eqalone.def new file mode 100644 index 00000000000..901c87346d1 --- /dev/null +++ b/Master/texmf-dist/tex/latex/eqexam/eqalone.def @@ -0,0 +1,40 @@ +%% +%% This is file `eqalone.def', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% eqexam.dtx (with options: `copyright,standalone') +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% eqExam.sty package, 2005-02-05 %% +%% Copyright (C) 2005 D. P. Story %% +%% dpstory@uakron.edu %% +%% %% +%% This program can redistributed and/or modified under %% +%% the terms of the LaTeX Project Public License %% +%% Distributed from CTAN archives in directory %% +%% macros/latex/base/lppl.txt; either version 1 of the %% +%% License, or (at your option) any later version. %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\@ifundefined{eq@tmpbox}{\newsavebox{\eq@tmpbox}}{}% defined in eforms +\@ifundefined{eq@tmpdima}{\newdimen\eq@tmpdima}{} % defined in eforms +\def\RadioFieldSize{11bp} +\newdimen\eqcenterWidget +\def\centerWidget +#1{% + \eqcenterWidget=#1 + \eqcenterWidget=.5\eqcenterWidget + \advance\eqcenterWidget by -4bp +} +\AtEndDocument{\include@solutions} +\def\Bbox#1#2{\vbox{\hrule width #1 + \hbox to#1{\vrule height#2\hfill\vrule height#2}\vfill\hrule}} +\def\Rect#1{\textcolor{\@linkcolor}{#1}} +\def\ReturnTo#1#2{\eq@fititin{#2}} +\newcommand{\proofingsymbol}[1]{% + \def\@proofingsymbol{\textcolor{\@proofingsymbolColor}{#1}}} +\proofingsymbol{$\bullet$} +\endinput +%% +%% End of file `eqalone.def'. diff --git a/Master/texmf-dist/tex/latex/eqexam/eqexam.def b/Master/texmf-dist/tex/latex/eqexam/eqexam.def new file mode 100644 index 00000000000..273115a8f72 --- /dev/null +++ b/Master/texmf-dist/tex/latex/eqexam/eqexam.def @@ -0,0 +1,774 @@ +%% +%% This is file `eqexam.def', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% exerquiz.dtx (with options: `eqexam') +%% +\newif\ifeq@noforms \eq@noformsfalse +\newif\ifeq@noquizsolutions \eq@noquizsolutionsfalse % dps new +\newif\ifeq@nocorrections \eq@nocorrectionsfalse +\newif\ifeq@nolink \eq@nolinkfalse +\def\eq@ckglobalhide{\ifeq@globalshowsolutions\eq@hidesolutionfalse\fi} +\def\hidesymbol{h}\def\Hidesymbol{H} +\newif\iftherearesolutions \therearesolutionsfalse +\def\SolutionsAfter{\eq@solutionsaftertrue\eq@nolinktrue} +\def\SolutionsAtEnd{\eq@solutionsafterfalse\eq@nolinkfalse} +\def\NoSpaceToWork{\let\eq@insertverticalspace=n} +\def\SpaceToWork{\let\eq@insertverticalspace=y} +\SpaceToWork +\newif\ifeq@randomizeChoices \eq@randomizeChoicesfalse +\newif\ifeq@randomizeallChoices \eq@randomizeallChoicesfalse +\def\turnOnRandomize{\eq@randomizeallChoicestrue} +\def\obeyLocalRandomize{\eq@randomizeallChoicesfalse} +\let\saveRandomSeed\relax +\let\inputRandomSeed\relax +\newcommand{\exsolafter}{\eq@exsolafterDefault} +\newcommand{\eq@exsolafterDefault}{\textit{Solution}:} +\newcommand{\renameSolnAfterTo}[1]{\def\exsolafter{#1}} +\newcommand{\resetSolnAfterToDefault}{% + \def\exsolafter{\eq@exsolafterDefault}} +\ifsolutionsonly\else +\newwrite \ex@solns \immediate\openout \ex@solns \jobname.sol +\fi +\newwrite \quiz@solns \immediate\openout \quiz@solns \jobname.qsl +\newcounter{eqexno} \setcounter{eqexno}{0} +\newcounter{@exno} \setcounter{@exno}{0} % running exno +\newcounter{quizno} \setcounter{quizno}{0} +\renewcommand\thequizno{\alph{quizno}} +\newcounter{eqpointvalue} \setcounter{eqpointvalue}{0} +\newlength\eq@tmplength +\newcounter{eqquestionnoi} +\newcounter{eqquestionnoii} +\newcounter{eqquestionnoiii} +\newcount\@eqquestiondepth \@eqquestiondepth=0 +\newcounter{questionno} +\newcounter{partno} +\renewcommand\thepartno{\alph{partno}} +\def\verbatimwrite{\@bsphack + \let\do\@makeother\dospecials + \catcode`\^^M\active \catcode`\^^I=12 + \def\verbatim@processline{% + \immediate\write\verbatim@out + {\the\verbatim@line}}% + \verbatim@start} +\def\endverbatimwrite{\@esphack} +\providecommand\PBS[1]{\let\temp=\\#1\let\\=\temp} +\newcommand{\eqexerskip}[1]{\def\eq@exerskip{\vskip#1}} +\eqexerskip{\medskipamount} +\newcommand{\priorexskip}[1]{\def\eq@priorexskip{\vspace{#1}}} +\priorexskip{\medskipamount} +\let\eq@postexerciseHook\relax +\newcommand\eqafterexersolnskip{\string\medskip} +\def\marginparpriorhook{} % used to material before the exercise +\def\marginparafterhook{} % used to material after the exercise +\let\afterlabelhskip=\space +\let\exersolnheadhook=\@empty +\newcommand{\eqexheader} +{% + \hbox{\color{\@nolinkcolor}\if\exerstar*\exlabelformatwp\else + \exlabelformat\fi}% +} +\def\eqexheader@wrapper{\hypertarget{qex.\the@exno}{\eqexheader}} +\newcommand{\partsformat}[1]{\def\eq@partsformat{#1}} +\partsformat{(\hfil\alph{partno}\hfil)} +\newcommand{\defaultpartsformat}{% + \partsformat{(\hfil\alph{partno}\hfil)}} +\newcommand{\eqexlisttabheader} +{% + \color{\@nolinkcolor}\eq@partsformat +} +\newenvironment{exercise} +{% + \par\eq@priorexskip\noindent%\begingroup % set defaults + \def\eq@argi{eqexno}% % use eqexno counter + \if\eq@exerstarEnv*\def\exerstar{*}\else\def\exerstar{x}\fi + \def\currhideopt{x}% + \@ifnextchar[{\exercise@}{% + \if\exerstar*% + \def\eq@next{\@exercise}% + \else + \def\eq@next{\exercise@@}% + \fi\eq@next}% +}{\eq@postexerciseHook\par\global\eq@exerciseheadingtrue\eq@exerskip} +\def\exercise@[#1]{\def\eq@arg{#1}% + \if\eq@arg h% + \def\currhideopt{h}% + \eq@hidesolutiontrue\eq@nolinktrue% + \ifeq@globalshowsolutions + \eq@hidesolutionfalse\eq@nolinkfalse + \fi + \def\eq@next{\@exercise}% h, no *, no counter + \else + \if\eq@arg H% + \edef\currhideopt{\Hidesymbol}% + \eq@hidesolutiontrue\eq@nolinktrue% + \ifeq@globalshowsolutions + \eq@hidesolutionfalse\eq@nolinkfalse + \fi + \def\eq@next{\@exercise}% h, no *, no counter + \else + \def\currhideopt{x}% + \if\exerstar*% + \def\eq@next{\def\eq@argi{#1}\@exercise}% + \else + \def\eq@next{\def\eq@argi{#1}\exercise@@}% + \fi + \fi + \fi +\eq@next} +\def\exercise@@{\@ifstar{\def\exerstar{*}\@exercise}% was \exercise@@@ + {\exercise@@@}}% +\def\exercise@@@{% +\@ifnextchar[{\exercise@@@@}{\@exercise}} +\def\exercise@@@@[#1]{\def\eq@arg{#1}% + \if\eq@arg h% + \def\currhideopt{h}% + \eq@hidesolutiontrue\eq@nolinktrue + \ifeq@globalshowsolutions + \eq@hidesolutionfalse\eq@nolinkfalse + \fi + \def\eq@next{\@exercise}% h, no *, no counter + \else + \if\eq@arg H% + \edef\currhideopt{\Hidesymbol}% + \eq@hidesolutiontrue\eq@nolinktrue% + \def\eq@next{\@exercise}% h, no *, no counter + \else + \def\currhideopt{x}% + \typeout{The option #1 is not recognized} + \let\eq@next=\relax + \fi + \fi +\eq@next} +\newif\ifeq@exerciseheading \eq@exerciseheadingtrue +\newcommand\exerSolnHeader[3] +{% + \ifeqforpaper\else\webnewpage\fi\markright{#1}\par\noindent% + #3% + \solnhspace +} +\let\eqEXt=\relax +\let\endeqEXt=\relax +\let\eq@writeexheader\@empty +\def\@exercise +{% + \let\verbatim@out=\ex@solns + \if\eq@argi0\else\refstepcounter{\eq@argi}\fi\stepcounter{@exno}% + \if\exerstar*% if exercise with parts + \eq@nolinktrue + \else + \if\currhideopt H% + \else + \ifeq@solutionsafter + \eq@nolinktrue % no link to solution + \else + \eq@ckglobalhide % + \ifeq@hidesolution\else + \gdef\eq@writeexheader{% + \set@display@protect + \immediate\write\verbatim@out{\protect\eqEXt + \protect\exerSolnHeader{\exsecrunhead}{ex.\the@exno}% + {\exsllabelformat}\exersolnheadhook\protect\relax}% + \set@typeset@protect}% + \fi + \fi + \fi + \fi + \ifvmode\ifdim\lastskip>\z@ + \vskip-\lastskip + \fi\fi + \if\exerstar*% + \let\solution=\solnexer@woparts + \let\endsolution=\endsolnexer@woparts + \let\parts=\exercise@parts + \let\endparts\endexercise@parts + \else + \let\solution=\solnexer@woparts + \let\endsolution=\endsolnexer@woparts + \let\parts=\relax + \let\endparts=\relax + \if\Hidesymbol h\eq@nolinkfalse\ifeq@solutionsafter + \eq@nolinktrue\fi\fi + \fi + \ifeq@exerciseheading + \prior@questionsHook\marginparpriorhook\noindent\eqexheader@wrapper + \afterlabelhskip\marginparafterhook\ignorespaces + \fi +} +\long\def\setsolnspace#1{% + \def\newsolnspace{#1}% + \let\solnhspace\newsolnspace +} +\let\solnhspace\space +\def\solnexer@woparts{\def\bLeaveVspace{x}% = no vertical space added + \def\next{\@ifnextchar[{\solnexer@@woparts}% + {\solnexer@@woparts[\null]}}% + \ifx\endparts\endexercise@parts@tabular + \def\next{\solnexer@@@woparts}% + \fi + \next} +\let\eqPriorVspace\@gobble +\def\solnexer@@woparts[#1]{% + \ifx#1\null + \else + \xdef\sameVspace{#1}% + \ifeq@nosolutions + \ifeq@solutionsafter\else + \let\bLeaveVspace=\@empty + \def\leavevspace{% + \ifx\eq@insertverticalspace y\par\eqPriorVspace{#1}% + {\nobreak\parbox[b][#1][t]{\linewidth}{\vfill}}% + \fi + }% + \fi + \fi + \fi + \solnexer@@@woparts +} +\def\solutionsafterSkip{\smallskip} +\def\solnexer@@@woparts +{% + \def\exerwparts@cols{x}% + \let\verbatim@out=\ex@solns + \if\currhideopt H% + \let\procsoln=\comment + \let\endprocsoln=\endcomment + \def\eq@next{\procsoln}% + \else + \eq@ckglobalhide + \ifeq@hidesolution + \let\procsoln=\comment + \let\endprocsoln=\endcomment + \else + \ifx\bLeaveVspace\@empty\leavevspace\fi + \let\procsoln=\verbatimwrite + \let\endprocsoln=\endverbatimwrite + \fi + \def\eq@next{% + \ifeq@solutionsafter + \ifx\exsolafter\@empty\else + \par\solutionsafterSkip + \noindent\exsolafter\space\ignorespaces\fi + \else + \eq@writeexheader % write the solution header 11/03/05 + \global\let\eq@writeexheader\@empty + \global\therearesolutionstrue\expandafter\procsoln + \fi + }% + \fi +\eq@next} +\def\endsolnexerhook{} +\def\endsolnexerhookaux{} +\def\eq@fititin{\noindent\unskip\nobreak\hfill\penalty50 + \hskip2em\hbox{}\nobreak\hfill} +\let\eqfititin=\eq@fititin +\newcommand\eqExerSolnTrailer +{% + \string\ReturnTo{page.\the\c@page}% + {\hbox{\if\exerstar*\exrtnlabelformatwp\else\exrtnlabelformat\fi}}% + \string\endeqEXt\ifeqforpaper\string\par\eqafterexersolnskip\fi^^J +} +\def\endsolnexer@woparts +{% + \if\currhideopt H% + \csname endprocsoln\endcsname + \else + \ifeq@solutionsafter + \eq@fititin\hbox{\exrtnlabelformat}% + \else + \endprocsoln + \eq@ckglobalhide + \ifeq@hidesolution\else + \endsolnexerhookaux + \set@display@protect + \immediate\write\verbatim@out{\eqExerSolnTrailer}% + \set@typeset@protect + \fi + \fi + \fi +\endsolnexerhook} +\let\eq@exerstarEnv\relax +\newenvironment{exercise*}{\def\eq@exerstarEnv{*}\exercise} +{\endexercise} +\def\exercise@parts{\@@par\ifdim\parskip>\z@\vskip-\parskip\fi + \def\exerwparts@cols{x}\@ifnextchar[% + {\let\endparts=\endexercise@parts@tabular\exercise@parts@tabular@}% + {\let\endparts=\endexercise@parts@list\exercise@parts@list}} +\def\eq@extralabelsep{0pt} +\newenvironment{exercise@parts@list} +{\settowidth{\eq@tmplength}{\normalfont(d)}% +\eq@nolinkfalse +\begin{list}{\normalfont + \if\Hidesymbol h\eq@nolinkfalse\ifeq@solutionsafter + \eq@nolinktrue\fi\fi + \if\currhideopt H% + \else + \ifeq@solutionsafter + \eq@nolinktrue % no link to solution + \else + \ifeq@nosolutions + \eq@nolinktrue % no link to solution + \else + \eq@ckglobalhide + \ifeq@hidesolution\eq@nolinktrue\else + \gdef\eq@writeexheader{% + \set@display@protect + \immediate\write\verbatim@out{\protect\eqEXt + \protect\exerSolnHeader{\exsecrunhead}% + {ex.\the@exno\alph{partno}}{\exsllabelformatwp}\relax}% + \set@typeset@protect + }% + \fi + \fi + \fi + \fi + \makebox[\eq@tmplength]{\eqexlisttabheader}% +}{% + \usecounter{partno}% + \setlength{\topsep}{3pt}% + \setlength{\partopsep}{0pt plus 1pt minus 1pt}% + \setlength{\parsep}{0pt}\setlength{\itemindent}{0pt}% + \setlength{\listparindent}{\parindent}% + \settowidth{\labelsep}{\normalfont\ }% + \addtolength{\labelsep}{\eq@extralabelsep}% + \settowidth{\labelwidth}{\normalfont(d)}% + \setlength{\leftmargin}{\labelwidth}% + \addtolength{\leftmargin}{\labelsep}% + \let\eq@item=\item + \def\item{\def\currhideopt{x}\eq@hidesolutionfalse\eq@nolinkfalse% + \@ifnextchar[\@ckhide\eq@item}}% +}{\end{list}} +\def\exercise@parts@tabular@[#1]{% + \def\exerwparts@cols{#1}\exercise@parts@tabular} +\newenvironment{exercise@parts@tabular} +{% + \setcounter{partno}{0}% + \settowidth{\eq@tmplength}{\normalfont(d)\ }\sbox{\eq@tmpbox}{(d)}% + \let\eq@item=\item@part@tabular + \def\item{\eq@hidesolutionfalse\eq@nolinkfalse + \@ifnextchar[\@ckhide\eq@item}\eq@nolinkfalse + \eq@tmpdima=\linewidth \divide\eq@tmpdima by\exerwparts@cols + \vskip\partopsep\noindent\normalbaselines\tabcolsep=0pt + \begin{tabular}{*{\exerwparts@cols}{p{\eq@tmpdima}}}% +}{\end{tabular}} +\def\item@part@tabular{\leavevmode\refstepcounter{partno}% + \eq@solutionsafterfalse % no solutionsafter are allowed + \ifeq@solutionsafter + \eq@nolinktrue % no link to solution + \else\ifeq@nosolutions + \eq@nolinktrue % no link to solution + \else + \eq@ckglobalhide + \ifeq@hidesolution\eq@nolinktrue\else + \gdef\eq@writeexheader{% + \set@display@protect + \immediate\write\verbatim@out{% + \protect\eqEXt\string\exerSolnHeader{\exsecrunhead}% + {ex.\the@exno\alph{partno}}{\exsllabelformatwp}\relax}% + \set@typeset@protect + }% + \fi\fi\fi + \PBS\raggedright + \settowidth{\eq@tmplength}{\normalfont(d)\ }% + \sbox{\eq@tmpbox}{\normalfont(d)}% + \eq@tmpdima=\wd\eq@tmpbox + \addtolength\eq@tmplength{\eq@extralabelsep}% + \hangindent=\eq@tmplength\hangafter=1\relax + \makebox[\eq@tmpdima]{\eqexlisttabheader}\ \ignorespaces +} +\def\@ckhide[#1]{\def\eq@arg{#1}% + \def\currhideopt{x}% + \if\eq@arg H% + \eq@hidesolutiontrue\eq@nolinktrue% + \edef\currhideopt{\Hidesymbol}% + \else + \ifeq@globalshowsolutions\else + \if\eq@arg h% + \eq@hidesolutiontrue\eq@nolinktrue% + \def\currhideopt{h}% + \fi + \fi + \fi + \eq@item +} +\def\includeexersolutions +{% + \include@solutions\let\include@solutions\relax +} +\let\eqsolutionshook\@empty +\let\priorexsectitle\@empty +\let\priorexslinput\@empty +\def\exerSolnsHeadnToc{\section*{\exsectitle}% + \addcontentsline{toc}{section}{% + \@ifundefined{web@latextoc}{}{% + \ifx\web@latextoc y\else + \protect\numberline{}\fi}\exsectitle}} +\newcommand{\exerSolnInput} +{% + \let\webnewpage=\relax + \ifsolutionsonly\else\immediate\closeout\ex@solns\fi + \ifeq@nosolutions\else + % changed from \exsecrunhead, 6/1/05 + \iftherearesolutions\ifsolutionsonly\else\newpage\fi + \markright{\exsectitle}% + \ifx\webnewpage\relax + \def\webnewpage{\let\webnewpage\newpage}% + \fi + \priorexsectitle\exerSolnsHeadnToc\priorexslinput + \InputIfFileExists{\jobname.sol}{}{\PackageWarning{exerquiz} + {!!! Solutions to exercises not found}}% + \eqsolutionshook + \fi + \fi +} +\def\include@solutions +{% + \exerSolnInput +} +\newcommand{\prior@questionsHook}{} +\let\qMark@Hook\@empty +\let\aeb@titleQuiz\@empty +\newcommand{\post@questionsHook}{} +\renewcommand{\theeqquestionnoi}{\arabic{eqquestionnoi}} +\newcommand{\labeleqquestionnoi}{% + \color{blue}\bfseries\theeqquestionnoi.} +\renewcommand{\theeqquestionnoii}{\alph{eqquestionnoii}} +\newcommand{\labeleqquestionnoii}{% + \color{blue}\bfseries(\theeqquestionnoii)} +\renewcommand{\theeqquestionnoiii}{\roman{eqquestionnoiii}} +\newcommand{\labeleqquestionnoiii}{% + \color{blue}\bfseries(\theeqquestionnoiii)} +\newenvironment{questions} +{% + \ifnum\@eqquestiondepth>\tw@\@toodeep\else + \advance\@eqquestiondepth\@ne\fi + \def\@quesctr{eqquestionno\romannumeral\the\@eqquestiondepth}% + \begin{list}{\qMark@Hook\prior@questionsHook\gdef\eqPTs{1}% + \global\let\eqQT=\eq@na\makebox[\labelwidth][r]{\normalfont\bfseries + \csname label\@quesctr\endcsname}% + \post@questionsHook}% + {\usecounter{\@quesctr}% + \settowidth{\labelwidth}{\normalfont\bfseries00.\ }% + \setlength{\topsep}{3pt}\setlength{\parsep}{0pt}% + \setlength{\itemindent}{0pt}\setlength{\itemsep}{3pt}% + \setlength{\leftmargin}{\labelwidth}% + \settowidth{\labelsep}{\ }}% +}{\end{list}} +\def\pushquestions{% + \expandafter\xdef\csname save\@quesctr\endcsname{% + \expandafter\the\csname c@\@quesctr\endcsname}% + \end{questions}} +\def\popquestions{% + \begin{questions} + \setcounter{\@quesctr}{\csname save\@quesctr\endcsname}} +\def\sq@priorhook{\medskip\noindent} +\def\@shortquizCnt{0} +\def\@sqGenBaseName{eqSqBn\@shortquizCnt} +\newenvironment{shortquiz} +{% + {\count0=\@shortquizCnt \advance\count0by1\relax + \xdef\@shortquizCnt{\the\count0}}% + \goodbreak\@ifstar{\gdef\sqstar{*}\@shortquiz}% + {\gdef\sqstar{}\@shortquiz}% +}{\aeb@endshortquiz} +\newenvironment{shortquiz*} +{% + {\count0=\@shortquizCnt\advance\count0by1\relax + \xdef\@shortquizCnt{\the\count0 }}% + \gdef\sqstar{*}\@shortquiz +}{\aeb@endshortquiz} +\def\@shortquiz{\@ifnextchar[% + {\@@shortquiz}{\@@shortquiz[\@sqGenBaseName]}} +\def\@@shortquiz[#1]{%\begingroup + \gdef\oField{#1}\gdef\curr@quiz{#1}\gdef\currQuiz{#1}% + \global\let\eqQuizType=s\let\@qzsolndest\@empty + \if\sqstar*\relax + \let\@Ans\Ans@sq@f + \ifx\oField\@empty + \typeout{^^JExerquiz: Base field name required when using + shortquiz with '*' option} + \typeout{Exerquiz: Assuming link style^^J} + \let\@Ans\Ans@sq@l + \fi + \else + \let\@Ans\Ans@sq@l + \fi + \setcounter{questionno}{0}% + \let\answers\answers@sq + \let\endanswers\endanswers@sq + \let\manswers\manswers@sq + \let\endmanswers\endmanswers@sq + \let\solution\solution@sq + \let\endsolution\endsolution@sq + \sq@priorhook\sqlabel\space\ignorespaces +} +\def\aftershortquizskip{\medskip} +\def\aeb@endshortquiz{\setcounter{quizno}{0}% + \global\let\sqlabel=\eq@sqlabel + \global\let\sqslrtnlabel=\eq@sqslrtnlabel + \global\let\sqsllabel=\eq@sqsllabel + \par\aftershortquizskip +} +\def\sqLinks{\gdef\sqstar{}}\sqLinks{} +\def\sqForms{\gdef\sqstar{*}} +\let\eq@tq@star\relax +\def\solution@sq{\let\eq@next=\relax + \ifx\@qzsolndest\@empty + \typeout{exerquiz: * Solutions unexpected here *}% + \typeout{exerquiz: * Will assume 'solutionsafter' option *}% + \eq@solutionsaftertrue + \fi + \ifeq@solutionsafter + \par\smallskip\noindent + \sqsolafter + \else + \global\therearequizsolutionstrue\let\verbatim@out=\quiz@solns + \set@display@protect + \immediate\write\verbatim@out{% + \ifx\eqQuizType q\string\eqQt\else\string\eqSQt\fi% + \string\quizSolnHeader\ifx\eqQuizType q\ifx\allow@peek n% + [{\curr@quiz}{\currQuizStartPage}]\fi\fi% + {\@qzsolndest}{\sqsllabel}\relax}% + \set@typeset@protect + \expandafter\verbatimwrite\fi +} +\def\solutionsAfterSkip{\par\bigskip} +\def\endsolution@sq +{% + \ifeq@solutionsafter + \eq@fititin\hbox{\sqslrtnlabel}\solutionsAfterSkip + \else + \endverbatimwrite + \ifx\@qzsolndest\@empty\else\set@display@protect + \immediate\write\verbatim@out{\eqSqSolnTrailer}% + \set@typeset@protect + \fi + \fi + \global\let\@qzsolndest=\@empty +} +\def\fpAfterSolutionsSkip{\par\medskip} +\newcommand\eqSqSolnTrailer{% + \ifx\eqQuizType q% + \string\ReturnTo{page.\the\c@page}% + {\hbox{\sqslrtnlabel}}\string\endeqQt + \else + \string\ReturnTo{page.\the\c@page}% + {\hbox{\sqslrtnlabel}}\string\endeqSQt + \fi + \ifeqforpaper\string\fpAfterSolutionsSkip\fi^^J% +} +\let\eqSQt\relax +\let\endeqSQt\relax +\let\eqQt\relax +\let\endeqQt\relax +\newcommand\quizSolnHeader[3][]{% + \ifeqforpaper\else\webnewpage\fi\noindent + #2% + \solnhspace +} +\newif\iftherearequizsolutions \therearequizsolutionsfalse +\let\aeb@FLOverride\relax +\def\includequizsolutions +{% + \include@quizsolutions + \let\include@quizsolutions=\relax +} +\def\answers@sq{\stepcounter{questionno}% + \if\sqstar*\relax + \if\aeb@FLOverride l + \let\@Ans\Ans@sq@l + \else + \let\@Ans\Ans@sq@f + \fi + \else + \if\aeb@FLOverride f + \let\@Ans\Ans@sq@f + \else + \let\@Ans\Ans@sq@l + \fi + \fi + \def\aeb@answerType{r}\@ifnextchar[{\answers@@sq}% + {\@ifstar{\answers@@sq[\curr@quiz.\thequestionno]}{\answers@@sq[]}}} +\def\manswers@sq{\stepcounter{questionno}% + \if\sqstar*\relax + \if\aeb@FLOverride l + \let\@An\Ans@ck@sq@f + \fi + \else + \if\aeb@FLOverride f + \let\@An\Ans@ck@sq@f + \else + \let\@Ans\Ans@ck@sq@l + \fi + \fi + \def\aeb@answerType{c}\@ifnextchar[{\answers@@sq}% + {\@ifstar{\answers@@sq[\curr@quiz.\thequestionno]}{\answers@@sq[]}}} +\let\sq@hwdest\@empty % hard-wired destination +\def\answers@@sq[#1]#2{% + \gdef\aeb@numCols{#2}% + \ifx\sq@hwdest\@empty + \xdef\@qzsolndest{#1}% + \else + \gdef\@qzsolndest{\sq@hwdest}% + \fi + \ifx#21\gdef\eq@listType{1}\expandafter\answers@sq@list\else + \gdef\eq@listType{0}\expandafter\answers@@sq@tabular\fi{#2}% +} +\def\eq@hspanner{\ } +\def\eq@hspanner@default{\ } +\def\eq@lw@l{\eq@l@l\eq@hspanner} +\def\setMClabelsep#1{\def\eq@hspanner{#1}} +\def\resetMClabelsep{\let\eq@hspanner\eq@hspanner@default} +\def\eq@l@l{\normalsize\normalfont(d)} +\def\eq@lw@f{\kern\RadioFieldSize\eq@hspanner} +\newcommand\Ans@list[2][0]{\gdef\eq@pPTs{#1}% + \xdef\Ans@choice{#2}\item\relax\if\eq@listType1% + \addtocounter{quizno}{-1}\refstepcounter{quizno}\fi} +\newenvironment{answers@sq@list}[1] +{% + \if\aeb@answerType r + \let\endanswers=\endanswers@sq@list + \else + \let\endmanswers=\endanswers@sq@list + \fi + \vskip\aboveanswersSkip + \begin{list}{\strut\@Ans}%\begin{list}{\strut\@Ans\ } + {% + \if\sqstar*\relax + \settowidth{\labelwidth}{\eq@lw@f}% + \else + \settowidth{\labelwidth}{\eq@lw@l}% + \fi + \setlength{\parsep}{0pt}\setlength{\itemindent}{0pt}% + \setlength{\topsep}{0pt}\setlength{\partopsep}{0pt}% + \setlength{\listparindent}{\parindent}% + \setlength{\leftmargin}{\labelwidth}% + \setlength{\labelsep}{0pt}% + \def\Ans{\Ans@list}% + }% +}% +{\end{list}\setcounter{quizno}{0}} +\newcommand\Ans@tabular[2][0]{\gdef\eq@pPTs{#1}% + \xdef\Ans@choice{#2}\leavevmode\@Ans +} +\def\answers@@sq@tabular#1{% + \vskip\aboveanswersSkip\noindent\tabcolsep=0pt + \eq@tmpdima=\linewidth \divide \eq@tmpdima by#1 % + \def\Ans{\Ans@tabular}% + \begin{tabular}{*{#1}{p{\eq@tmpdima}}}}% +\def\endanswers@sq{\end{tabular}\setcounter{quizno}{0}}% +\def\endmanswers@sq{\end{tabular}\setcounter{quizno}{0}}% +\def\popiiictm{\special{CTM: pop pop pop}} +\def\linkContentFormat{% + \if\probstar*\arabic{quizno}\else\alph{quizno}\fi} +\def\linkContentWrapper{(\hfil\linkContentFormat\hfil)}% +\def\Ans@sq@l{% + \leavevmode\if\eq@listType1\stepcounter{quizno}% + \else\refstepcounter{quizno}\fi\PBS\raggedright + \settowidth{\eq@tmplength}{\eq@lw@l}\sbox{\eq@tmpbox}{\eq@l@l}% + \eq@tmpdima=\wd\eq@tmpbox + \def\link@@Content{\linkContentWrapper}% + \hangindent=\eq@tmplength\hangafter=1\relax + \Ans@sq@l@driver +\eq@hspanner\ignorespaces} +\let\Ans@ck@sq@l=\Ans@sq@l +\def\Ans@sq@f{% + \if\eq@listType1\stepcounter{quizno}% + \else\refstepcounter{quizno}\fi\PBS\raggedright + \settowidth{\eq@tmplength}{\eq@lw@f}% + \eq@tmpdima=\wd\eq@tmpbox% + \hangindent=\eq@tmplength\hangafter=1\relax + \insertGrayLetters % 6.3d + \Ans@sq@f@driver +\eq@hspanner\ignorespaces} +\let\Ans@ck@sq@f=\Ans@sq@f +\newskip\aboveanswersSkip +\setlength\aboveanswersSkip{3pt} +\def\insertGrayLetters{\ifaebshowgrayletters + \rlap{\makebox[\RadioFieldSize]% + {\textcolor{gray}{\Alph{quizno}}}}\else\relax\fi} +\newcount\eq@tabColCnt +\define@key{bchoice}{nCols}{\def\bChoiceNumCols{#1}} +\@for\eqi:=1,2,3,4,5,6,7,8,9,10 \do{\edef\temp@expand@def{% + \noexpand\define@key{bchoice}{\eqi}[\eqi]{% + \noexpand\def\noexpand\bChoiceNumCols{\eqi}}% + }\temp@expand@def +} +\def\bChoiceNumCols{\aeb@numCols} +\define@key{bchoice}{random}[true]{% + \csname if#1\endcsname\eq@randomizeChoicestrue + \else\eq@randomizeChoicesfalse\fi +} +\def\bChoices{\@ifnextchar[{\@ansChoices}{\@ansChoices[\aeb@numCols]}} +\def\@ansChoices[#1]% +{% + \setkeys{bchoice}{#1}% + \global\eq@tabColCnt=0 + \ifnum\aeb@numCols=1 % list mode + \def\eq@next{\@layoutListAns}% + \else % tabular mode + \def\eq@next{\@layoutTabularAns{\bChoiceNumCols}}% + \fi + \eq@next +} +\let\eChoices\relax +\def\@layoutListAns{\@ifnextchar\Ans{\@getListAns}% + {\@lookforendansChoices{\@layoutListAns}}% +} +\long\def\@getListAns\Ans#1\eAns{% + \Ans#1\vspace{\@rowskip}% + \@layoutListAns +} +\long\def\@lookforendansChoices#1{% + \@ifnextchar\eChoices{\rowsep{\rowsep@default}% + \expandafter\@findendans\@gobble}{\expandafter#1\@gobble}% +} +\def\@layoutTabularAns#1{% + \let\eq@tabSep=\@empty + \xdef\numShortCols{#1}% + \ifnum#1>\aeb@numCols \xdef\numShortCols{\aeb@numCols}\fi + \@@layoutTabularAns +} +\def\@@layoutTabularAns{% + \@ifnextchar\Ans{\@getTabAns}% + {\@lookforendansChoices{\@@layoutTabularAns}}% +} +\def\rowsep#1{\gdef\@rowsep{[#1]}\gdef\@rowskip{#1}}% + \rowsep{\rowsep@default} +\def\rowsepDefault#1{\def\rowsep@default{#1}} +\def\rowsep@default{0pt} +\long\def\@getTabAns\Ans#1\eAns{% + \global\advance\eq@tabColCnt1 + \let\@save@tabSep=\eq@tabSep + \ifnum\eq@tabColCnt=\numShortCols + \global\eq@tabColCnt=0 + \xdef\eq@tabSep{\noexpand\\\noalign{\kern\@rowskip\relax}}% + \else + \gdef\eq@tabSep{&}% + \fi + \@ifnextchar\eChoices{\@save@tabSep\Ans#1\rowsep{\rowsep@default} + \expandafter\@findendans\@gobble}% + {\@save@tabSep\Ans#1\@@layoutTabularAns}% +} +\def\@findendans{\@ifnextchar\end{}{\expandafter\@findendans\@gobble}} +\def\graylettersOn{\aebshowgrayletterstrue} +\def\graylettersOff{\aebshowgraylettersfalse} +\def\aeb@exiii{\expandafter\expandafter\expandafter} +\def\REF{\@ifstar{\aeb@REFstar}{\aeb@REF}} +\def\aeb@REFstar#1{\@ifundefined{r@#1}{\hbox{\reset@font\bfseries ??}} + {\ifaebshowgrayletters\aeb@buildUpperCaseRef{#1}% + \else\ref*{#1}\fi}% +} +\def\aeb@REF#1{\@ifundefined{r@#1}{\hbox{\reset@font\bfseries ??}} + {\ifaebshowgrayletters\aeb@buildUpperCaseRef{#1}% + \else\ref{#1}\fi}% +} +\def\aeb@buildUpperCaseRef#1{% + \xdef\tmp@expand{\aeb@exiii\@firstoftwo\csname r@#1\endcsname}% + \xdef\tmp@expand{\uppercase{\tmp@expand}}\tmp@expand +} +\endinput +%% +%% End of file `eqexam.def'. diff --git a/Master/texmf-dist/tex/latex/eqexam/eqexam.sty b/Master/texmf-dist/tex/latex/eqexam/eqexam.sty new file mode 100644 index 00000000000..3b6a403a6e2 --- /dev/null +++ b/Master/texmf-dist/tex/latex/eqexam/eqexam.sty @@ -0,0 +1,1755 @@ +%% +%% This is file `eqexam.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% eqexam.dtx (with options: `copyright,package') +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% eqExam.sty package, 2005-02-05 %% +%% Copyright (C) 2005 D. P. Story %% +%% dpstory@uakron.edu %% +%% %% +%% This program can redistributed and/or modified under %% +%% the terms of the LaTeX Project Public License %% +%% Distributed from CTAN archives in directory %% +%% macros/latex/base/lppl.txt; either version 1 of the %% +%% License, or (at your option) any later version. %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{eqexam} + [2009/09/28 v1.9a An Exam Construction Package (dps)] +\usepackage{keyval} +\DeclareOption{myconfig}{\AtEndOfPackage{\eqemyconfig}} +\DeclareOption{myconfigi}{\AtEndOfPackage{\eqemyconfigi}} +\DeclareOption{myconfigii}{\AtEndOfPackage{\eqemyconfigii}} +\DeclareOption{pointsonleft}{\AtEndOfPackage{\PointsOnLeft}} +\DeclareOption{pointsonright}{\AtEndOfPackage{\PointsOnRight}} +\DeclareOption{nopoints}{\AtEndOfPackage{\NoPoints}} +\DeclareOption{totalsonleft}{\AtEndOfPackage{\TotalsOnLeft}} +\DeclareOption{totalsonright}{\AtEndOfPackage{\TotalsOnRight}} +\DeclareOption{pointsonboth}{\AtEndOfPackage{\PointsOnBothSides}} +\DeclareOption{nototals}{\AtEndOfPackage{\NoTotals}} +\DeclareOption{noparttotals}{\AtEndOfPackage{\let\eq@parttotals=n}} +\DeclareOption{noseparationrule}{% + \AtEndOfPackage{\let\separationrule\relax}} +\DeclareOption{nosummarytotals}{\let\eq@nosummarytotals=y} +\DeclareOption{coverpage}{\def\eqex@coverpage{\eqexcoverpage}} +\DeclareOption{nospacetowork}{% + \AtEndOfPackage{\let\eq@insertverticalspace=n}} +\newif\ifanswerkey \answerkeyfalse +\DeclareOption{answerkey}{\answerkeytrue\eq@proofingtrue + \eq@solutionsaftertrue} +\DeclareOption{useforms}{\AtEndOfPackage{\def\sqstar{*}}} +\DeclareOption{online}{\let\eq@online=y\ExecuteOptions{links}} +\DeclareOption{pdf}{\let\load@web=y} +\DeclareOption{links}{\let\load@web=y\let\load@exerquiz=y} +\DeclareOption{email}{\let\use@email=y\ExecuteOptions{online}} +\newif\ifeqobeylocalversion\eqobeylocalversionfalse +\DeclareOption{obeylocalversions}{\eqobeylocalversiontrue} +\DeclareOption{usexkv}{\let\eq@usexkeys=y} +\let\eq@usexkeys=n +\DeclareOption{allowrandomize}{\AtEndOfPackage{\inputRandomizeChoices}} +\def\inputRandomizeChoices{\InputIfFileExists{aebrandom.def} + {\typeout{inputting aebrandom.def}}{cannot find aebrandom.def}} +\let\eq@online=n +\let\use@email=n +\let\load@web=n +\let\load@exerquiz=n +\def\sqstar{} +\def\sqLinks{\def\sqstar{}} +\def\sqForms{\def\sqstar{*}} +\def\NoSpaceToWork{\let\eq@insertverticalspace=n} +\def\SpaceToWork{\let\eq@insertverticalspace=y} +\let\eq@nototals=n +\let\eq@nosummarytotals=n +\let\eq@parttotals=y +\let\eqx@separationrule=y +\let\eq@insertverticalspace=y +\let\eqex@coverpage=\relax +\def\@reportpoints{0} +\let\marginpoints=\@empty +\let\totalsbox=\hfil +\DeclareOption{forpaper}{\eqforpapertrue + \PassOptionsToPackage{monochrome}{\eq@ColorPackage}} +\DeclareOption{forcolorpaper}{\eqforpapertrue} % for print +\DeclareOption{preview}{\previewtrue} +\DeclareOption{nosolutions}{\eq@nolinktrue\eq@nosolutionstrue} +\DeclareOption{nohiddensolutions}{\eq@globalshowsolutionstrue} +\DeclareOption{noHiddensolutions}% + {\eq@globalshowsolutionstrue\AtBeginDocument{\def\Hidesymbol{h}}} +\DeclareOption{solutionsafter}{\eq@solutionsaftertrue} +\DeclareOption{solutionsonly}{\solutionsonlytrue\answerkeytrue + \AtEndOfPackage{\therearesolutionstrue\let\exerSolnsHeadnToc\relax}} +\DeclareOption{proofing}{\eq@proofingtrue} +\newif\ifaebshowgrayletters\aebshowgraylettersfalse +\DeclareOption{showgrayletters}% + {\AtEndOfPackage{\aebshowgrayletterstrue}} +\IfFileExists{xcolor.sty}% +{\def\eq@ColorPackage{xcolor}\PassOptionsToPackage{xcolor}{table}} +{\def\eq@ColorPackage{color}} +\DeclareOption{noxcolor}{\def\eq@ColorPackage{color}} +\def\eq@drivernum{5} +\def\eqDriverName{dvipsone} +\DeclareOption{dvipsone}{\def\eq@drivernum{0}\def\eqDriverName{dvipsone} + \PassOptionsToPackage{\eq@ColorPackage}{dvipsone}} +\DeclareOption{dvips}{\def\eq@drivernum{0}\def\eqDriverName{dvips} + \PassOptionsToPackage{\eq@ColorPackage}{dvips}} +\DeclareOption{pdftex}{\def\eq@drivernum{1}\def\eqDriverName{pdftex} + \PassOptionsToPackage{\eq@ColorPackage}{pdftex}} +\DeclareOption{dvipdfm}{\def\eq@drivernum{2}\def\eqDriverName{dvipdfm} + \PassOptionsToPackage{\eq@ColorPackage}{dvipdfm}} +\DeclareOption{textures}{\def\eq@drivernum{3}\def\eqDriverName{textures} + \PassOptionsToPackage{\eq@ColorPackage}{textures}} +\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{\eq@ColorPackage}} +\@ifpackageloaded{xcolor}% +{% + \@ifpackagelater{xcolor}{2004/07/04}{} + {% + \PackageError{eqexan}{% + *************************************************\MessageBreak + * Your Version of `xcolor.sty' is too old!\MessageBreak + * You need the version from 2004/07/04 or newer\MessageBreak + * or use: \string\usepackage[noxcolor]{eqexam}\MessageBreak + * or \string\documentclass[noxcolor]{article}\MessageBreak + *************************************************}{}% + }% +}{} +\newif\ifeq@solutionsafter \eq@solutionsafterfalse +\newif\ifsolutionsonly\solutionsonlyfalse +\newif\ifeq@hidesolution \eq@hidesolutionfalse +\newif\ifeq@globalshowsolutions \eq@globalshowsolutionsfalse +\newif\ifeq@nosolutions \eq@nosolutionsfalse +\newif\ifeq@proofing \eq@proofingfalse +\newif\ifeq@nolink \eq@nolinkfalse +\newif\ifpreview \previewfalse +\newif\ifeqforpaper \eqforpaperfalse +\def\eqemyconfig{\InputIfFileExists{eqexam.cfg}{}{}} +\def\eqemyconfigi{\InputIfFileExists{eqexami.cfg}{}{}} +\def\eqemyconfigii{\InputIfFileExists{eqexamii.cfg}{}{}} +\InputIfFileExists{web.cfg}{}{} +\InputIfFileExists{eqecus.opt}{}{} +\ProcessOptions +\let\savedeq@online\eq@online +\let\savedifeq@solutionsafter\ifeq@solutionsafter +\let\savedifeq@hidesolution\ifeq@hidesolution +\let\savedifeq@globalshowsolutions\ifeq@globalshowsolutions +\let\savedifeq@nosolutions\ifeq@nosolutions +\let\savedifeq@proofing\ifeq@proofing +\let\savedifeq@nolink\ifeq@nolink +\let\savedifpreview\ifpreview +\let\savedifeqforpaper\ifeqforpaper +\let\ifnosolutions\ifeq@nosolutions +\RequirePackage{amstext,amssymb} +\RequirePackage{comment} +\@ifpackageloaded{web}{\let\load@web=y} +{% + \ifx\load@web y + \ifnum\eq@drivernum=5 + \PackageError{eqexam}{****You have not selected a driver % + for eqExam****}{Specify dvipsone, dvips, pdftex, % + dvipdfm or textures in option list.} + \fi + \RequirePackage[\eqDriverName]{web} + \edef\@pdfcreator{\@pdfcreator, The eqExam Package} + + \fi +} +\@ifpackageloaded{exerquiz}{\let\load@exerquiz=y} +{% + \ifx\load@exerquiz y + \RequirePackage[nodljs]{exerquiz}[2005/1/23] + \let\importdljs=y + \let\execjs=y + \fi +} +\def\eqDvipsone{dvipsone} +\ifx\eqDriverName\eqDvipsone +\@ifpackageloaded{hyperref} + {\renewcommand\@pdfviewparams{ null null null}}{} +\fi +\let\eq@online\savedeq@online +\let\ifeq@solutionsafter\savedifeq@solutionsafter +\def\ifsolutionsafter{\ifeq@solutionsafter} % user interface +\let\ifeq@hidesolution\savedifeq@hidesolution +\let\ifeq@globalshowsolutions\savedifeq@globalshowsolutions +\let\ifeq@nosolutions\savedifeq@nosolutions +\let\ifeq@proofing\savedifeq@proofing +\let\ifeq@nolink\savedifeq@nolink +\let\ifpreview\savedifpreview +\let\ifeqforpaper\savedifeqforpaper +\RequirePackage{\eq@ColorPackage} +\RequirePackage{calc} +\RequirePackage{pifont} +\RequirePackage{verbatim} +\RequirePackage{multicol} +\setlength\columnseprule{.4pt} +\raggedcolumns\multicolsep=3pt +\setlength{\headsep}{0pt} +\settowidth{\oddsidemargin}{\normalsize\normalfont\bfseries00.\ } +\setlength{\evensidemargin}{0pt} +\setlength{\marginparsep}{11pt} +\setlength{\marginparwidth}{35pt} +\setlength{\headheight}{12pt} +\setlength{\topmargin}{-.5in} +\setlength{\headsep}{20pt} +\setlength{\footskip}{\marginparsep} +\def\eqExamPageLayout +{% + \setlength\textwidth\paperwidth + \addtolength{\textwidth}{-2in} + \addtolength{\textwidth}{-\oddsidemargin} + \setlength\textheight{\paperheight} + \addtolength\textheight{-2in} + \addtolength\textheight{-\headheight} + \addtolength\textheight{-\headsep} + \addtolength\textheight{-\topmargin} + \addtolength\textheight{-\footskip} +} +\eqExamPageLayout +\newcommand{\ps@eqExamheadings} +{% + \renewcommand{\@oddhead}{% + {% + \normalfont\normalsize + \ifnum\value{page}=1 \hfil + \else + \ifx\eqex@coverpage\relax + \eqExamRunHead + \else + \ifnum\value{page}=2 \hfil + \else + \eqExamRunHead + \fi + \fi + \fi + }% +} +\renewcommand{\@evenhead}{\@oddhead} +\renewcommand{\@oddfoot}{\settotalsbox} +\renewcommand{\@evenfoot}{\@oddfoot}} +\raggedbottom +\newcounter{eqpointsofar} +\newcounter{eqpointsthispage} +\newcounter{eq@numparts} +\newcounter{eq@count} +\newtoks\partNames \partNames={} +\newlength{\eq@tmplengthA} +\newbox{\eq@pointbox} +\newlength{\eq@pointboxtotalheight} +\newlength{\eqetmplengtha} +\newlength{\eqetmplengthb} +\def\eqbothmargins#1#2{\eqleftmargin{#1}{#2}\eqrightmarginbox{#1}{#2}} +\def\PointsOnLeft{\def\@reportpoints{1}\let\marginpoints=\eqleftmargin} +\def\PointsOnRight{\def\@reportpoints{2}\relax + \let\marginpoints=\eqrightmarginbox} +\def\PointsOnBothSides{\def\@reportpoints{3}\relax + \let\marginpoints=\eqbothmargins} +\def\NoPoints{\def\@reporttotals{0}\let\totalsbox=\hfil + \let\marginpoints=\@empty\let\eq@nosummarytotals=y} +\def\TotalsOnLeft{\def\@reporttotals{1}\def\totalsbox{\totalsboxleft}} +\def\TotalsOnRight{\def\@reporttotals{2}\def\totalsbox{\totalsboxright}} +\def\NoTotals{\def\@reporttotals{0}\let\totalsbox=\hfil} +\def\eoeTotalOff{\let\eq@parttotals=n} +\def\eoeTotalOn{\let\eq@parttotals=y} +\def\separationruleOn{\let\eqx@separationrule=y} +\def\separationruleOff{\let\eqx@separationrule=n} +\def\encloseProblemsWith#1{\ifsolutionsonly + \excludecomment{#1}\else + \includecomment{#1}\fi +} +\providecommand{\proofingsymbolColor}[1]{\def\@proofingsymbolColor{#1}} +\proofingsymbolColor{red} +\providecommand{\instructionsColor}[1]{\def\@instructionsColor{#1}} +\instructionsColor{blue} +\providecommand{\eqCommentsColor}[1]{\def\@eqCommentsColor{#1}} +\eqCommentsColor{blue} +\providecommand{\universityColor}[1]{\def\webuniversity@color{#1}} +\universityColor{blue} +\providecommand{\titleColor}[1]{\def\webtitle@color{#1}} +\titleColor{black} +\providecommand{\authorColor}[1]{\def\webauthor@color{#1}} +\authorColor{black} +\providecommand{\subjectColor}[1]{\def\websubject@color{#1}} +\subjectColor{blue} +\providecommand{\linkcolor}[1]{\def\@linkcolor{#1}} +\linkcolor{blue} +\providecommand{\nolinkcolor}[1]{\def\@nolinkcolor{#1}} +\nolinkcolor{blue} +\def\examNum#1{\def\nExam{#1}} +\examNum{1} +\def\Exam{\ifAB{\eq@VersionAtext}{\eq@VersionBtext}} +\def\sExam{\ifAB{\eq@shortVersionAtext}{\eq@shortVersionBtext}} +\def\VersionAtext#1{\def\eq@VersionAtext{#1}} +\def\VersionBtext#1{\def\eq@VersionBtext{#1}} +\def\shortVersionAtext#1{\def\eq@shortVersionAtext{#1}} +\def\shortVersionBtext#1{\def\eq@shortVersionBtext{#1}} +\VersionAtext{Exam~\nExam--Version A} +\VersionBtext{Exam~\nExam--Version B} +\shortVersionAtext{Exam~\nExam A} +\shortVersionBtext{Exam~\nExam B} +\newtoks\eqtemptokena +\newtoks\eqtemptokenb +\def\numVersions#1{\ifnum#1>26\def\eq@nVersions{26}% + \PackageWarning{eqexam}{The value of \string\numVersions is too + large. \MessageBreak Choose a natural number less than 27.} + \else\def\eq@nVersions{#1}\fi} +\def\longTitleText +{% + \setcounter{eq@count}{0} + \eqtemptokena={} + \let\endtitleMarker\endlongTitleText + \@gatherTitleText{\Exam} +} +\def\endlongTitleText{l} +\def\shortTitleText +{% + \setcounter{eq@count}{0} + \eqtemptokena={} + \let\endtitleMarker\endshortTitleText + \@gatherTitleText{\sExam} +} +\def\endshortTitleText{s} +\def\@gatherTitleText#1#2{% + \def\eqe@argii{#2} + \if\endtitleMarker\eqe@argii + \ifnum\value{eq@count}>\eq@nVersions\let\eq@next\relax + \else\def\eq@next{\eq@shortTitlesFix{#1}}\fi + \else + \stepcounter{eq@count} + \eqtemptokenb=\expandafter{#2} + \xdef#1{\the\eqtemptokena\expandafter\noexpand + \csname v\Alph{eq@count}\endcsname{\the\eqtemptokenb}} + \xdef\sExam{\the\eqtemptokena\expandafter\noexpand + \csname v\Alph{eq@count}\endcsname{\the\eqtemptokenb}} + \eqtemptokena=\expandafter{#1} + \ifnum\value{eq@count}<\eq@nVersions + \def\eq@next{\@gatherTitleText{#1}}% + \else + \def\eq@next{% + \if\endtitleMarker\endlongTitleText + \expandafter\eqe@absorbTokensLong + \else + \expandafter\eqe@absorbTokensShort + \fi + }% + \fi + \fi + \eq@next +} +\long\def\eqe@absorbTokensLong#1\endlongTitleText{} +\long\def\eqe@absorbTokensShort#1\endshortTitleText{} +\def\eq@shortTitlesFix#1{% + \PackageWarning{eqexam}{You have defined an insufficient number + of titles for the number of versions declared in + \string\numVersions. Please fix the problem}% + \stepcounter{eq@count}% + \if\endtitleMarker\endlongTitleText + \edef\eqe@tmp{\noexpand\@gatherTitleText{\noexpand#1} + {??---Title \# \the\value{eq@count}---??}% + \noexpand\endlongTitleText} + \else + \edef\eqe@tmp{\noexpand\@gatherTitleText{\noexpand#1} + {T\#\the\value{eq@count}??}\noexpand\endshortTitleText} + \fi + \addtocounter{eq@count}{-1}% + \eqe@tmp +} +\def\ifAB#1#2{\if\eq@selectedVersion A#1% + \else\if\eq@selectedVersion B#2% +\fi\fi} +\def\eq@replaceToken#1{#1} +\newif\ifeqglobalversion \eqglobalversionfalse +\newif\ifeqlocalversion \eqlocalversionfalse +\newif\if@templocalversion \@templocalversionfalse +\def\eqe@initializeMultiVersions{% + \let\save@message\message\let\message\@gobble + \@tfor\eqe@tmp:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{% + \expandafter\let\csname v\eqe@tmp\endcsname\@gobble + \expandafter\excludecomment\expandafter{ver\eqe@tmp}% + \expandafter\let\csname Afterver\eqe@tmp Comment\endcsname\relax + }\let\message\save@message +} +\AtBeginDocument{\let\eqe@initializeMultiVersions\relax} +\def\forVersion#1% +{% + \eqe@initializeMultiVersions + \global\eqglobalversiontrue + \setcounter{eq@count}{0} + \uppercase{\def\eq@selectedVersion{#1}} + \@ifundefined{eq@nVersions}{\PackageInfo{eqexam}{% + \string\numVersions\space has not been declared, \MessageBreak + taking the number of versions to be 2.}\def\eq@nVersions{2}}{} + \loop + \stepcounter{eq@count} + \expandafter\if\Alph{eq@count}\eq@selectedVersion + \xdef\eq@nSelectedVersion{\the\value{eq@count}}% + \setcounter{eq@count}{27}\fi + \ifnum\value{eq@count}<26\repeat + \ifnum\eq@nSelectedVersion >\eq@nVersions + \PackageError{eqexam} + {The value of \string\forVersion + \space(\eq@selectedVersion)\MessageBreak + exceeds the value of \string\numVersions\space + (\eq@nVersions)} + {Decrease the value of \string\forVersion.} + \fi + \setcounter{eq@count}{0} + \let\save@message\message\let\message\@gobble + \loop + \stepcounter{eq@count} + \expandafter + \let\csname After\Alph{eq@count}Comment\endcsname\relax + \lowercase + {% + \if#1\alph{eq@count} + \expandafter\let + \csname v\Alph{eq@count}\endcsname\@empty + \else + \expandafter\let + \csname v\Alph{eq@count}\endcsname\@gobble + \fi + \if#1\alph{eq@count} + \edef\eq@next + {\noexpand\includecomment{ver\Alph{eq@count}}} + \else + \edef\eq@next + {\noexpand\excludecomment{ver\Alph{eq@count}}} + \fi + }\eq@next + \ifnum\value{eq@count}<\eq@nVersions\repeat + \let\message\save@message +} +\AtEndOfPackage{\numVersions{26}\forVersion{A}} +\def\selectVersion#1#2% 1 \le #1 \le #2 +{% + \gdef\nLocalSelection{#1}% + \gdef\nLocalVersions{#2}% + \ifeqglobalversion\ifnum\eq@nSelectedVersion>\nLocalVersions + {\count0=\eq@nSelectedVersion \count2=\count0 + \advance\count0by-1 \divide\count0by\nLocalVersions + \multiply\count0by\nLocalVersions \count2=\eq@nSelectedVersion + \advance\count2by-\count0 + \xdef\nLocalSelection{\the\count2\relax}% + \ifeqobeylocalversion\else + \global\@templocalversiontrue + \global\eqobeylocalversiontrue + \fi}% + \fi\fi + \ifeqobeylocalversion + \global\eqlocalversiontrue + \setcounter{eq@count}{0} + \ifx\nLocalSelection\@empty\def\nLocalSelection{1}\fi + \let\save@message\message\let\message\@gobble + \loop + \stepcounter{eq@count}\expandafter + \let\csname Afterver\Alph{eq@count}Comment\endcsname\relax + \lowercase + {% + \ifnum\value{eq@count}=\nLocalSelection + \expandafter\let + \csname v\Alph{eq@count}\endcsname\@empty + \else + \expandafter\let + \csname v\Alph{eq@count}\endcsname\@gobble + \fi + \ifnum\value{eq@count}=\nLocalSelection + \edef\eq@next{% + \noexpand\includecomment{ver\Alph{eq@count}}} + \else + \edef\eq@next{% + \noexpand\excludecomment{ver\Alph{eq@count}}} + \fi + }\eq@next + \ifnum\value{eq@count}<\nLocalVersions\repeat + \let\message\save@message + \fi + \if@templocalversion\global\eqobeylocalversionfalse\fi +} +\@ifpackageloaded{web}{} +{ + \def\title{\@ifnextchar[{\@title}{\@title[\@empty]}} + \def\@title[#1]#2{\gdef\webtitle{#2}% + \ifx#1\@empty\gdef\shortwebtitle{#2}% + \else\gdef\shortwebtitle{#1}\fi} + \def\subject{\@ifnextchar[{\@subject}{\@subject[\@empty]}} + \def\@subject[#1]#2{\gdef\websubject{#2}% + \ifx#1\@empty\gdef\shortwebsubject{#2}% + \else\gdef\shortwebsubject{#1}\fi} + \def\author#1{\gdef\webauthor{#1}} + \def\email#1{\gdef\webemail{#1}} + \def\keywords#1{\gdef\webkeywords{#1}} + \def\university#1{\gdef\webuniversity{#1}} + \def\web@versionlabel{Version} + \def\web@toc{Table of Contents} + \def\web@continued{cont.} + \title{}\author{}\email{}\subject{}\keywords{}\university{} + \def\optionalpagematter{} +} +\def\duedate#1{\def\theduedate{#1}} +\duedate{} +\def\duedate#1{\def\theduedate{#1}} +\duedate{} +\newcommand\thisterm +{% + \ifnum\the\month<6 + Spring% + \else + \ifnum\the\month<8 + Summer% + \else + % August or later + \ifnum\the\month>8 + % September or later + Fall% + \else + % month of August + \ifnum\the\day>25 + Fall% + \else + Summer% + \fi + \fi + \fi + \fi +} +\newcommand\examNameLabel[1]{\gdef\@examNameLabel{#1}} +\examNameLabel{Name:} +\newcommand\eqExamName[2][]{\gdef\eq@ExamName{% + \bgroup\settowidth\eq@tmplengthA{\@examNameLabel\ }% + \@tempdima=#2 \advance\@tempdima by-\eq@tmplengthA + \underbar{\makebox[#2][l]{\@examNameLabel}}% + \insTxtFieldIdInfo[#1]{\@tempdima}{IdInfo.Name}% + \egroup}% +} +\eqExamName[\Ff\FfRequired]{2.25in} +\newcommand\examSIDLabel[1]{\gdef\@examSIDLabel{#1}} +\examSIDLabel{SID:} +\newcommand\eqSID[2][]{\gdef\eq@SID{% + \bgroup\settowidth\eq@tmplengthA{\@examSIDLabel\ }% + \@tempdima=#2 \advance\@tempdima by-\eq@tmplengthA + \underbar{\makebox[#2][l]{\@examSIDLabel}}% + \insTxtFieldIdInfo[#1]{\@tempdima}{IdInfo.SID}% + \egroup}% +} +\eqSID[\Ff\FfRequired]{2.25in} +\newcommand\examEmailLabel[1]{\gdef\@examEmailLabel{#1}} +\examEmailLabel{Email:} +\newcommand\eqEmail[2][]{\gdef\eq@Email{% + \bgroup\settowidth\eq@tmplengthA{\@examEmailLabel\ }% + \@tempdima=#2 \advance\@tempdima by-\eq@tmplengthA + \underbar{\makebox[#2][l]{\@examEmailLabel}}% + \insTxtFieldIdInfo[#1]{\@tempdima}{IdInfo.email}% + \egroup}% +} +\eqEmail{2.25in} +\def\insTxtFieldIdInfo[#1]#2#3{% + \@ifundefined{@quiz}{}{\ifx\eq@online y\relax + \ifeq@nosolutions\ifeq@solutionsafter\else + \makebox[0pt][r]{\textField[\BC{}#1]{#3}{#2}{11bp}}% + \fi\fi\fi + }% +} +\def\SubmitInfo#1#2{% + \def\EqExam@SubmitURL{#1}\def\@EmailInstr{#2}% +} +\def\EmailCourseName#1{\def\@EmailCourseName{#1}} +\EmailCourseName{\websubject} +\def\EmailExamName#1{\def\@EmailExamName{#1}} +\EmailExamName{\webtitle} +\def\EmailSubject#1{\def\@EmailSubject{#1}} +\EmailSubject{} +\def\ServerRetnMsg#1{\def\@ServerRetnMsg{#1}} +\ServerRetnMsg{} +\def\SubmitButtonLabel#1{\def\@SubmitButtonLabel{#1}} +\SubmitButtonLabel{Submit} +\let\priorSubmitJS\@gobble +\let\postSubmitJS\@empty +\def\SubmitButton +{% + \ifx\use@email y\ifeq@nosolutions\ifeq@solutionsafter\else + \makebox[0pt][l]{\pushButton + [\CA{\@SubmitButtonLabel}\A{\JS{% + var _eqEok2Submit = true;\r + var aSubmitFields = new Array("eqexam", "IdInfo");\r + \priorSubmitJS\r + if(_eqEok2Submit) this.submitForm("\EqExam@SubmitURL", + true, false, aSubmitFields);\r + \postSubmitJS + }}]{Submit}{1.5in}{16bp}}% + \makebox[0pt][l]{\textField[\F\FHidden\DV{\@EmailInstr} + \V{\@EmailInstr}]{IdInfo.mailTo}{11bp}{11bp}}% + \makebox[0pt][l]{\textField[\F\FHidden\DV{\@EmailCourseName} + \V{\@EmailCourseName}]{IdInfo.courseName}{11bp}{11bp}}% + \makebox[0pt][l]{\textField[\F\FHidden\DV{\@EmailExamName} + \V{\@EmailExamName}]{IdInfo.examName}{11bp}{11bp}}% + \makebox[0pt][l]{\textField[\F\FHidden\DV{\@EmailSubject} + \V{\@EmailSubject}]{IdInfo.subject}{11bp}{11bp}}% + \makebox[0pt][l]{\textField[\F\FHidden\DV{\@ServerRetnMsg} + \V{\@ServerRetnMsg}]{IdInfo.retnmsg}{11bp}{11bp}}% + \fi\fi\fi +} +\def\thequizno{\if\probstar*\arabic{quizno}\else\alph{quizno}\fi} +\def\linkContentFormat{% + \if\probstar*\arabic{quizno}\else\alph{quizno}\fi} +\def\linkContentWrapper{(\hfil\linkContentFormat\hfil)}% +\def\eqExam@Ans@sq@l{% + \leavevmode\stepcounter{quizno}\PBS\raggedright + \settowidth{\eq@tmplength}{\eq@lw@l}\sbox{\eq@tmpbox}{\eq@l@l}% + \eq@tmpdima=\wd\eq@tmpbox + \def\link@@Content{\linkContentWrapper}% + \hangindent=\eq@tmplength\hangafter=1\relax + \edef\fieldName{\if\probstar*% + eqexam.\curr@quiz.\theeqquestionnoi.part\alph{partno}\else + eqexam.\curr@quiz.\theeqquestionnoi\fi + }% + \ifx\eq@online y\relax + \makebox[0pt][l]{\radio@@Button{}{\fieldName}% + {\eq@tmpdima}{\RadioFieldSize}{\Ans@choice\alph{quizno}}% + {\eq@protect\A}{\eq@setWidgetProps\eq@l@check@driver}% + {\Ans@r@l@Defaults\every@RadioButton\every@qRadioButton}}% + \else + \edef\@linkcolor{\@nolinkcolor}% + \fi + \ifeq@nosolutions\edef\@linkcolor{\@nolinkcolor}\fi + \textcolor{\@linkcolor}{\makebox[\eq@tmpdima]{\link@@Content}}% + \Ans@proofing{\eq@tmpdima}% +} +\def\eqExam@Ans@sq@f{% + \stepcounter{quizno}\PBS\raggedright + \settowidth{\eq@tmplength}{\eq@lw@f}% + \eq@tmpdima=\wd\eq@tmpbox% + \hangindent=\eq@tmplength\hangafter=1\relax + \ifx\eq@online n\previewtrue + \Ans@sq@f@driver + \else + \edef\fieldName{% + \if\probstar*eqexam.\curr@quiz.\theeqquestionnoi.% + part\alph{partno} + \else + eqexam.\curr@quiz.\theeqquestionnoi + \fi + }\insertGrayLetters + \radio@@Button{}{\fieldName}{\RadioFieldSize}% + {\RadioFieldSize}{\Ans@choice\alph{quizno}}{\eq@protect\A}% + {\eq@setWidgetProps\eq@RadioCheck@driver}% + {\@@Ans@sq@f@Defaults\Ans@sq@f@Actions\every@RadioButton + \every@sqRadioButton}% + \fi + \Ans@proofing{\RadioFieldSize}% +} +\def\eqExam@Ans@ck@sq@l{% + \leavevmode\stepcounter{quizno}\PBS\raggedright + \settowidth{\eq@tmplength}{\eq@lw@l}\sbox{\eq@tmpbox}{\eq@l@l}% + \eq@tmpdima=\wd\eq@tmpbox + \def\link@@Content{\linkContentWrapper}% + \hangindent=\eq@tmplength\hangafter=1\relax + \edef\fieldName{% + \if\probstar*eqexam.\curr@quiz.\theeqquestionnoi.% + part\alph{partno}.\alph{quizno} + \else + eqexam.\curr@quiz.\theeqquestionnoi.\alph{quizno} + \fi + }% + \ifx\eq@online y\relax + \makebox[0pt][l]{\check@@Box{}{\fieldName}% + {\eq@tmpdima}{\RadioFieldSize}{\Ans@choice\alph{quizno}}% + {\eq@protect\A}{\eq@setWidgetProps\eq@l@check@driver}% + {\Ans@r@l@Defaults\every@RadioButton\every@qRadioButton}}% + \else + \def\@linkcolor{blue}% + \fi + \ifeq@nosolutions\def\@linkcolor{blue}\fi + \textcolor{\@linkcolor}{\makebox[\eq@tmpdima]{\link@@Content}}% + \Ans@proofing{\eq@tmpdima}% +} +\def\eqExam@Ans@ck@sq@f{% + \stepcounter{quizno}\PBS\raggedright + \settowidth{\eq@tmplength}{\eq@lw@f}% + \eq@tmpdima=\wd\eq@tmpbox% + \hangindent=\eq@tmplength\hangafter=1\relax + \ifx\eq@online n\previewtrue + \Ans@sq@f@driver + \else + \edef\fieldName{% + \if\probstar*eqexam.\curr@quiz.\theeqquestionnoi.% + part\alph{partno}.\alph{quizno} + \else + eqexam.\curr@quiz.\theeqquestionnoi.\alph{quizno} + \fi + }% + \check@@Box{}{\fieldName}{\RadioFieldSize}% + {\RadioFieldSize}{\Ans@choice\alph{quizno}}{\eq@protect\A}% + {\eq@setWidgetProps\eq@RadioCheck@driver}% + {\@@Ans@sq@f@Defaults\Ans@sq@f@Actions\every@RadioButton + \every@sqRadioButton}% + \fi + \Ans@proofing{\RadioFieldSize}% +} +\def\eqExamPriorVspace#1{\edef\fieldName{% + \if\probstar*eqexam.\curr@quiz.% + \theeqquestionnoi.part\alph{partno}.solution + \else + eqexam.\curr@quiz.\theeqquestionnoi.solution + \fi + }% + \nobreak\textField[\Ff\FfMultiline\BC{}] + {\fieldName}{\linewidth}{#1}% + \@gobble +} +\@ifpackageloaded{exerquiz}{% + \let\Ans@sq@l\eqExam@Ans@sq@l + \let\Ans@sq@f\eqExam@Ans@sq@f + \let\Ans@ck@sq@l\eqExam@Ans@ck@sq@l + \let\Ans@ck@sq@f\eqExam@Ans@ck@sq@f + \def\eqexheader@wrapper{\makebox[0pt][r]{% + \hypertarget{qex.\the@exno}{\eqexheader}}} + \ifx\eq@online y\relax + \newcounter{@cntfillin} + \let\eqPriorVspace=\eqExamPriorVspace + \fi +}% +{% + \input{eqalone.def} + \input{eqexam.def} + \def\eqexheader@wrapper{\makebox[0pt][r]{\eqexheader}} +} +\renewcommand{\thepartno}{\theeqquestionnoi (\alph{partno})} +\newcommand{\defaultthepartno}{% + \renewcommand{\thepartno}{\theeqquestionnoi (\alph{partno})}% +} +\def\Ans@sq@l@driver{% + \Rect{\makebox[\eq@tmpdima]{\linkContentWrapper}}% + \Ans@proofing{\eq@tmpdima}% +} +\def\Ans@sq@f@driver{% + \centerWidget\RadioFieldSize + \leavevmode\lower\eqcenterWidget\Bbox + {\RadioFieldSize}{\RadioFieldSize}% + \Ans@proofing{\RadioFieldSize}% +} +\def\eq@sqsllabel{\string\textbf{Solution to Quiz:}} +\def\sqsllabel{\eq@sqsllabel} +\let\quiz@solns=\ex@solns +\def\writetoSolns#1{% + \immediate\write\quiz@solns{\string\goodbreak\noindent + \string\hspace*{-\string\oddsidemargin}% + \string\textbf{#1}\par\string\medskip}% +} +\def\Ans@sq@l@Actions{} +\def\Ans@sq@f@Actions{} +\def\Ans@proofing +#1{% + \ifeq@proofing\if\Ans@choice1\relax + \llap{\rlap{\,\@proofingsymbol}\hskip#1\relax}% + \fi\fi +} +\def\eq@ExamLastPage{\csname eqExamLastPage\endcsname} +\newcommand{\lhead}[1]{\def\eq@lhead{#1}} +\lhead{\shortwebsubject/\shortwebtitle} +\newcommand{\chead}[1]{\def\eq@chead{#1}} +\chead{-- Page \arabic{page}\space of \eq@ExamLastPage\space--} +\newcommand{\rhead}[1]{\def\eq@rhead{#1}} +\rhead{\eq@ExamName} +\newcommand{\runExamHeader}{\eq@lhead\hfill\eq@chead\hfill\eq@rhead} +\newcommand\eqExamRunHead +{% + \addtolength\textwidth{\oddsidemargin}% + \noindent\hspace*{-\oddsidemargin}\makebox[\textwidth] + {\runExamHeader}% +} +\newcommand{\lheadSol}[1]{\def\eq@lheadSol{#1}} +\lheadSol{\shortwebsubject/\shortwebtitle} +\newcommand{\cheadSol}[1]{\def\eq@cheadSol{#1}} +\cheadSol{-- Page \arabic{page}\space of \eq@ExamLastPage\space--} +\newcommand{\rheadSol}[1]{\def\eq@rheadSol{#1}} +\rheadSol{SOLUTIONS} +\newcommand\runExamHeaderSol + {\eq@lheadSol\hfill\eq@cheadSol\hfill\eq@rheadSol} +\def\eqsolutionshook +{% + \gdef\eqExamRunHead{\addtolength\textwidth{\oddsidemargin}% + \noindent\hspace*{-\oddsidemargin}\makebox[\textwidth] + {\runExamHeaderSol}}% +} +\newcommand\maketitledesign +{% + \makebox[\textwidth]{\normalsize + \shortstack[l]{\strut\websubject\\\@date}\hfill + \shortstack[c]{\webtitle\\\strut\@altTitle}\hfill + \shortstack[l]{\strut\eq@ExamName\\\webauthor}}% +} +\def\altTitle#1{\def\@altTitle{#1}} +\let\@altTitle\@empty +\def\maketitle +{% + \begingroup + \addtolength\textwidth{\oddsidemargin}% + \noindent\hspace*{-\oddsidemargin}% + \raisebox{.7in}[0pt][0pt]{\SubmitButton}% + \maketitledesign + \endgroup +} +\def\eqexcoverpage +{% + \begingroup + \eqexcoverpagedesign + \endgroup\newpage +} +\newcommand{\coverpagesubject}[1]{\def\coverpage@subject{#1}} +\let\coverpage@subject\@empty +\def\eqexamsubject{\ifx\coverpage@subject\@empty\websubject + \else\coverpage@subject\fi} +\newcommand{\coverpageUniversityFmt}[1]{% + \def\eqex@coverpageUniversityFmt{#1}} +\coverpageUniversityFmt{\bfseries\large} +\newcommand{\coverpageSubjectFmt}[1]{% + \def\eqex@coverpageSubjectFmt{#1}} +\coverpageSubjectFmt{\bfseries\large} +\newcommand{\coverpageTitleFmt}[1]{% + \def\eqex@coverpageTitleFmt{#1}} +\coverpageTitleFmt{\bfseries\large} +\newcommand{\eqexcoverpagedesign} +{% + \thispagestyle{empty} + \addtolength\textwidth{\oddsidemargin} + \vspace*{.1\textheight} + \noindent\hspace*{-\oddsidemargin}% + \makebox[\linewidth]{\parbox{\linewidth}% + {\eqex@coverpageUniversityFmt + \color{\webuniversity@color}% + \centering\webuniversity}} + \par\vspace{.1\textheight} + \noindent\hspace*{-\oddsidemargin}% + \makebox[\linewidth]{\parbox{\linewidth}% + {\eqex@coverpageSubjectFmt + \color{\websubject@color}% + \centering\eqexamsubject}} + \par\vspace{\bigskipamount} + \noindent\hspace*{-\oddsidemargin}% + \makebox[\linewidth]{\parbox{\linewidth}% + {\eqex@coverpageTitleFmt + \color{\webtitle@color}% + \centering\webtitle}} + \par\vspace{\stretch{1}} + \optionalpagematter + \par\vspace{\stretch{1}}\parindent0pt + \eq@ExamName\\[2ex]\eq@SID\\[2ex] + \ifx\use@email y\eq@Email\\[2ex]\fi + \textcolor{\webauthor@color}{\webauthor}, \@date\par\vfill +} +\AtBeginDocument{\eqex@coverpage} +\def\probvalue#1#2{% + \addtocounter{eqpointvalue}{#1}% + \marginpoints{#1}{#2}% + \mark{\theeqpointvalue\csname eqExam\endcsname\theeq@numparts}% +} +\def\eqleftmarginbox#1#2{\makebox[0pt][r]{% + \setlength\tabcolsep{0pt}% + \raisebox{-.5\height}[0pt][0pt]{\parbox{\marginparwidth}{% + \tabcolsep=0pt\relax + \begin{tabular}{|c|}\hline + \vrule height15pt width0pt\\\hline + \makebox[\marginparwidth]{% + \marginpointsboxtext{#1}{#2}}\\\hline + \end{tabular}% + }}% + \hspace*{\oddsidemargin}\hspace*{\marginparsep}}% +} +\providecommand{\ptsLabel}[1]{\def\eqptsLabel{#1}}\ptsLabel{pts} +\providecommand{\ptLabel}[1]{\def\eqptLabel{#1}}\ptLabel{pt} +\newcommand{\eachLabel}[1]{\def\eq@eachLabel{#1}}\eachLabel{ea.} +\newcommand{\pointsLabel}[1]{% + \def\eq@pointsLabel{#1}}\pointsLabel{points} +\newcommand{\pointLabel}[1]{% + \def\eq@pointLabel{#1}}\pointLabel{point} +\newcommand\leftmarginPtsTxt[1]{(\small$#1^{\text{% + \ifnum#1=1\relax\eqptLabel\else\eqptsLabel\fi}}$)} +\newcommand\leftmarginPtsEaTxt[1]{(\small$#1_{\text{% + \eq@eachLabel}}^{\text{\ifnum#1=1\relax + \eqptLabel\else\eqptsLabel\fi}}$)} +\def\marginpointtext#1#2{\ifnum#2=0\leftmarginPtsTxt{#1}\else + \leftmarginPtsEaTxt{#2}\fi +} +\def\eqleftmargin#1#2{\makebox[0pt][r]{\marginpointtext{#1}{#2}% + \hspace*{\oddsidemargin}\hspace*{\marginparsep}}% +} +\newcommand{\marginpointsboxtext}[2]{\small$#1\,\text{% + \ifnum#1=1\relax\eqptLabel\else\eqptsLabel\fi}$} +\def\@insertPointsBoxPDF +{ + \def\fieldName{pointsgiven.\curr@quiz.page\thepage.% + \theeqquestionnoi}% + \calcTextField[\F\FHidden\BC{}\Q1\textColor{1 0 0 rg}] + {\fieldName}{\marginparwidth}{15pt}% +} +\def\@insertTotalsBoxPDF +{ + \def\fieldName{pagetotals.\curr@quiz.page\thepage}% + \calcTextField[\F\FHidden\BC{}\Q1\textColor{1 0 0 rg} + \AA{\AACalculate{AFSimple_Calculate("SUM", + new Array("pointsgiven.\curr@quiz.page\thepage"));}}] + {\fieldName}{\marginparwidth}{15pt}% +} +\ifx\use@email y + \let\insertPointsBoxPDF=\@insertPointsBoxPDF + \let\insertTotalsBoxPDF=\@insertTotalsBoxPDF +\else + \let\insertPointsBoxPDF=\@empty + \let\insertTotalsBoxPDF=\@empty +\fi +\def\eqrightmarginbox#1#2{% + \makebox[0pt][l]{% + \setlength\tabcolsep{0pt}% + \hspace*{\textwidth}\hspace*{\marginparsep}% + \raisebox{-.5\height}[0pt][0pt]{% + \parbox{\marginparwidth}{% + \tabcolsep=0pt\relax + \begin{tabular}{|c|}\hline + \vrule height15pt width0pt\insertPointsBoxPDF\\\hline + \makebox[\marginparwidth]{% + \marginpointsboxtext{#1}{#2}}\\\hline + \end{tabular}% + }% + }\hfil + }% +} +\def\eqeomarginbox#1#2{% + \makebox[0pt][l]{% + \setlength\tabcolsep{0pt}% + \hspace*{\textwidth}\hspace*{\marginparsep}% + \raisebox{-.5\height}[0pt][0pt]{% + \parbox{\marginparwidth}{% + \tabcolsep=0pt\relax + \begin{tabular}{|c|}\hline + \vrule height15pt width0pt\insertTotalsBoxPDF\\\hline + \makebox[\marginparwidth]{% + \marginpointsboxtext{#1}{#2}}\\\hline + \end{tabular}% + }% + }\hfil + }% +} +\setbox\eq@pointbox=\hbox{% + \parbox{\marginparwidth}{% + \tabcolsep=0pt\relax + \begin{tabular}{|c|}\hline + \vrule height15pt width0pt\\\hline + \makebox[\marginparwidth]{% + \marginpointsboxtext{00}{0}}\\\hline + \end{tabular}% + }% +} +\setlength\eq@pointboxtotalheight{\dp\eq@pointbox+\ht\eq@pointbox} +\def\lastparttotaled{0} +\def\parsetotals#1\eqExam#2\end{\def\argi{#1}\def\argii{#2}} +\def\stripeqExam#1\eqExam{\def\argii{#1}} +\def\settotalsbox{% + \expandafter\parsetotals\botmark\eqExam\end + \ifx\argi\@empty\hfil + \else\ifx\argii\@empty\hfil + \else + \expandafter\stripeqExam\argii + \setcounter{eqpointsthispage}{\argi}% + \addtocounter{eqpointsthispage}{-\value{eqpointsofar}}% + \setcounter{eqpointsofar}{\argi}% + \xdef\lastparttotaled{\argii}% + \immediate\write\@auxout{\string\expandafter\string\gdef + \string\csname\space Page\thepage total\string\endcsname + {\theeqpointsthispage}}% + \totalsbox + \fi + \fi +} +\newcommand\totalsboxtext{\small$\theeqpointsthispage\,\text{% + \ifnum\theeqpointsthispage=1\relax + \eqptLabel\else\eqptsLabel\fi}$} +\def\totalsboxleft{% + \makebox[0pt][r]{\setlength\tabcolsep{0pt}% + \raisebox{-\height-\marginparsep}[0pt][0pt]{% + \parbox{\marginparwidth}{% + \begin{tabular}{|c|}\hline + \vrule height15pt width0pt\insertTotalsBoxPDF\\\hline + \parbox{\marginparwidth}{% + \strut\centering\totalsboxtext\strut}\\\hline + \end{tabular}% + }}\hspace*{\oddsidemargin}\hspace*{\marginparsep}% + \hspace*{\parindent}}\hfil +} +\def\totalsboxright +{% + \makebox[0pt][l]{\setlength\tabcolsep{0pt}% + \hspace*{\textwidth}\hspace*{\marginparsep}% + \raisebox{-\height-\marginparsep}[0pt][0pt]{% + \parbox{\marginparwidth}{% + \begin{tabular}{|c|}\hline + \vrule height15pt width0pt\insertTotalsBoxPDF\\\hline + \parbox{\marginparwidth}{% + \strut\centering\totalsboxtext\strut}\\\hline + \end{tabular}% + }% + }% + }\hfil +} +\AtBeginDocument{\mark{0\csname eqExam\endcsname0}} +\AtEndDocument{% + \immediate\write\@auxout{\string\expandafter\string\gdef + \string\csname\space NumberOfParts\string\endcsname + {\arabic{eq@numparts}}}% + \immediate\write\@auxout{\string\expandafter\string\gdef + \string\csname\space thePartNames\string\endcsname + {\the\partNames}}% + \clearpage\addtocounter{page}{-1}\writelastpage + \addtocounter{page}{1}% +} +\def\theGrandTotal{% + \begingroup + \count0=0\relax + \def\\##1{\advance\count0by\csname##1total\endcsname}% + \csname thePartNames\endcsname + \xdef\eqeGrandTotal{\the\count0 }% + \endgroup + \csname eqeGrandTotal\endcsname +} +\newcounter{markerCnt} +\def\placeMarkerHere#1{% + \immediate\write\@auxout{\string\expandafter\string\gdef + \string\csname\space#1SaveTotalHere\string\endcsname + {\theeqpointvalue}}% +} +\newcommand{\calcFromMarkers}[3][\@markerTotalFmt]{% + \@ifundefined{#2SaveTotalHere}{}% + {\@ifundefined{#3SaveTotalHere}{}{\setcounter{markerCnt}% + {\@nameuse{#2SaveTotalHere}-\@nameuse{#3SaveTotalHere}}% + \ifnum\value{markerCnt}<0\relax + \setcountertotalHereCnt{-\value{markerCnt}}\fi#1}}% +} +\newcommand{\markerTotalFmt}[1]{\def\@markerTotalFmt{#1}} +\markerTotalFmt{ (\themarkerCnt\space points)} +\def\placeAtxy#1#2#3{% + \par\nointerlineskip + \ifeq@nosolutions\ifx\eq@insertverticalspace y% + \ifvmode + \makebox[0pt][l]{\hspace*{-\parindent}\hspace*{#1}% + \raisebox{#2}[0pt][0pt]{#3}} + \fi + \fi + \fi +} +\newsavebox{\workareasb} +\newenvironment{workarea}[2][\linewidth] +{% + \edef\workareadepth{\if\currhideopt H0pt\else#2\fi}% + \begin{lrbox}{\workareasb}\setlength{\eqetmplengtha}{#1}% + \begin{minipage}[b][\workareadepth][t]{\eqetmplengtha}\vspace*{3pt}% +}% +{% + \end{minipage}\end{lrbox}% + \par\ifeq@nosolutions\ifx\eq@insertverticalspace y% + \vspace{-\baselineskip}\fi\fi%\nointerlineskip + \ifeq@nosolutions\ifx\eq@insertverticalspace y% + \if\currhideopt H\else + \noindent\strut\smash{\usebox{\workareasb}}% + \fi\fi\fi +} +\newcommand\panelgap{3pt} +\newsavebox{\eqpanelbox} +\def\panelwidth{\the\wd\eqpanelbox}\def\panelheight{\the\ht\eqpanelbox}% +\newcounter{panel@cnt} +\newwrite\panel@write +\let\usepanelwidth=\relax +\makeatletter +\newenvironment{panel}[2][l] +{% + \gdef\ss@Argi{#1}\gdef\ss@Argiii{#2}% #1 r or l #2 width of panel + \stepcounter{panel@cnt}% + \immediate\openout \panel@write panel\thepanel@cnt.cut + % need to manage the h, H, and global overrides. + \if\currhideopt H% + \immediate\write\panel@write{\vfill}% + \immediate\closeout\panel@write + \gdef\ss@Argii{0pt}% + \else + \if\currhideopt h\ifeq@solutionsafter\else + \ifeq@globalshowsolutions\else + \immediate\write\panel@write{\vfill}% + \immediate\closeout\panel@write + \gdef\ss@Argii{0pt}% + \fi\fi + \fi + \fi + \begingroup + \let\verbatim@out=\panel@write + \verbatimwrite +} +{% + \endverbatimwrite + \immediate\closeout\panel@write + \endgroup + \xdef\mp@Width{\ifeq@solutionsafter\noexpand\linewidth + \else\noexpand\linewidth-\ss@Argiii-\panelgap\fi}% +} +\long\def\eqe@IW#1{% + \ifeq@solutionsafter + \let\eq@next=\@empty + \else + \def\eq@next{\immediate\write\verbatim@out{#1}}% + \ifeq@nosolutions\else + \if\currhideopt H% + \gdef\ss@Argii{0pt}\let\eq@next=\@empty + \else + \if\currhideopt h% + \ifeq@globalshowsolutions\else + \gdef\ss@Argii{0pt}\let\eq@next=\@empty + \fi + \fi + \fi + \fi + \fi + \eq@next +} +\newenvironment{@ssSolution}[1][\ss@Argii]% +{% + \xdef\eqe@depth{\ifeq@nosolutions\ss@Argii\else + \ifeq@solutionsafter\ss@Argii\else0pt\fi\fi}% + \xdef\mp@Width{\ifeq@solutionsafter\noexpand\linewidth\else + \noexpand\linewidth-\ss@Argiii-\panelgap\fi}% + \if\ss@Argi l% + \ifeq@solutionsafter + \def\eqe@lPanel{\parbox[b][\eqe@depth][t]{\ss@Argiii} + {\input{panel\thepanel@cnt.cut}\vfill}\hfill}% + \def\eqe@rPanel{\@empty}% + \else + \def\eqe@lPanel{\string\parbox[b][\string\eqe@depth]% + {\ss@Argiii}% + {\string\input{panel\thepanel@cnt.cut}\vfill}\hfill^^J}% + \def\eqe@rPanel{\@empty}% + \fi + \else + \ifeq@solutionsafter + \def\eqe@lPanel{\@empty}% + \def\eqe@rPanel{\hfill\parbox[b][\eqe@depth][t]{\ss@Argiii} + {\hfill\input{panel\thepanel@cnt.cut}\vfill}}% + \else + \def\eqe@lPanel{\@empty}% + \def\eqe@rPanel{\hfill\string\parbox[b][\string\eqe@depth]% + {\ss@Argiii}% + {\endgraf\string\noindent\hfill% + \string\input{panel\thepanel@cnt.cut}\vfill}}% + \fi + \fi + \let\verbatim@out=\ex@solns + \par\ifeq@solutionsafter\smallskip\fi\noindent\minipage{\linewidth}% + \if\ss@Argi l\noindent\parbox[b][\eqe@depth][t]{\ss@Argiii}% + {\vfill}\hfill\fi + \minipage[b][\eqe@depth][t]{\mp@Width}% + {\lccode`C=`\%\lowercase{\eqe@IW{\def\string\panelgap{\panelgap}% + \edef\string\eqe@depth + {\ifeq@nosolutions\ss@Argii\else\ss@Argii\fi}C}}}% + {\lccode`C=`\%\lowercase{\eqe@IW{% + \string\strut\string\par\string\nobreak\string\noindent% + \string\hbox\space to\string\linewidth\bgroup^^J% + \eqe@lPanel\string\minipage[b][\string\eqe@depth][t]% + {\string\linewidth-\ss@Argiii-\panelgap}C + }}}% + \ifeq@solutionsafter + \noindent\strut\hbox to\linewidth\bgroup + \eqe@lPanel + \minipage[b][\eqe@depth][t]{\linewidth-\ss@Argiii-\panelgap}% + \def\solutionsafterSkip{}% + \fi + \@sssolution[#1]% +}{% + \eqe@IW{\noexpand\endminipage\eqe@rPanel\egroup}% + \ifeq@solutionsafter\endminipage\eqe@rPanel\egroup\fi + \end@sssolution + \endminipage\endminipage +} +\newenvironment{splitsolution}[1] % #1 depth +{% + \gdef\ss@Argii{#1}% + \let\@sssolution = \solution + \let\end@sssolution = \endsolution + \let\solution = \@ssSolution + \let\endsolution = \end@ssSolution + \par\noindent\ignorespaces +}{% + \ifeq@solutionsafter\strut\par\fi + \edef\eqe@workwidth{\if\ss@Argi l\noexpand\ss@Argiii + \else\noexpand\linewidth\fi}% + \edef\eqe@workfill{\if\ss@Argi l\else\hfill\fi}% + \begin{workarea}[\eqe@workwidth]{\eqe@depth}% + \eqe@workfill\input{panel\thepanel@cnt.cut}% + \end{workarea} + \strut\par +} +\renewcommand{\paragraph} + {\@startsection{paragraph}{4}{0pt}{12pt}{-3pt}{\bfseries}} +\newcommand{\defaultInstructions}[1]{\def\eq@default@Instructions{#1}} +\defaultInstructions{Instructions.} +\newenvironment{instructions}[1][\eq@default@Instructions] +{% + \leftskip-\oddsidemargin \rightskip-\evensidemargin + \def\eq@argi{#1}% + \paragraph*{\textcolor{\@instructionsColor}{#1}\normalcolor% + \ifx\eq@nosummarytotals y\else\ifx\eq@argi\@empty\else\ \fi + {\normalfont\summaryTotalsTxt}\ \fi}\hskip-\lastskip + \ifx\eq@nosummarytotals y\ifx\eq@argi\@empty\else\ \fi\fi + \ignorespaces +}{\par\vskip\medskipamount} +\newcommand\summaryPointTotal{\csname\thisexamlabel total\endcsname} +\newcommand\summaryTotalsTxt{($\summaryPointTotal\,\text{% + \@ifundefined{\thisexamlabel total}{\eq@pointsLabel}% + {\ifnum\summaryPointTotal=1\relax + \eq@pointLabel\else\eq@pointsLabel\fi}}$)} +\ifx\hyper@anchor\@undefined\else + \renewcommand\theHeqquestionnoi + {\curr@quiz.\theeqquestionnoi} + \renewcommand\theHquizno{% + \if\probstar*\curr@quiz.% + \theeqquestionnoi.part\alph{partno}.\arabic{quizno}% + \else + \curr@quiz.% + \theeqquestionnoi.\arabic{quizno}% + \fi + } +\fi +\newenvironment{eqComments}[1][\strut] +{% + \removelastskip\removelastskip + \vskip\medskipamount\leftskip-\oddsidemargin + \rightskip-\evensidemargin + \noindent\textbf{\textcolor{\@eqCommentsColor}{#1}}% +}{% + \vskip\medskipamount +} +\def\exambegdef +{% + \csname\thisexamlabel pagemark\endcsname + \expandafter + \ifx\csname\thisexamlabel pageno\endcsname\relax + \else + \expandafter + \ifx\csname pagenofirstprob\thisexamlabel\endcsname\relax + \else + \ifnum\csname\thisexamlabel pageno\endcsname + <\csname pagenofirstprob\thisexamlabel\endcsname + \else + \expandafter + \ifx\csname\thisexamlabel pagemark\endcsname\relax + \else + \ifnum\value{page}=% + \csname\thisexamlabel pageno\endcsname + \immediate\write\@auxout{% + \string\expandafter\string\gdef + \string\csname\space + \thisexamlabel pagemark\string\endcsname + {\string\newpage}}% + \fi + \fi + \fi + \fi + \fi + \setcounter{eqquestionnoi}{0}% + \setcounter{eqpointvalue}{0}% + \setcounter{eqpointsofar}{0}% + \setcounter{eqpointsthispage}{0}% + \setcounter{eq@count}{0}% + \stepcounter{eq@numparts}% + \immediate\write\@auxout{\string\expandafter\string\gdef + \string\csname\space\thisexamlabel pageno\string\endcsname + {\thepage}}% + \let\sq@priorhook=\@empty + \settowidth{\labelwidth}{\normalfont\bfseries00.\ }% +} +\def\examenddef +{% + \expandafter\ifx\csname NumberOfParts\endcsname\relax + \else + \ifnum\value{eq@numparts}<\NumberOfParts + \setcounter{eq@count}{\value{eqpointvalue}}% + \addtocounter{eq@count}{-\value{eqpointsofar}}% + \ifx\eq@parttotals y\relax + \@actionsAtPageBreak{\global\let\@spacetobreak1} + {\global\let\@spacetobreak0}% + \ifx\@spacetobreak0\relax + \bgroup\@tempdima=\pagetotal + \advance\@tempdima32pt\relax + \ifdim\@tempdima>\pagegoal\aftergroup\newpage + \else + \ifnum\arabic{eq@count}>0 + \ifx\@reportpoints1\else\@checkSpacing\fi + \raisebox{0pt}[0pt][0pt]{% + \hspace*{-\parindent}% + \textcolor{blue}{\eqeomarginbox + {\arabic{eq@count}}{0}}}% + \fi + \ifx\eqx@separationrule y\separationrule\fi + \fi\egroup + \fi + \else\ifx\eqx@separationrule y\separationrule\fi + \fi + \fi + \fi + \writetotalstoaux + \writelastpage +} +\def\@actionsAtPageBreak#1#2{% + \bgroup\@tempdima\pagegoal\advance\@tempdima-\pagetotal + \@tempdimb\@fvsizeskip\vsize + \ifdim\@tempdima < \@tempdimb #1\else #2\fi\egroup +} +\newcommand{\separationrule}{\makebox[\linewidth]% + {\centering\rule{.67\linewidth}{.4pt}}} +\def\setDefaultfvsizeskip#1{\def\default@fvsizeskip{#1}% + \def\@fvsizeskip{#1}} +\def\default@fvsizeskip{.3} +\edef\@fvsizeskip{\default@fvsizeskip} +\def\fvsizeskip#1{\def\@fvsizeskip{#1}} +\newenvironment{exam}[2][\@empty] +{% + \makeRoomForProb{\@fvsizeskip\vsize}{0}% + \xdef\@fvsizeskip{\default@fvsizeskip}% + \gdef\thisexamlabel{#2}\gdef\curr@quiz{#2}% + \edef\eq@tmp{\the\partNames}% + \global\partNames=\expandafter{\eq@tmp\\{#2}}% + \expandafter\ifx\csname NumberOfParts\endcsname\relax\else + \ifnum\csname NumberOfParts\endcsname=1\else + \ifx#1\@empty\writetoSolns{#2}\else\writetoSolns{#1}\fi\fi\fi + \exambegdef + \expandafter\shortquiz\sqstar[#2]% +}{% + \examenddef + \endshortquiz +} +\def\writetotalstoaux{% + \immediate\write\@auxout{\string\expandafter\string\gdef + \string\csname\space\thisexamlabel total\string\endcsname + {\theeqpointvalue}}% +} +\def\writelastpage{% + \immediate\write\@auxout{\string\expandafter\string\gdef + \string\csname\space eqExamLastPage\string\endcsname{\arabic{page}}}% +} +\def\exlabel{} +\def\sqlabel{} +\def\exsolafter{\textit{Solution}:} +\def\sqsolafter{\textit{Solution}:} +\def\exlabelformat{\textbf{\theeqquestionnoi.\ }} +\def\exlabelformatwp{\exlabelformat}% +\def\exsllabelformat + {\string\llap{\string\textbf{\theeqquestionnoi.\ }}} +\def\exsllabelformatwp{\string\llap{% + \string\textbf{\theeqquestionnoi.\ }}\eq@partsformat\ }% +\ifeq@solutionsafter + \def\exrtnlabelformat{} + \def\exrtnlabelformatwp{} + \def\eq@sqslrtnlabel{} +\else + \def\exrtnlabelformat{$\square$} + \def\exrtnlabelformatwp{$\square$} + \def\eq@sqslrtnlabel{$\square$} +\fi +\def\sqslrtnlabel{\eq@sqslrtnlabel} +\def\exsectitle{\normalsize\hspace* + {-\oddsidemargin}Solutions to \webtitle} +\def\exsecrunhead{Solutions to \websubject}% +\def\eq@sqslsectitle{} +\def\eq@sqslsecrunhead{} +\def\eq@sqsllabel{{\string\llap{\string\textbf{\theeqquestionnoi.\ }}}} +\def\eq@sqlabel{} +\let\include@quizsolutions=\relax +\let\solnhspace=\@empty +\newcommand{\fillin}[3][u]{% + \ifx#1u\let\@fillinFmt=\underbar + \else\ifx#1b\let\@fillinFmt=\relax + \else\let\@fillinFmt=\relax\fi\fi + \ifeq@proofing + \@fillinFmt{\makebox[#2]{% + \strut\hfil\bfseries\color{red}#3\hfil}}% + \else + \@fillinFmt{\makebox[#2]{\strut\hfil}}% + \@ifundefined{@quiz}{}{% + \ifx\eq@online y\relax + \ifeq@nosolutions + \ifeq@solutionsafter\else + \ifx\eq@insertverticalspace y\relax + \stepcounter{@cntfillin}% + \edef\fieldName{% + \if\probstar*eqexam.\curr@quiz.fillin.% + \theeqquestionnoi.part\alph{partno}.% + fi\the@cntfillin + \else + eqexam.\curr@quiz.fillin.% + \theeqquestionnoi.fi\the@cntfillin + \fi + }\makebox[0pt][r]{\textField[\BC{}]{% + \fieldName}{#2}{11bp}}% + \fi + \fi + \fi + \fi + }% + \fi\space\ignorespaces} +\newcommand\defaultTFwidth{30pt} +\newcommand\TF[2][\defaultTFwidth]{% + \def\eq@next{\fillin{#1}{#2}}% + \ifdim\eq@extralabelsep=0pt\relax\else + \if\probstar*\relax\if\exerwparts@cols x + \def\eq@next{\makebox[0pt][r]{% + \fillin{#1}{#2}}\ignorespaces}% + \fi\fi\fi +\eq@next} +\def\fillinWidth#1{% + \if\probstar* + \settowidth{\eq@tmplengthA}{\normalfont\ }% + \addtolength{\eq@tmplengthA}{#1}% + \edef\eq@extralabelsep{\the\eq@tmplengthA}% + \fi +} +\def\makeDoNum#1{\xdef\nDoNum{#1}% + \xdef\DoNum{\ifcase#1??\or one\or two\or three\or + four\or five\or six\or seven\or eight\or nine\or ten\fi}} +\def\makeOutOfNum#1{\xdef\nOutOfNum{#1}% + \xdef\OutOfNum{\ifcase#1??\or one\or two\or three\or + four\or five\or six\or seven\or eight\or nine\or ten\fi}} +\def\prob@Arg#1ea#2\end{\def\argi{#1}\def\argii{#2}} +\def\makeRoomForProb#1#2{% + \bgroup\@nobreakfalse\addpenalty{-500}% + \@tempdima \pagegoal \advance \@tempdima -\pagetotal + \ifdim \@tempdima < #1 \newpage\fi \egroup + \ifx1#2\ifnum\@reportpoints>1 \@checkSpacing\fi\fi +} +\def\@checkSpacing{\bgroup + \@tempdima = \lastPageTotal + \@tempdimb = \pagetotal + \ifdim\@tempdima < \@tempdimb + \advance\@tempdimb by-\@tempdima + \ifdim\@tempdimb < \eq@pointboxtotalheight + \@tempdima=\eq@pointboxtotalheight + \advance\@tempdima3pt\relax + \advance\@tempdima by-\@tempdimb + \vspace*{\@tempdima}% + \fi + \fi +\egroup} +\def\default@nbaselineskip{6} +\edef\@nbaselineskip{\default@nbaselineskip} +\def\nbaselineskip#1{\def\@nbaselineskip{#1}} +\newenvironment{problem}[1][]{% + \makeRoomForProb{\@nbaselineskip\baselineskip}{1}% + \xdef\@nbaselineskip{\default@nbaselineskip}% + \gdef\probstar{x}% + \let\afterlabelhskip=\@empty + \ifx\marginpoints\@empty + \else + \def\numpoints{#1}% + \ifx\numpoints\@empty + \let\marginpoints\@empty + \else + \def\marginparpriorhook{\noindent\probvalue{#1}{0}}% + \fi + \fi + \setcounter{eq@count}{\value{eqquestionnoi}}% + \addtocounter{eq@count}{1}% + \ifnum\value{eq@count}=1\relax + \immediate\write\@auxout{\string\expandafter\string\gdef\string + \csname\space pagenofirstprob\thisexamlabel\string\endcsname + {\thepage}}% + \fi + \proofingsymbol{\ding{52}}% + \begin{exercise}[eqquestionnoi]% +}{\end{exercise}% + \ifeqlocalversion\ifeqglobalversion + \xdef\eqe@tmp{\noexpand\forVersion{\eq@selectedVersion}}% + \aftergroup\eqe@tmp + \fi\fi + \global\eqlocalversionfalse +} +\newcommand\itemPTsTxt[1]{$#1\,\text{% + \ifnum#1=1\relax\eqptLabel\else\eqptsLabel\fi}$} +\newcommand{\itemPTsFormated}[1]{(#1)} +\def\PTs{\@ifstar{\@PTs{*}}{\@PTs{x}}} +\def\@PTs#1#2{% + \if\@reportpoints0\else + \addtocounter{eq@count}{#2}\if#1*\else + \itemPTsFormated{\itemPTsTxt{#2}}\fi + \fi +} +\let\auto=\relax +\def\isItD@{\@ifnextchar\Do{\let\yest@D@=y\y@st@Do} + {\let\yest@D@=n\@gobblet@end}} +\let\yest@D@=n +\def\y@st@Do\Do#1\end{\gdef\D@Num{#1}} +\def\@gobblet@end#1\end{} +\expandafter\def\csname problem*\endcsname{% + \@ifnextchar[{\pr@bl@m@star}{\pr@bl@m@star[\@empty]}} +\def\pr@bl@m@star[#1]{% + \@ifnextchar[{\pr@blem@star{#1}}{\pr@blem@star{#1}[\@empty]}} +\def\pr@blem@star#1[#2]{% + \makeRoomForProb{\@nbaselineskip\baselineskip}{1}% + \xdef\@nbaselineskip{\default@nbaselineskip}% + \proofingsymbol{\ding{52}}% + \gdef\probstar{*}% + \gdef\pr@b@secondarg{#2}% + \setcounter{eq@count}{0}% + \let\afterlabelhskip=\@empty + \global\let\probpointseach=\@empty + \ifx#1\auto\global\let\probpointseach\relax + \def\@next{\autocalcparts}% + \else + \ifx#2\@empty\else + \setcounter{eq@count}{\value{eqquestionnoi}}% + \addtocounter{eq@count}{1}% + \@ifundefined{nPartsThisProb\thisexamlabel.\theeq@count} + {\makeOutOfNum{0}\makeDoNum{0}}% + {% + \expandafter\makeOutOfNum{% + \csname nPartsThisProb\thisexamlabel.% + \theeq@count\endcsname}% + \expandafter\makeDoNum{% + \csname DoNumThisProb\thisexamlabel.% + \theeq@count\endcsname}% + }% + \fi + \def\@next{\manualcalcparts{#1}}% + \fi\@next + \begin{exercise}[eqquestionnoi]*}% +\expandafter\def\csname endproblem*\endcsname{% + \immediate\write\@auxout{\string\expandafter\string\gdef\string + \csname\space nPartsThisProb\thisexamlabel.\theeqquestionnoi + \string\endcsname{\arabic{partno}}}% + \ifx\probpointseach\@empty\else + \ifx\probpointseach\auto + \immediate\write\@auxout{% + \string\expandafter\string\gdef\string + \csname\space prob\thisexamlabel.\theeqquestionnoi + \string\endcsname{\theeq@count}}% + \else + \setcounter{eq@count}{\value{partno}}% + \ifx\pr@b@secondarg\@empty\else + \bgroup\toks0 =\expandafter{\pr@b@secondarg}% + \expandafter\isItD@\the\toks0 \end + \ifx\yest@D@ y + \immediate\write\@auxout{% + \string\expandafter\string\gdef\string + \csname\space DoNumThisProb\thisexamlabel.% + \theeqquestionnoi\string\endcsname{\D@Num}}% + \@tempcnta = \value{eq@count}% + \advance\@tempcnta -\D@Num + \global\advance\value{eq@count}-\@tempcnta + \fi + \egroup + \fi + \multiply\value{eq@count}\argi + \immediate\write\@auxout{% + \string\expandafter\string\gdef\string + \csname\space prob\thisexamlabel.\theeqquestionnoi + \string\endcsname{\theeq@count}}% + \fi\fi + \end{exercise}% + \ifeqlocalversion\ifeqglobalversion + \xdef\eqe@tmp{\noexpand\forVersion{\eq@selectedVersion}}% + \aftergroup\eqe@tmp + \fi\fi + \global\eqlocalversionfalse +} +\def\pushProblem{\xdef\nlastItem{\arabic{partno}}\end{parts}} +\def\popProblem{\begin{parts}\setcounter{partno}{\nlastItem}} +\def\lastPageTotal{0pt} +\def\marginparafterhook{\xdef\lastPageTotal{\the\pagetotal}} +\def\manualcalcparts#1{% + \expandafter\prob@Arg#1ea\end + \ifx\argii\@empty\def\numpoints{#1}% + \else + \gdef\probpointseach{x}% + \setcounter{eq@count}{\value{eqquestionnoi}}% + \addtocounter{eq@count}{1}% + \expandafter + \ifx\csname prob\thisexamlabel.\theeq@count\endcsname\relax + \def\numpoints{\argi}% + \else + \def\numpoints{\expandafter + \csname prob\thisexamlabel.\theeqquestionnoi\endcsname}% + \fi + \fi + \ifx\marginpoints\@empty + % no points for this problem specified + \else + \ifx\argi\@empty + \let\marginpoints\@empty + \else + \ifx\argii\@empty + \ifx\marginpoints\@empty\else + \def\marginparpriorhook{% + \noindent\probvalue{\numpoints}{0}% + }% + \fi + \else + \ifx\marginpoints\@empty\else + \def\marginparpriorhook{% + \noindent\probvalue{\numpoints}{\argi}% + }% + \fi + \fi + \fi + \fi + \ifnum\value{eq@count}=1\relax + \immediate\write\@auxout{\string\expandafter\string\gdef\string + \csname\space pagenofirstprob\thisexamlabel\string\endcsname + {\thepage}}% + \else + \goodbreak + \fi +} +\def\autocalcparts{% + \setcounter{eq@count}{\value{eqquestionnoi}}% + \addtocounter{eq@count}{1}% + \expandafter + \ifx\csname prob\thisexamlabel.\theeq@count\endcsname\relax + \def\numpoints{0}% assume zero points until we get the total + \else + \edef\numpoints{\expandafter + \csname prob\thisexamlabel.\theeq@count\endcsname}% + \fi + \ifx\marginpoints\@empty\else + \def\marginparpriorhook{\noindent\probvalue{\numpoints}{0}}% + \fi + \setcounter{eq@count}{0}% +} +\newcommand{\forproblem}[1]{\setcounter{eqquestionnoi}{#1 - 1}} +\newcommand{\foritem}[1]{% + \setcounter{partno}{0}% + \lowercase{\def\eq@selectedItem{#1}}% + \let\eq@initLoop=0 + \loop + \stepcounter{partno}% + \expandafter\if\alph{partno}\eq@selectedItem + \let\eq@initLoop=1 + \fi + \if\eq@initLoop0\repeat + \addtocounter{partno}{-1}% + \item +} +\newcommand\aNewPage{\ifanswerkey\newpage\fi} +\newcommand\qNewPage{\ifanswerkey\else\newpage\fi} +\newcounter{backofpage} +\newcommand\bopText{on the back of page~\boPage} +\newcommand\bopCoverPageText{\space(the cover page)} +\newcommand\OnBackOfPage[1][\bopText]{% + \refstepcounter{backofpage}\label{bop\thebackofpage} + \begingroup + \expandafter\ifx\csname r@bop\thebackofpage\endcsname\relax + \def\boPage{??}% + \else + \edef\temp{\csname r@bop\thebackofpage\endcsname}% + \ifx\hyper@anchor\@undefined + \edef\boPage{\expandafter\@secondoftwo\temp}% + \else + \edef\boPage{\expandafter\@secondoffive\temp}% + \fi + \c@eq@count\boPage + \advance\c@eq@count-1\relax + \edef\boPage + {% + \ifx\eqex@coverpage\relax + \expandafter\ifnum\value{eq@count}=0\relax + 1% + \else + {\theeq@count}% + \fi + \else + \ifnum\value{eq@count}=1\relax + {\theeq@count}\bopCoverPageText + \else + {\theeq@count}% + \fi + \fi + }% + \fi + #1% + \endgroup +} +\pagestyle{eqExamheadings} +\IfFileExists{xkeyval}{% + \if\eq@usexkeys y\RequirePackage{xkeyval}\else + \endinput\fi}{\endinput} +\define@boolkey{eqFillin}{underline}[true]{} +\define@key{eqFillin}{u}[]{\KV@eqFillin@underlinetrue} +\define@key{eqFillin}{b}[]{\KV@eqFillin@underlinefalse} +\define@boolkey{eqFillin}{boxed}[true]{} +\define@key{eqFillin}{boxpretext}[]{\def\eq@fillintext{#1}} +\let\eq@fillintext\@empty +\define@choicekey+{eqFillin}{boxsize}{tiny,scriptsize,footnotesize,% + small,normalsize,large,Large,LARGE,huge,Huge}[normalsize]{% + \def\eq@eqFillin@boxsize{\text{\csname#1\endcsname\strut}}% +}{\PackageWarning{eqexam}{Bad choice for boxsize, permissible values + are tiny, scriptsize, footnotesize, small, normalsize, + large, Large, LARGE, huge and Huge. Try again}} +\def\eq@eqFillin@boxsize{\text{\normalsize\strut}} +\define@key{eqFillin}{color}[red]{\def\eq@fillin@color{#1}} +\define@choicekey+{eqFillin}{align}{l,r,c}[c]{% + \def\eq@eqFillin@align{#1}}{% + \PackageWarning{eqexam}{Bad choice for align, permissible values + are l, r, and c. Try again}} +\define@key{eqFillin}{format}[\bfseries]{\def\eq@fillin@format{#1}} +\renewcommand{\fillin}[3][]{\begingroup% + \setkeys{eqFillin}{boxsize,underline=false,boxed=false,% + boxpretext,color,align,format}% + \protected@edef\eq@temp@exp{\noexpand\setkeys{eqFillin}{#1}}% + \eq@temp@exp + \ifKV@eqFillin@underline\let\@fillinFmt\underbar + \else\let\@fillinFmt\relax\fi + \ifeq@proofing + \ifKV@eqFillin@boxed + \ensuremath{\boxed{\eq@eqFillin@boxsize\eq@fillintext + \@fillinFmt{\makebox[#2][\eq@eqFillin@align]{% + \strut\eq@fillin@format\color{\eq@fillin@color}% + \ensuremath{#3}}}}}% + \else + \ifmmode\let\@eqmath\ensuremath\else\let\@eqmath\relax\fi + \@fillinFmt{\makebox[#2][\eq@eqFillin@align]{% + \strut\eq@fillin@format\color{\eq@fillin@color}% + \@eqmath{#3}}}% + \fi + \else + \ifKV@eqFillin@boxed + \ensuremath{\boxed{\eq@eqFillin@boxsize\eq@fillintext + \@fillinFmt{\makebox[#2]{\strut\hfil}}}}% + \else + \@fillinFmt{\makebox[#2]{\strut\hfil}}% + \fi + \@ifundefined{@quiz}{}{% + \ifx\eq@online y\relax + \ifeq@nosolutions + \ifeq@solutionsafter\else + \ifx\eq@insertverticalspace y\relax + \stepcounter{@cntfillin}% + \edef\fieldName{% + \if\probstar*eqexam.\curr@quiz.fillin.% + \theeqquestionnoi.part\alph{partno}.% + fi\the@cntfillin + \else + eqexam.\curr@quiz.fillin.% + \theeqquestionnoi.fi\the@cntfillin + \fi + }\makebox[0pt][r]{\textField[\BC{}]{% + \fieldName}{#2}{11bp}}% + \fi + \fi + \fi + \fi + }% + \fi\endgroup\space\ignorespaces} +\renewcommand\TF[2][\defaultTFwidth]{% + \def\eq@next{\fillin[underline]{#1}{#2}}% + \ifdim\eq@extralabelsep=0pt\relax\else + \if\probstar*\relax\if\exerwparts@cols x + \def\eq@next{\makebox[0pt][r]{% + \fillin[underline]{#1}{#2}}\ignorespaces}% + \fi\fi\fi +\eq@next} +\endinput +%% +%% End of file `eqexam.sty'. -- cgit v1.2.3