summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/acrotex/exerquiz.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/acrotex/exerquiz.dtx')
-rw-r--r--macros/latex/contrib/acrotex/exerquiz.dtx517
1 files changed, 296 insertions, 221 deletions
diff --git a/macros/latex/contrib/acrotex/exerquiz.dtx b/macros/latex/contrib/acrotex/exerquiz.dtx
index 1b65b91b18..7a7a0fdb5d 100644
--- a/macros/latex/contrib/acrotex/exerquiz.dtx
+++ b/macros/latex/contrib/acrotex/exerquiz.dtx
@@ -22,7 +22,7 @@
%<randomize>\ProvidesFile{aebrandom.def}
%<sumrytbls>\ProvidesFile{aebsumrytbls.def}
%<template>\ProvidesFile{template.def}
-%<package|driver|aebjs|eqexam|randomize|sumrytbls|template> [2021/02/21 v8.6.5 %
+%<package|driver|aebjs|eqexam|randomize|sumrytbls|template> [2021/04/24 v8.7 %
%<package> Exerquiz: Exercises and Quizzes for LaTeX/PDF package (dps)]
%<driver> Exerquiz documentation driver file (dps)]
%<aebjs> Exerquiz document level JavaScript (dps)]
@@ -56,8 +56,9 @@
\def\nmpsep#1{\hskip-\marginparsep\texttt{#1}}
\def\visispace{\symbol{32}}
\def\ameta#1{\ensuremath{\langle\textit{\texttt{#1}}\rangle}}
-\def\meta#1{\textsl{\texttt{#1}}}
+\def\meta#1{\textit{\texttt{#1}}}
\def\SUB#1{\ensuremath{{}_{\mbox{\scriptsize\ttfamily#1}}}}
+\def\GT{\string>}
\pdfstringdefDisableCommands{\let\\\textbackslash}
\OnlyDescription % comment out for implementation details
\EnableCrossrefs
@@ -105,7 +106,7 @@
% \changes{v8.0}{2017/08/08}{Introduce multi-letter variables and alternate appearances. Changes
% made are marked by `\texttt{dps17}' throughout the DTX.}
% \changes{v7.7k}{2016/04/18}{Minor bug fixes, improved driver recognition}
-% \changes{v7.7j}{2016/04/05}{Change in eforms to 2016/04/05 v2.8f}
+% \changes{v7.7j}{2016/04/05}{Change in \string\pkg{eforms} to 2016/04/05 v2.8f}
%
% \section{Introduction}
%
@@ -123,7 +124,7 @@
\usepackage{keyval}
% \end{macrocode}
% Some early required packages.
-%\changes{v6.4t}{2012/06/18}{Added ifpdf as a required package}
+%\changes{v6.4t}{2012/06/18}{Added \string\pkg{ifpdf} as a required package}
%\changes{v8.1a}{2017/09/03}{Added check for luatex}
% \begin{macrocode}
\RequirePackage{ifpdf}[2006/02/20]
@@ -145,8 +146,8 @@
% Pass the \opt{monochrome} option to the color package
%\changes{v6.06a}{2007/04/09}
%{
-% Added the \texttt{forcolorpaper} option for those using
-% \textsf{exerquiz} without \textsf{web}.
+% Added the \string\texttt{forcolorpaper} option for those using
+% \string\textsf{exerquiz} without \string\textsf{web}.
%}
% \begin{macrocode}
\DeclareOption{forpaper}{%
@@ -206,7 +207,7 @@
% \end{macrocode}
% \leavevmode\IndexOpt{solutionsonly}^^A
% Here is a highly specialized option, put in at the request of a former friend.
-%\changes{v6.2f}{2007/12/21}{Added a solutionsonly option}
+%\changes{v6.2f}{2007/12/21}{Added a \string\opt{solutionsonly} option}
% \begin{macrocode}
\DeclareOption{solutionsonly}{\solutionsonlytrue\answerkeytrue
\therearesolutionstrue\AtEndOfPackage{\let\exerSolnsHeadnToc\relax}}
@@ -251,7 +252,7 @@
% \textsf{eqexam}, but can be used in \textsf{exerquiz}. The switch
% \cs{ifvspacewithsolns} is defined in \textsf{eqexam}, and we only
% define it here if \textsf{eqexam} is not loaded.
-% \changes{v6.3x}{2011/04/05}{Added \texttt{vspacewithsolns}}
+% \changes{v6.3x}{2011/04/05}{Added \string\opt{vspacewithsolns}}
% \begin{macrocode}
\@ifundefined{ifvspacewithsolns}{%
\DeclareOption{vspacewithsolns}{\vspacewithsolnstrue}
@@ -328,7 +329,17 @@
% \begin{macrocode}
\newif\ifwithinMCFI\withinMCFIfalse
% \end{macrocode}
-%
+% The \IndexOpt{userbmintrvl}\opt{userbmintrvl} option defines \cs{rbmIntrvl} command, which
+% is a special \cs{RespBoxMath} command were some of the parameters are set by an
+% interval. Refer to Section~\ref{ss:rbmi} for details.
+% \changes{v8.7}{2021/04/24}{Added the option \string\opt{userbmintrvl}}
+% \begin{macrocode}
+\DeclareOption{userbmintrvl}{%
+ \def\inputRBMICode{\InputIfFileExists{rbmintrvl.def}
+ {\PackageInfo{exerquiz}{Inputting rbmintrvl.def}}%
+ {cannot find rbmintrvl.def}}}
+\let\inputRBMICode\relax
+% \end{macrocode}
% \subsection{Driver Options}
% The \textsf{web} package passes these driver options to \textsf{exerquiz}.
% These options are needed is \textsf{exerquiz} is used without
@@ -409,7 +420,7 @@
% Passes the unicode option to \textsf{hyperref}.
% \changes{v6.3}{2008/03/19}
% {
-% Added the \texttt{unicode} option, which is passed to hyperref.
+% Added the \string\opt{unicode} option, which is passed to \string\pkg{hyperref}.
% }
% \begin{macrocode}
\DeclareOption{unicode}{\PassOptionsToPackage{unicode}{hyperref}}
@@ -419,7 +430,7 @@
% the key-value pairs \textsl{\'{a} la xkeyval} can be used.
% \changes{v6.3}{2008/03/19}
% {
-% Added the \texttt{useui} option, which is passed to eforms.
+% Added the \string\opt{useui} option, which is passed to eforms.
% }
% \begin{macrocode}
\DeclareOption{useui}{\PassOptionsToPackage{useui}{eforms}}
@@ -617,7 +628,7 @@
\@ifundefined{if@eqalignfilllinestoleft}
{\newif\if@eqalignfilllinestoleft\@eqalignfilllinestoleftfalse}{}
% \end{macrocode}
-% \changes{v6.3z}{2011/04/28}{Created a switch \cs{ifkeepdeclaredvspacing},
+% \changes{v6.3z}{2011/04/28}{Created a switch \string\cs{ifkeepdeclaredvspacing},
% used primarily by \textsf{eqexam}}
% (4/28/11) A switch to control whether the declared vertical space
% for the \texttt{solution} environment is preserved during the \texttt{answerkey}
@@ -761,9 +772,9 @@
% so we need to load in the AcroForm Dictionary---unless the
% \texttt{dviwindo} (\cmd{\eq@noformstrue}) option is requested.
%\changes{v6.3y}{2011/04/23}{%
-% As per Heiko's suggestion, I've change the \texttt{Form} environment
+% As per Heiko's suggestion, I've change the \string\env{Form} environment
% no longer creates a grouping. This was causing problems with
-% the \textsf{atveryend} package.
+% the \string\pkg{atveryend} package.
%}
% \begin{macrocode}
\AtBeginDocument{\ifeq@noforms\else\Form\fi}
@@ -810,7 +821,7 @@
\ProcessOptions
% \end{macrocode}
% Input required packages.
-% \changes{v7.03}{2015/03/02}{Added the \texttt{array} package, mostly
+% \changes{v7.03}{2015/03/02}{Added the \string\pkg{array} package, mostly
% for use in the tabular setup of parts in tabular mode.}
% \begin{macrocode}
\RequirePackage{array}
@@ -866,7 +877,7 @@
{\def\fleqnOn{\@fleqntrue}\def\fleqnOff{\@fleqnfalse}}
% \end{macrocode}
% \changes{v7.7o}{2016/07/08}{Added Boolean \string\cs{if@inclkey} in support of the
-% \string\textsf{eq2db} package}
+% \string\pkg{eq2db} package}
% \begin{macrocode}
\@ifundefined{if@inclkey}{\newif\if@inclkey\@inclkeytrue}{}
%</package>
@@ -965,9 +976,9 @@
% not change the default value.
%\changes{v6.05g}{2007/01/28}
%{
-% Added to commands for use in exerquiz or in \textsf{eqexam}. They are
-% \cs{renameSolnAfterTo} for conveniently changing the solution
-% after label, and \cs{resetSolnAfterToDefault} for resetting
+% Added to commands for use in exerquiz or in \string\pkg{eqexam}. They are
+% \string\cs{renameSolnAfterTo} for conveniently changing the solution
+% after label, and \string\cs{resetSolnAfterToDefault} for resetting
% back to the default.
%}
% \begin{macrocode}
@@ -1401,8 +1412,9 @@
% use of \cs{count0}/\cs{count\cs{z@}}, possibly not used within a group. As a fix,
% replaced this usage with the counter \cs{eqtmpcnta}.
% \changes{v8.5.7}{2020/01/01}{added public counter \string\cs{eqtmpcnta}}
-% \changes{v8.5.8}{2020/01/01}{Replaced \string\cs{count\cs{z@}} and \cs{count0} with \string\cs{eqtmpcnta},
-% this fixed the page number leakage problem}
+% \changes{v8.5.8}{2020/01/01}{Replaced \string\cs{count\string\cs{z@}} and
+% \string\cs{count0} with \string\cs{eqtmpcnta}, this fixed the page number
+% leakage problem}
% \begin{macrocode}
\newcount\eqtmpcnta
%</package|eqexam>
@@ -1571,7 +1583,7 @@
\newcommand\belowexsolnskip{\protect\medskip}
%\let\eqafterexersolnskip\belowexsolnskip
% \end{macrocode}
-% \changes{v7.4}{2015/03/23}{added \cmd\removelastparskip}
+% \changes{v7.4}{2015/03/23}{added \string\cs{removelastparskip}}
% \DescribeMacro\removelastparskip removes last \cmd\parskip, as needed.
% \begin{macrocode}
\def\removelastparskip{\ifdim\parskip>0pt\vskip-\parskip\fi}
@@ -1585,8 +1597,8 @@
% has been used
% \changes{v6.05a}{2006/05/08}
% {
-% Changed \cs{nolinkcolor} into a text fill-in. Now, the command \cs{nolinkcolor}
-% fills in \cs{@nolinkcolor}, which holds the named color.
+% Changed \string\cs{nolinkcolor} into a text fill-in. Now, the command \string\cs{nolinkcolor}
+% fills in \string\cs{@nolinkcolor}, which holds the named color.
% }
% \begin{macrocode}
\newcommand{\nolinkcolor}[1]{\def\@nolinkcolor{#1}}
@@ -1922,7 +1934,7 @@
% \end{macrocode}
% Inform the system that the definition of \cs{eqterminex} is changing. This to prevent
% writing the same line multiple times.
-% \changes{v8.2.8}{2018/12/13}{write \cs{declareterminex} only if not solutionsafter}
+% \changes{v8.2.8}{2018/12/13}{write \string\cs{declareterminex} only if not solutionsafter}
% \begin{macrocode}
\global\terminexchangedtrue % dps cq
\ifeq@solutionsafter\else
@@ -1939,7 +1951,7 @@
% \end{macrocode}
% \cs{restoreNormalSolns}\DescribeMacro{\restoreNormalSolns} restores \cs{eqterminex} to its
% default definition. It is place between exercises.
-% \changes{v8.2.8}{2018/12/13}{write \cs{declareterminex} only if not solutionsafter}
+% \changes{v8.2.8}{2018/12/13}{write \string\cs{declareterminex} only if not \string\opt{solutionsafter}}
% \begin{macrocode}
\newcommand\restoreNormalSolns{\ifeq@solutionsafter\else
\writeT@ExSolns{\protect\decleqterminex{\protect
@@ -2031,7 +2043,7 @@
% \begin{macrocode}
\newif\ifeq@exerciseheading \eq@exerciseheadingtrue
% \end{macrocode}
-% \changes{v6.7q}{2013/12/15}{Added this hook for use by \textsf{contsolns.dtx}}
+% \changes{v6.7q}{2013/12/15}{Added this hook for use by \string\textsf{contsolns.dtx}}
% \changes{v8.5.10}{2020/03/14}{Added \string\cs{priorexlabelheader} to support \string\pkg{eqexam}}
% \begin{macrocode}
\let\prior@exerSolnHeaderHook\@empty
@@ -2062,7 +2074,7 @@
% set up to have two required arguments, usually both empty. The arguments are
% used for filtering. The first might be a number, so we can filter out even numbered
% exercises from odd ones. The second one is a keyword, we can filter by keyword.
-%\changes{v6.7}{2013/04/07}{Changing \cs{eqEXt} so that it has two
+%\changes{v6.7}{2013/04/07}{Changing \string\cs{eqEXt} so that it has two
%required arguments}
% \begin{macrocode}
\let\eqEXt\@gobbletwo
@@ -2085,7 +2097,7 @@
%!quad...
%\ReturnTo{qex.1}{\hbox {$\square $}}\endeqEXt\par\medskip
%\end{Verbatim}
-% \changes{v6.7a}{2013/05/03}{Change name of \cs{eq@writeexheader} to \cs{eqExerSolnHeader}}
+% \changes{v6.7a}{2013/05/03}{Change name of \string\cs{eq@writeexheader} to \string\cs{eqExerSolnHeader}}
% \begin{macrocode}
\let\eqExerSolnHeader\@empty
% \end{macrocode}
@@ -2094,7 +2106,7 @@
% \begin{macrocode}
\let\solutionparshape\@empty
% \end{macrocode}
-%\changes{v7.2}{2015/03/22}{added \cs{setPrbSolnAftrIndent}}
+%\changes{v7.2}{2015/03/22}{added \string\cs{setPrbSolnAftrIndent}}
% \DescribeMacro{\setPrbSolnAftrIndent}\cmd{\setPrbSolnAftrIndent} sets the amount of indent
% for the statement of problem and the solution-after solution. The command saves its argument
% in \cs{eq@pslnaindnt} (default \texttt{0pt}) and sets the hook
@@ -2108,7 +2120,7 @@
\edef\eq@pslnaindnt{#1}\edef\eq@setPrbSolnAftrIndnt{\expandafter
\noexpand\expandafter\parindent#1\noexpand\relax}\fi}
% \end{macrocode}
-%\changes{v7.2}{2015/03/22}{added \cs{restorejustify}}
+%\changes{v7.2}{2015/03/22}{added \string\cs{restorejustify}}
%The command \DescribeMacro\restorejustify\cmd{\restorejustify} is designed
%for use in the \texttt{solution} environment of an \cs{item} within the
%\texttt{parts} environment in \texttt{tabular} mode. By default,
@@ -2193,7 +2205,7 @@
\def\eqterminexDEF{\relax\ignorespaces}
\decleqterminex{\eqterminexDEF}
% \end{macrocode}
-%\changes{v6.7}{2013/04/07}{Inserted another argument into \cs{eqEXt}}
+%\changes{v6.7}{2013/04/07}{Inserted another argument into \string\cs{eqEXt}}
% (2013/04/07) Added another argument into \cs{eqEXt}, used for filtering.\par\medskip
% \noindent
% (2018/02/13) When solutions are written to the SOL file, they are not normally in a group.
@@ -2220,7 +2232,7 @@
\immediate\write\verbatim@out{\eqExerSolnHeaderSngl}%
\set@typeset@protect\fi\fi}
% \end{macrocode}
-%\changes{v6.7}{2013/04/07}{Inserted another argument into \cs{eqEXt}}
+%\changes{v6.7}{2013/04/07}{Inserted another argument into \string\cs{eqEXt}}
% Added another argument into \cs{eqEXt}, used for filtering.
% \begin{macrocode}
\def\eqExerSolnHeaderList{%
@@ -2258,7 +2270,7 @@
% \cs{noSolnOpt} turns off the check for the option argument
% of the \texttt{solution} environment for the \texttt{exercise}
% environment. Designed for use with \textsf{eqexam}.
-% \changes{v6.4v}{2012/07/27}{Added \cs{ckSolnOpt} and \cs{noSolnOpt}
+% \changes{v6.4v}{2012/07/27}{Added \string\cs{ckSolnOpt} and \string\cs{noSolnOpt}
% to switch on and off checking for the optional vertical space in the
% \texttt{solution} environment.}
% \begin{macrocode}
@@ -2349,7 +2361,7 @@
}\expandafter\leavevspace
\fi}
% \end{macrocode}
-% \changes{v6.8g}{2014/04/08}{Added key-val here for \textsf{eqexam}.}
+% \changes{v6.8g}{2014/04/08}{Added key-val here for \string\pkg{eqexam}.}
% New option for the \texttt{solution} environment, \IndexKey{nLines}\texttt{nLines}.
% \begin{macrocode}
\define@key{soln@keys}{nLines}[]{\def\soln@keys@nLines{#1}}
@@ -2393,7 +2405,7 @@
\restoreNormalSolns\fi\fi % dps cq
\global\cqIsActivefalse
% \end{macrocode}
-% \changes{v6.3z}{2011/04/28}{Added definition of \cs{sameVspace} for the cases
+% \changes{v6.3z}{2011/04/28}{Added definition of \string\cs{sameVspace} for the cases
% where there is no vertical space specified.}
% Is the argument \cs{null}? If yes, same as \texttt{0pt}.
% \begin{macrocode}
@@ -2401,7 +2413,7 @@
\ifx\eq@argi\@empty\gdef\sameVspace{0pt}\else
\ifx\eq@argi\eq@null\gdef\sameVspace{0pt}\else
% \end{macrocode}
-% \changes{v6.8g}{2014/04/08}{Added key-val here for \textsf{eqexam}.}
+% \changes{v6.8g}{2014/04/08}{Added key-val here for \string\pkg{eqexam}.}
% Now, if the optional argument is non-null, we must discern the argument:
% is it a vertical space or a key-value?
% \begin{macrocode}
@@ -2466,8 +2478,8 @@
}
% \end{macrocode}
%\changes{v6.4b}{2011/06/30}{%
-% Save the definitions of \cs{comment} and \cs{endcomment}. For some reason,
-% yet to be determined, there are problems when using the \texttt{fortextbook}
+% Save the definitions of \string\cs{comment} and \string\cs{endcomment}. For some reason,
+% yet to be determined, there are problems when using the \string\opt{fortextbook}
% option when hiding solutions.
%}
%\changes{v8.2.9}{2019/02/11}{\string\cs{eqSavedComment}\string\cs{dlcomment}, \string\cs{dlcomment}\space
@@ -2476,7 +2488,7 @@
\let\eqSavedComment\dlcomment
\let\endeqSavedComment\enddlcomment
% \end{macrocode}
-%\changes{v7.4}{2015/03/23}{added \cs{setTabulrSolnEnv}}
+%\changes{v7.4}{2015/03/23}{added \string\cs{setTabulrSolnEnv}}
% \begin{macrocode}
\def\setTabulrSolnEnv{%
\@ifundefined{@listii@SAVE}{\global\let\@listii@SAVE\@listii}{}%
@@ -2673,7 +2685,7 @@
% the \texttt{flextended} option from \textsf{eqexam}. See the placement
% of this command below its default definition of \cs{relax}.
% \changes{v8.1i}{2018/01/20}{Added \string\cs{kdvsp@Restore} to support
-% the \texttt{flextended} option from \string\textsf{eqexam}}
+% the \string\opt{flextended} option from \string\pkg{eqexam}}
% \begin{macrocode}
\let\kdvsp@Restore\relax
\def\eq@clearMrkCpy{\if@targetforextr
@@ -2708,7 +2720,7 @@
% to preserve the vertical space declared by the \textsf{solution} environment when
% \cs{ifeq@solutionsafter} is true.
% \changes{v6.3z}{2011/04/28}{if \string\cs{ifkeepdeclaredvspacing} is true, we attempt
-% to preserve the vertical space declared by the \textsf{solution} environment when
+% to preserve the vertical space declared by the \string\env{solution} environment when
% \string\cs{ifeq@solutionsafter} is true.}
% \begin{macrocode}
\ifx\minVspacet@bs\@empty
@@ -2720,10 +2732,10 @@
\@tempdima\pagetotal
\advance\@tempdima-\eq@startSoln
% \end{macrocode}
-% \changes{v6.4w}{2012/26/27}{Added \cs{relax} following the assignment.}
+% \changes{v6.4w}{2012/26/27}{Added \string\cs{relax} following the assignment.}
% {\TeX} was looking ahead looking for the rest of the dimension, this caused
% problems because later code was expanded when it should not have been. Inserted
-% \cs{relax}, \verb~\@tempdimb\sameVspace\relax~.
+% \cs{relax}, |\@tempdimb\sameVspace\relax|.
% \begin{macrocode}
\@tempdimb\sameVspace\relax
% \end{macrocode}
@@ -2777,8 +2789,8 @@
% \cs{endexercise}.
%\changes{v6.07}{2007/05/05}
%{
-% Created the \texttt{exercise*} environment, this is equivalent to the \texttt{*} option of the
-% \texttt{exercise} environment. You can use either version, but now, \texttt{exercise*} is preferred.
+% Created the \string\texttt{exercise*} environment, this is equivalent to the \string\texttt{*} option of the
+% \string\env{exercise} environment. You can use either version, but now, \string\env{exercise*} is preferred.
%}
% \begin{macrocode}
\let\eq@exerstarEnv\relax
@@ -2857,8 +2869,8 @@
% \begin{macro}{\setPartsWidth}
% Convenience macro to set \cs{part@indent}.
%\changes{v6.4h}{2011/07/28}{%
-% Added \cs{setPartsWidth} to set \cs{part@indent}. Also
-% defined \cs{eqe@prtsepPrb}.
+% Added \string\cs{setPartsWidth} to set \string\cs{part@indent}. Also
+% defined \string\cs{eqe@prtsepPrb}.
%}
% \begin{macrocode}
\newcommand{\setPartsWidth}[1]{\def\parts@indent{\normalfont#1}%
@@ -3052,11 +3064,11 @@
% Now for the tabular style of multi-part exercise, the argument
% \#1 is the number of columns requested.\medskip
%
-% \noindent(2017/02/09) Added \pkg{xkeyval} to optional argument of \texttt{parts}. Syntax is now
+% \noindent(2017/02/09) Added \pkg{xkeyval} to optional argument of \env{parts}. Syntax is now
%\begin{verbatim}
% \begin{parts}[<num>|nCols=<num>,minVspace=<length>]
%\end{verbatim}
-% \changes{v7.8e}{2017/02/09}{Added xkeyval to optional argument of \string\texttt{parts}}
+% \changes{v7.8e}{2017/02/09}{Added xkeyval to optional argument of \string\env{parts}}
% \begin{macrocode}
\define@key{tabp@rts}{nCols}{\def\exerwparts@cols{#1}}
\define@key{tabp@rts}{minVspace}{\def\minVspacet@bs{#1}}
@@ -3227,9 +3239,9 @@
\noindent\normalbaselines\kern0pt
\prior@parts@hook\abovepartshook
% \end{macrocode}
-%\changes{v7.03}{2015/03/02}{Added \texttt{>\{\cs{strut}\}}, this gives
+%\changes{v7.03}{2015/03/02}{Added \string\texttt{\string\GT{\string\cs{strut}}}, this gives
% better control over vertical spacing.}%
-% \changes{v7.4}{2015/03/23}{inserted \cmd\setTabulrSolnEnv}%
+% \changes{v7.4}{2015/03/23}{inserted \string\cs{setTabulrSolnEnv}}%
% \begin{macrocode}
\tablrIndent\tabular[t]{@{}*{\exerwparts@cols}{>{\setTabulrSolnEnv
\parskip\eqeques@parsep\relax
@@ -3239,7 +3251,7 @@
\global\let\@listii@SAVE\relax}%
\post@parts@hook\belowpartshook
% \end{macrocode}
-% \changes{v7.4}{2015/03/23}{added an adjustment to the command \cs{endexercise@parts@tabular}}
+% \changes{v7.4}{2015/03/23}{added an adjustment to the command \string\cs{endexercise@parts@tabular}}
% A vertical space adjustment\par\medskip\noindent
% (201/05/09) There is a problem of communicating the totals through
% the \cs{mark} command (use in \textsf{eqexam}). In \textsf{eqexam}
@@ -3318,9 +3330,9 @@
{\let\save@@xtabularcr\@xarraycr}
{\let\save@@xtabularcr\@xtabularcr}}
% \end{macrocode}
-%\changes{v7.0}{2014/11/05}{Added \cs{tabControlOn} and \cs{tabControlOff}.
+%\changes{v7.0}{2014/11/05}{Added \string\cs{tabControlOn} and \string\cs{tabControlOff}.
% Tab control is interfering with regular tabular environments, or anywhere
-% \texttt{d} is used.}
+% \string\texttt{d} is used.}
% \begin{macrocode}
\def\tabControlOff{\@ifundefined{@xtabularcr}
{\let\@xarraycr\save@@xtabularcr}
@@ -3365,7 +3377,7 @@
% to \cs{setkeys}; therefore you can pass a command of key-value options through
% the optional argument:
% |\def\myOpts{topsep=0pt}|, |\begin{exEnumerate}[\myOpts]|.
-% \changes{v8.2.6}{2018/12/03}{Inserted \string\cs{eqprior} prior to exEnumerate env}
+% \changes{v8.2.6}{2018/12/03}{Inserted \string\cs{eqprior} prior to \string\env{exEnumerate} env}
% The \cs{eqprior} command normally does nothing unless it is redefined.
% \begin{macrocode}
\newenvironment{exEnumerate}[1][]{\everypar{}%
@@ -3555,7 +3567,7 @@
\fi
}
% \end{macrocode}
-%\changes{v6.4q}{2012/03/23}{define \cs{eq@defaultlheader}}
+%\changes{v6.4q}{2012/03/23}{define \string\cs{eq@defaultlheader}}
% Determine whether \textsf{web} package is loaded, and define \cs{eq@normallheader}
% and \cs{eq@defaultlheader}. These are designed to fix a problem of disappearing
% headers in the solutions section of the document.
@@ -3593,7 +3605,7 @@
% \end{macrocode}
% If there are solutions and this is not the \texttt{solutionsonly} option,
% we start a new page, clear the right mark and start a normal header.
-% \changes{v6.4q}{2012/03/23}{Inserted \cs{eq@normalheader} after \cs{newpage}
+% \changes{v6.4q}{2012/03/23}{Inserted \string\cs{eq@normalheader} after \string\cs{newpage}
% to get running headers to appear on each page of solutions}%
% Inserted |\markright{}| and \cs{eq@normalheader} to fix a problem with
% disappearing running headers.
@@ -3683,7 +3695,7 @@
%
%\changes{v6.2a}{2007/11/10 }
%{
-% Added \cs{expdfbookmark} to bookmark exercises.
+% Added \string\cs{expdfbookmark} to bookmark exercises.
%}
% We have to increase the \texttt{tocdepth} so hyperref will create the bookmark at the
% subsection level.
@@ -3755,7 +3767,7 @@
% Here, we include a few commands common to both
% quiz environments.
%\medskip\par\noindent
-% Colors used by \textsf{exerquiz}: \texttt{webgreen} normally defined in \textsf{web}.
+% Colors used by \pkg{exerquiz}: \texttt{webgreen} normally defined in \pkg{web}.
% \begin{macrocode}
\definecolor{webgreen}{rgb}{0,.6,0}
% \end{macrocode}
@@ -3765,20 +3777,20 @@
% \changes{v6.05b}{2006/05/12}
% {
% added a command to change the color of the proofing symbol
-% changed the definition of \cs{proofingsymbol} to a text fillin. This creates the command
-% \cs{@proofingsymbol}. Can now control the symbol and the color (through \cs{proofingsymbolColor}
+% changed the definition of \string\cs{proofingsymbol} to a text fillin. This creates the command
+% \string\cs{@proofingsymbol}. Can now control the symbol and the color (through \string\cs{proofingsymbolColor}
% }
% \begin{macrocode}
\newcommand{\proofingsymbolColor}[1]{\def\@proofingsymbolColor{#1}}
\proofingsymbolColor{red}
-\let\@proofsymbolredefined=0
-\newcommand{\proofingsymbol}[1]{\let\@proofsymbolredefined=1%
- \def\@proofingsymbol{\textcolor{\@proofingsymbolColor}{#1}}}
+\let\@proofsymbolredefined\eq@Zero
+\newcommand{\proofingsymbol}[1]{\let\@proofsymbolredefined\eq@One
+ \def\@proofingsymbol{\textcolor{\@proofingsymbolColor}{#1}}}
\def\@proofingsymbol{\textcolor{\@proofingsymbolColor}{\ding{52}}}
-\def\setproofingsymbol{%
- \if\@proofsymbolredefined1\else
- \@ifpackageloaded{pifont}{\proofingsymbol{\ding{52}}}
- {\proofingsymbol{$\bullet$}}\fi}
+\def\setproofingsymbol{\ifx\@proofsymbolredefined\eq@One\else
+ \@ifpackageloaded{pifont}{\proofingsymbol{\ding{52}}}
+ {\proofingsymbol{$\bullet$}}\fi
+}
\AtBeginDocument{\setproofingsymbol}
% \end{macrocode}
% \end{macro}
@@ -3804,22 +3816,22 @@
\newcommand{\quesNumColor}[1]{\def\eq@quesNumCol{#1}}
\quesNumColor{blue}
\renewcommand{\theeqquestionnoi}{\arabic{eqquestionnoi}}
-\newcommand{\labeleqquestionnoi}{%
- \color{\eq@quesNumCol}\bfseries\theeqquestionnoi.}
+\newcommand{\labeleqquestionnoi}{\color{\eq@quesNumCol}\bfseries
+ \theeqquestionnoi.}
\renewcommand\theeqquestionnoii{(\alph{eqquestionnoii})}
-\newcommand{\labeleqquestionnoii}{%
- \color{\eq@quesNumCol}\bfseries\theeqquestionnoii}
+\newcommand{\labeleqquestionnoii}{\color{\eq@quesNumCol}\bfseries
+ \theeqquestionnoii}
\renewcommand\theeqquestionnoiii{(\roman{eqquestionnoiii})}
-\newcommand{\labeleqquestionnoiii}{%
- \color{\eq@quesNumCol}\bfseries\theeqquestionnoiii}
+\newcommand{\labeleqquestionnoiii}{\color{\eq@quesNumCol}\bfseries
+ \theeqquestionnoiii}
% \end{macrocode}
% \paragraph*{Properties of the questions environment.} (2013/07/10) These include
% \IndexKey{labelwidthTo}\texttt{labelwidthTo} and
% \IndexKey{labelwidth}\texttt{labelwidth}.
% \begin{macrocode}
\define@key{props@ques}{labelwidthTo}%
- [\normalsize\normalfont\bfseries00.]%
- {\def\propQ@labelwidthTo{#1}}
+ [\normalsize\normalfont\bfseries00.]%
+ {\def\propQ@labelwidthTo{#1}}
\define@key{props@ques}{labelwidth}[]{\def\propQ@labelwidth{#1}}
\let\propQ@labelwidth\@empty
% \end{macrocode}
@@ -3864,17 +3876,20 @@
\insE@rlyAtQues\gdef\eqPTs{1}%
\global\let\eqQT\eq@na%
% \end{macrocode}
-% (06/06/10) We create a macro \cs{@currentQues} that holds the current
-% problem number 2(a)(i), for example.
+% (06/06/10) We create a macro, \cs{@currentQues}, that holds the current
+% problem number; 2(a)(i), for example.
+% \changes{v8.6.7}{2021/04/12}{Remove the misplaced \string\cs{endcsname}
+% \string\cs{@thispr@b}, within the \string\env{questions} environment.}
% \begin{macrocode}
- {\@tempcnta=0 \let\@thispr@b\@empty
+ {\@tempcnta\z@\let\@thispr@b\@empty
\@whilenum\@tempcnta<\@eqquestiondepth\do{\advance\@tempcnta\@ne
- \ifx\@thispr@b\@empty\edef\@thispr@b{%
- \csname theeqquestionno\romannumeral\the\@tempcnta\endcsname}\else
- \edef\@thispr@b{\@thispr@b%
- \csname theeqquestionno\romannumeral\the\@tempcnta\endcsname}\fi
+ \ifx\@thispr@b\@empty\edef\@thispr@b{\@nameuse
+ {theeqquestionno\romannumeral\the\@tempcnta}}\else
+ \edef\@thispr@b{\@thispr@b\@nameuse
+ {theeqquestionno\romannumeral\the\@tempcnta}}\fi
}\xdef\@currentQues{\@thispr@b}}%
- \makebox[\labelwidth][r]{\normalfont\@nameuse{label\@quesctr}}%
+ \makebox[\labelwidth][r]{\normalfont
+ \@nameuse{label\@quesctr}}% format label
\xdef\eq@pageThisQ{\the\c@page}%
\post@questionsHook}{\usecounter{\@quesctr}%
% \end{macrocode}
@@ -3928,9 +3943,10 @@
% the \texttt{shortquiz}
%\par\medskip\noindent
% After all the parsing is done, the parameters for this environment are
-%\begin{verbatim}
-% \begin{shortquiz}*[<basename>]
-%\end{verbatim}
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
+%\begin{shortquiz}*[!ameta(basename)]
+%\end{Verbatim}
%The `\texttt{*}' is optional and signals that forms should be used instead
%of links. This option is regressed. The user should use the \texttt{shortquiz*}
% environment. The \verb![<basename>]! is the basename of any form fields
@@ -3946,7 +3962,7 @@
\abovesqskip{\par\medskip}
% \end{macrocode}
%\changes{v6.4a}{2011/05/11}{%
-% Added \cs{sq@afterhook} for use by \textsf{eqexam}, but may be useful elsewhere.
+% Added \string\cs{sq@afterhook} for use by \string\pkg{eqexam}, but may be useful elsewhere.
%}
%\DescribeMacro\endsqhook\cmd\endsqhook is a late hook
% \begin{macrocode}
@@ -3959,8 +3975,7 @@
% \begin{macrocode}
\let\sqhspace\space
\let\ListOfSQuizNames\@empty
-\newenvironment{shortquiz}
-{%
+\newenvironment{shortquiz}{\def\eqPTs{1}%
% \end{macrocode}
% (06/08/10) The next two lines initialize the macros for registering the
% question label, i.e., \texttt{2(a)(ii)}. These two lines are repeated for
@@ -3980,15 +3995,15 @@
% The \texttt{shortquiz*} is a short quiz that uses forms.
%\par\medskip\noindent
% The parameter for this environment is
-%\begin{verbatim}
-% \begin{shortquiz}[<basename>]
-%\end{verbatim}
-% The \verb![<basename>]! is the basename of any form fields
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
+%\begin{shortquiz}[!ameta(basename)]
+%\end{Verbatim}
+% The \texttt{[\ameta{basename}]} is the basename of any form fields
% generated. If not present, an base fieldname is generated based on the
% \cs{@shortquizCnt} macro (not a counter). The actual name is given in \cs{@sqGenBaseName}.
% \begin{macrocode}
-\newenvironment{shortquiz*}
-{%
+\newenvironment{shortquiz*}{%
\xdef\eq@pageThisQ{\the\c@page}%
{\eqtmpcnta\@shortquizCnt\relax\advance\eqtmpcnta\@ne
\xdef\@shortquizCnt{\the\eqtmpcnta}}%
@@ -4191,8 +4206,8 @@ if (typeof !oField=="undefined")
% \end{answers}
% \end{shortquiz}
%\end{verbatim}
-% To further complicate matters, the \texttt{shortquiz} can be
-% used with the \texttt{questions} environment to create a series of
+% To further complicate matters, the \env{shortquiz} can be
+% used with the \env{questions} environment to create a series of
% numbered short question quizzes. See the manual for examples.
% \texttt{solution} environment is defined next.
% \begin{macro}{solution}
@@ -4204,8 +4219,8 @@ if (typeof !oField=="undefined")
% option. In this case, solutions are separated by a
% \cmd{\medskip} rather then put on a separate page. It also
% obeys the \texttt{solutionsafter} option
-% \changes{v6.4s}{2012/06/03}{Added hooks \cmd{\sqPostHeaderHook} and
-% \cmd{\qPostHeaderHook}}
+% \changes{v6.4s}{2012/06/03}{Added hooks \string\cs{sqPostHeaderHook} and
+% \string\cs{qPostHeaderHook}}
%\par\medskip\noindent
% Hooks \DescribeMacro\sqPostHeaderHook\cmd{\sqPostHeaderHook},
% \DescribeMacro\qzPriorSolutionAfterHook\cmd\qzPriorSolutionAfterHook,
@@ -4276,20 +4291,19 @@ if (typeof !oField=="undefined")
\expandafter\verbatimwrite\fi
}
\let\qzSolutionsAfterHook\@empty
-\def\endsolution@sq
-{%
- \ifeq@solutionsafter
- \eq@fititin{\mbox{\sqslrtnlabel}}\par\qzSolutionsAfterHook
- \aftergroup\ignorespaces
- \else
- \endverbatimwrite
- \eq@clearMrkCpy
- \ifx\@qzsolndest\@empty\else\set@display@protect
- \immediate\write\verbatim@out{\eqSqSolnTrailer}%
- \set@typeset@protect
- \fi
+\def\endsolution@sq{%
+ \ifeq@solutionsafter
+ \eq@fititin{\mbox{\sqslrtnlabel}}\par\qzSolutionsAfterHook
+ \aftergroup\ignorespaces
+ \else
+ \endverbatimwrite
+ \eq@clearMrkCpy
+ \ifx\@qzsolndest\@empty\else\set@display@protect
+ \immediate\write\verbatim@out{\eqSqSolnTrailer}%
+ \set@typeset@protect
\fi
- \global\let\@qzsolndest\@empty
+ \fi
+ \global\let\@qzsolndest\@empty
}
%</package|eqexam>
%<*package>
@@ -4298,9 +4312,9 @@ if (typeof !oField=="undefined")
% a new page. The argument is a vertical skip. If there is \texttt{\#1}
% or more space remaining on the page, the command does nothing, otherwise
% it issues a \cs{newpage}.
-% \changes{v6.4s}{2012/06/03}{Added \cs{promoteNewPageHere}}
+% \changes{v6.4s}{2012/06/03}{Added \string\cs{promoteNewPageHere}}
% \changes{v6.8a}{2014/01/01}{Made an optional argument, but test for required argument as swell.}
-% \changes{v8.5.6}{2020/01/01}{\string\promoteNewPageHere: added condition, first arg must be greater
+% \changes{v8.5.6}{2020/01/01}{\string\cs{promoteNewPageHere}: added condition, first arg must be greater
% then 0pt; otherwise, do nothing}
% \begin{macrocode}
\newcommand\pnphDflt{.1\textheight}
@@ -4323,9 +4337,9 @@ if (typeof !oField=="undefined")
% re-emitting it later, just prior to the solution. Useful for grouped questions.
% \begin{macrocode}
\newcommand{\saveDest}[1][]{%
- \def\sd@arg{#1}\ifx\sd@arg\@empty
- \xdef\holdDest{\@qzsolndest}\else
- \xdef\@qzsolndest{#1}\xdef\holdDest{#1}\fi}
+ \def\sd@arg{#1}\ifx\sd@arg\@empty
+ \xdef\holdDest{\@qzsolndest}\else
+ \xdef\@qzsolndest{#1}\xdef\holdDest{#1}\fi}
\def\useDest{\def\@qzsolndest{\holdDest}}
\let\holdDest\@empty
%</package>
@@ -4334,17 +4348,17 @@ if (typeof !oField=="undefined")
\let\eqSqSolnTrailerHook\@empty
\let\eqQzSolnTrailerHook\@empty
\newcommand\eqSqSolnTrailer{%
- \if\eqQuizType\isQZ
- \eqQzSolnTrailerHook
- \protect\ReturnTo{page.\eq@pageThisQ}%
- {\protect\mbox{\sqslrtnlabel}}\string\endeqQt
- \else
- \eqSqSolnTrailerHook
- \protect\ReturnTo{page.\eq@pageThisQ}%
- {\protect\mbox{\sqslrtnlabel}}\string\endeqSQt%
- \fi
- \ifeqforpaper\protect\fpAfterSolutionsSkip\fi^^J%
- \ifmakeQzSlLocal\protect\endgroup^^J\fi
+ \if\eqQuizType\isQZ
+ \eqQzSolnTrailerHook
+ \protect\ReturnTo{page.\eq@pageThisQ}%
+ {\protect\mbox{\sqslrtnlabel}}\string\endeqQt
+ \else
+ \eqSqSolnTrailerHook
+ \protect\ReturnTo{page.\eq@pageThisQ}%
+ {\protect\mbox{\sqslrtnlabel}}\string\endeqSQt%
+ \fi
+ \ifeqforpaper\protect\fpAfterSolutionsSkip\fi^^J%
+ \ifmakeQzSlLocal\protect\endgroup^^J\fi
}
%</package|eqexam>
%<*package>
@@ -4356,8 +4370,9 @@ if (typeof !oField=="undefined")
% \begin{macro}{\endeqSQt}
% The \cmd{\eqQt} and \cmd{\eqSQt} are markers at the beginning of each
% quiz (short quiz, respectively) solution. These markers, along with
-% ``end'' versions, \cmd{\endeqQt} and \cmd{\endeqSQt}, respectively, can be used to filter out the quiz solutions or the
-% short quiz solutions. The following example removes all short quizzes.
+% ``end'' versions, \cmd{\endeqQt} and \cmd{\endeqSQt}, respectively,
+% can be used to filter out the quiz solutions or the
+% short-quiz solutions. The following example removes all short quizzes.
%\begin{verbatim}
%\long\def\eqSQt#1\endeqSQt{}
%\begin{document}
@@ -4380,13 +4395,13 @@ if (typeof !oField=="undefined")
% \begin{macro}{\quizSolnHeader}
% Each solution begins with \cmd{\quizSolnHeader}. This can be redefined
% for whatever reason. It takes three arguments, one of which is optional.
-% \#1 is the \cmd{\noPeek} parameters; \#2 is the named destination to this
-% solution; \#3 is the \cmd{\sqsllabel}.
+% \texttt{\#1} is the \cmd{\noPeek} parameters; \texttt{\#2} is the named destination to this
+% solution; \texttt{\#3} is the \cmd{\sqsllabel}.
%
% If you want to typeset solutions separately, you can redefine
% \cmd{\quizSolnHeader} as desired, and used in conjunction with
% \cmd{eqQt}.
-% \changes{v6.7q}{2013/12/15}{Added this hook for use by \textsf{contsolns.dtx}}
+% \changes{v6.7q}{2013/12/15}{Added this hook for use by \string\textsf{contsolns.dtx}}
% \begin{macrocode}
\let\prior@quizSolnHeaderHook\@empty
\newcommand\quizSolnHeader[3][]{%
@@ -4490,14 +4505,12 @@ if (typeof !oField=="undefined")
% \end{macrocode}
% \DescribeMacro{\quizSolnsHeadnToc} sets up the quiz solution title.
% \begin{macrocode}
-\def\quizSolnsHeadnToc
-{%
+\def\quizSolnsHeadnToc{%
\edef\eq@mkCmd{\expandafter\noexpand
\csname\eq@QzSolnsLevel\endcsname\eq@QzSolnsStar}%
\eq@mkCmd{\sqslsectitle}\if!\eq@QzSolnsLabel!\else
\label{\eq@QzSolnsLabel}\fi
\if\eq@QzSolnsStar*%
-% \addtocontents{toc}{\protect\def\protect\web@finalDot{}}
\addcontentsline{toc}{\eq@QzSolnsLevel}{%
\@ifundefined{web@latextoc}{}{%
\ifx\web@latextoc\eq@YES\else
@@ -4512,8 +4525,7 @@ if (typeof !oField=="undefined")
% \changes{v8.2.6}{2018/12/03}{Placed \string\cs{endinput} at the end of
% the quiz solutions file}
% \begin{macrocode}
-\newcommand{\quizSolnInput}
-{%
+\newcommand{\quizSolnInput}{%
\global\let\webnewpage\relax
\bgroup\OKToWriteExamDatatrue
\writeT@QzSolns{\string\endinput}\egroup
@@ -4648,24 +4660,27 @@ if (typeof !oField=="undefined")
% The \texttt{quiz} environment takes an optional `\texttt*'
% and one required argument. There are two styles of quizzes:
% links or checkboxes. Beginning with v6.08, the use of the \texttt*-option
-% is discouraged, use the quiz* environment instead.
-%\begin{verbatim}
-%\begin{quiz}[*]{<base_name>}
+% is discouraged, use the \env{quiz*} environment instead.
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,
+%commandchars={!()},codes={\catcode`\%=9}]
+%\begin{quiz}[*]{!ameta(base-name)}
% ...
%\end{quiz}
-%\end{verbatim}
+%\end{Verbatim}
+%Brief description of parameters:
% \begin{itemize}
-% \item optional \texttt{*} $=$ use checkboxes, otherwise use links
-% \item \texttt{<base\_name>}: required argument $=$ base name of quiz.
+% \item optional \texttt{*} means to use checkboxes, otherwise use links;
+% \item \texttt{\ameta{base-name}}: required argument is the base name of quiz.
% \end{itemize}
-%
-% Note that I set \verb!\tabcolsep=0pt! in preparation for a tabular environment.
+% Note that I set \cs{tabcolsep=0pt} in preparation for a tabular environment.
% If authors wants to use a tabular environment within a question, he/she must
-% reset this value to its default, \verb!\setlength{\tabcolsep}{6pt}!.
+% reset this value to its default, |\setlength{\tabcolsep}{6pt}|.
% \begin{macrocode}
-\newenvironment{quiz}
-{\goodbreak\@ifstar{\gdef\qstar{*}\@quiz*f}{\gdef\qstar{x}\@quiz*l}}
- {\aeb@endquiz}
+\newenvironment{quiz}{\goodbreak
+ \@ifstar
+ {\gdef\qstar{*}\@quiz*f}
+ {\gdef\qstar{x}\@quiz*l}%
+}{\aeb@endquiz}
\def\@quizCnt{0}
% \end{macrocode}
% \cs{ListOfQuizNames} and \cs{ListOfSQuizNames} are master lists of all
@@ -4712,9 +4727,9 @@ if (typeof !oField=="undefined")
\gdef\eqPTs{1}\global\let\eqQT\eq@na
% \end{macrocode}
% \changes{v6.3u}{2010/11/04}{%
-% Added \cs{xdef}\cs{oField}\texttt{\{\#2\}}, this is
-% needed for \textsf{apb.dtx}}
-% Add \cs{listOfQuizNames} to track quizzes
+% Added \string\cs{xdef}\string\cs{oField}\string\darg{\#2}, this is
+% needed for \string\textsf{apb.dtx}}
+% Add \string\cs{listOfQuizNames} to track quizzes
% \changes{v7.8k}{2017/07/25}{Added \string\cs{listOfQuizNames} to track quizzes}
% \begin{macrocode}
\g@addto@macro\ListOfQuizNames{,#2}%
@@ -5115,7 +5130,7 @@ if (isEndQuizPushed("@eqBaseName")){
\fi
}
% \end{macrocode}
-% \changes{v6.7n}{2013/09/17}{\cs{CorrButton} is now an alias for \cs{eqButton}}
+% \changes{v6.7n}{2013/09/17}{\string\cs{CorrButton} is now an alias for \string\cs{eqButton}}
% \DescribeMacro{\CorrButton} is a name better suited for the task of this button
% than the \cs{eqButton} name.
% \begin{macrocode}
@@ -5369,8 +5384,8 @@ if (isEndQuizPushed("@eqBaseName")){
% \changes{v6.05c}{2006/05/19}
% {
% Added a convenience macro for setting the name of the quiz. This command defines the
-% text macro \cs{currQuiz} which contains the quiz name. Can be used in conjunction
-% with \cs{floatQuiz} and \cs{startQuizHere}.
+% text macro \string\cs{currQuiz} which contains the quiz name. Can be used in conjunction
+% with \string\cs{floatQuiz} and \string\cs{startQuizHere}.
% }
% \changes{v8.1k}{2018/02/04}{Added \string\cs{oField} to list in \string\cs{DeclareQuiz}}
% \begin{macrocode}
@@ -5388,12 +5403,12 @@ if (isEndQuizPushed("@eqBaseName")){
% \texttt{quiz} environment.
% \changes{v6.05c}{2006/05/19}
% {
-% Added \cs{floatQuiz}, \cs{dockQuiz} and \cs{startQuizHere} to start a quiz in an
+% Added \string\cs{floatQuiz}, \string\cs{dockQuiz} and \string\cs{startQuizHere} to start a quiz in an
% arbitrary place prior to the beginning of the quiz.
% }
%\par\medskip\noindent Usage:
%\begin{verbatim}
-%\Quiz{myQuiz}
+%\DeclareQuiz{myQuiz}
%\floatQuiz
%........
%\begin{center}
@@ -5522,8 +5537,8 @@ if (isEndQuizPushed("@eqBaseName")){
%quizzes only---the title of the quiz is used for the definition of
%\cs{sqlabel}. Note that \cs{makeatletter} is invoked before the
% parameters are read.
-% \changes{v6.7o}{2013/11/25}{Changed \cs{aeb@@titleQuzi} to \cs{aebTitleQuiz}}
-% \changes{v6.7p}{2013/12/11}{Added optional parameter to \cs{titleQuiz}
+% \changes{v6.7o}{2013/11/25}{Changed \string\cs{aeb@@titleQuzi} to \string\cs{aebTitleQuiz}}
+% \changes{v6.7p}{2013/12/11}{Added optional parameter to \string\cs{titleQuiz}
% to execute a command, such as incrementing a counter.}
% \begin{macrocode}
\let\tqhspace\space
@@ -5588,11 +5603,11 @@ if (isEndQuizPushed("@eqBaseName")){
%
%\changes{v6.2c}{2007/11/14}
%{
-% Added the commands \cs{showCreditMarkup} and \cs{hideCreditMarkup} to show partial credit markup
+% Added the commands \string\cs{showCreditMarkup} and \string\cs{hideCreditMarkup} to show partial credit markup
%}
%\changes{v6.3k}{2008/01/09}
%{
-% Added \cs{ptsLabel} and \cs{ptLabel} to localize the markup in the margin of a quiz
+% Added \string\cs{ptsLabel} and \string\cs{ptLabel} to localize the markup in the margin of a quiz
%}
% \begin{macrocode}
\newcounter{qMarkCnt}
@@ -5719,7 +5734,7 @@ if (isEndQuizPushed("@eqBaseName")){
% within a quiz.
%\changes{v6.2a}{2007/11/10}
%{
-% Added \cs{quizpdfbookmark} to bookmark quizzes.
+% Added \string\cs{quizpdfbookmark} to bookmark quizzes.
%}
% \begin{macrocode}
\newcommand{\sqbookmarkfmt}{Short Quiz \@shortquizCnt.\space}
@@ -5829,7 +5844,7 @@ if (isEndQuizPushed("@eqBaseName")){
% \changes{v6.05e}{2006/18/06 v6.05e}
% {
% Added control over the separation between the MC label and subsequent text:
-% \cs{setMClabelsep} and \cs{resetMClabelsep}.
+% \string\cs{setMClabelsep} and \string\cs{resetMClabelsep}.
% }
% \begin{macro}{\resetMClabelsep}
% \begin{macro}{\eq@hspanner}
@@ -6004,7 +6019,7 @@ if (isEndQuizPushed("@eqBaseName")){
% \begin{macrocode}
\expandafter\tabular\sq@TabPos{@{}*{#1}{p{\eq@tmpdima}}@{}}}%
% \end{macrocode}
-% \changes{v7.4}{2015/03/23}{added \cmd{\reset@doendpe}}
+% \changes{v7.4}{2015/03/23}{added \string\cs{reset@doendpe}}
% \DescribeMacro{\reset@doendpe} attempts to restore the \cs{parshape}
% following a list environment. It appears in several locations, includeing
% \cs{endanswers}, \cs{endmanswers}, and \cs{setTabulrSolnEnv}.
@@ -6134,7 +6149,7 @@ if (isEndQuizPushed("@eqBaseName")){
% For the link multiple choice type question. The driver independent stuff starts
% here, then goes to |\Ans@sq@f@driver| the rest of the code that depends on the
% driver.
-% \changes{v7.7d}{2015/11/15}{Changed mc.\cs{oFields} so it is printable}
+% \changes{v7.7d}{2015/11/15}{Changed mc.\string\cs{oFields} so it is printable}
% \begin{macrocode}
\def\@@Ans@sq@f@Defaults
{%
@@ -6258,7 +6273,7 @@ if( qzSolnDest!="") updateTally("*oField.*thequestionno");%
\PBS\raggedright
%</package|eqexam>
% \end{macrocode}
-%\changes{v6.7d}{2013/05/27}{added \cs{rbf@Opts} to hardwire choices.}
+%\changes{v6.7d}{2013/05/27}{added \string\cs{rbf@Opts} to hardwire choices.}
% \begin{macrocode}
%<*package>
\if\Ans@choice\eq@One
@@ -6485,9 +6500,9 @@ updateTally("*oField.*thequestionno");*fi%
% in the sections that follow.
% \changes{v6.2}{2007/11/08 }
%{
-% Added the \texttt{manswers} environment, and supporting elements, both {\LaTeX}
-% and JavaScript. This \texttt{manswers} environment is for the \texttt{quiz} environment
-% only. There is a \texttt{manswers} environment for the \texttt{shortquiz} environment, but
+% Added the \string\texttt{manswers} environment, and supporting elements, both {\string\LaTeX}
+% and JavaScript. This \string\texttt{manswers} environment is for the \string\texttt{quiz} environment
+% only. There is a \string\texttt{manswers} environment for the \string\texttt{shortquiz} environment, but
% this is used by \textsf{eqExam} only.
%}
%
@@ -6797,8 +6812,8 @@ updateTally("*oField.*thequestionno");*fi%
% \end{macrocode}
% \changes{v6.05d}{2007/04/14}
% {
-% Added the command \cs{insertGrayLetters}. This can be defined to place symbols under
-% the multiple choice form boxes. The command \cs{bottomOfAnsfStack} is there as a
+% Added the command \string\cs{insertGrayLetters}. This can be defined to place symbols under
+% the multiple choice form boxes. The command \string\cs{bottomOfAnsfStack} is there as a
% hook for whatever purposes are desired.
% }
% \begin{macrocode}
@@ -6806,7 +6821,7 @@ updateTally("*oField.*thequestionno");*fi%
%</package>
%<*package|eqexam>
% \end{macrocode}
-% \changes{v7.7}{2015/06/04}{Added \cs{graylettersColor}}
+% \changes{v7.7}{2015/06/04}{Added \string\cs{graylettersColor}}
% \DescribeMacro\graylettersColor sets the color of the gray letters, the default is
% \texttt{gray}.
% \begin{macrocode}
@@ -6847,9 +6862,9 @@ updateTally("*oField.*thequestionno");*fi%
\def\Ans@c@f@Choice{\Ff{\FfReadOnly}}%
\fi
% \end{macrocode}
-% \changes{v6.7h}{2013/08/19}{When the \cs{useMCCircles} is used, the boundary
+% \changes{v6.7h}{2013/08/19}{When the \string\cs{useMCCircles} is used, the boundary
% color is transparent. We try a fix for this to show the colored solution
-% boundary. The fix uses the \cs{late@options} commands.}
+% boundary. The fix uses the \string\cs{late@options} commands.}
% \begin{macrocode}
\ifaeb@usecircles\def\late@options{\BC{}}\fi
\if\Ans@choice\eq@One
@@ -7056,7 +7071,7 @@ updateTally("*oField.*thequestionno");*fi%
}
% \end{macrocode}
% \changes{v6.3x}{2011/04/05}{%
-% Added \texttt{label} parameter to \cs{bChoices}.
+% Added \string\texttt{label} parameter to \string\cs{bChoices}.
%}
% A new key, \IndexKey{label}\texttt{label}, if this label is specified, then we keep track of all the
% correct alternatives, put them into a commands to make them accessible by the user.
@@ -7100,8 +7115,9 @@ updateTally("*oField.*thequestionno");*fi%
}
% \end{macrocode}
% \changes{v6.3x}{2011/04/05}{%
-% Supporting commands that use the value of the \texttt{label} parameter
-% of \cs{bChoices}: \cs{eq@saveAns}, \cs{eq@displayAns}, \cs{eq@displayAlts}, etc.
+% Supporting commands that use the value of the \string\texttt{label} parameter
+% of \string\cs{bChoices}: \string\cs{eq@saveAns}, \string\cs{eq@displayAns},
+% \string\cs{eq@displayAlts}, etc.
%}
% \texttt{4/5} We begin an experimental series of commands. The idea is to be able to
% conveniently reference a multiple choice problem when the
@@ -7188,7 +7204,7 @@ updateTally("*oField.*thequestionno");*fi%
% \begin{macro}{\useSavedAltsAns}
% \begin{macro}{\useSavedNumAns}
% \changes{v6.3x}{2011/04/05}{%
-% Added \cs{useSavedAns}, \cs{useSavedAlts}, and \cs{useSavedAltsAns}.
+% Added \string\cs{useSavedAns}, \string\cs{useSavedAlts}, and \string\cs{useSavedAltsAns}.
%}
% These three commands hold the correct alternatives and answers to a multiple choice
% or multiple selection problem. The optional first argument allows you to display
@@ -7302,7 +7318,7 @@ updateTally("*oField.*thequestionno");*fi%
}{\expandafter\@findendans\@gobble}}%
% \end{macrocode}
% The command that processes the alternatives.
-% \changes{v6.7g}{2013/08/09}{Changed \texttt{\#1} to \cs{the}\cs{@temptokena} Fixing
+% \changes{v6.7g}{2013/08/09}{Changed \string\texttt{\string\#1} to \string\cs{the}\string\cs{@temptokena} Fixing
% a nasty bug. Reported by Christopher C.}
% \begin{macrocode}
\def\defineEachAns#1{\advance\eqtmpcnta\@ne
@@ -7398,7 +7414,7 @@ updateTally("*oField.*thequestionno");*fi%
\nextrandom \nextrandom \nextrandom
% \end{macrocode}
% Save the initial seed value to \cs{eqInitSeedValue}.
-% \changes{v6.7f}{2013/08/03}{Save the initial seed value to \cs{eqInitSeedValue}.}
+% \changes{v6.7f}{2013/08/03}{Save the initial seed value to \string\cs{eqInitSeedValue}.}
% \begin{macrocode}
\xdef\InitSeedValue{\the\randomi}%
\fi
@@ -7433,8 +7449,8 @@ updateTally("*oField.*thequestionno");*fi%
% \cs{@ansChoices}.
% \changes{v6.1}{2007/10/28}
% {%
-% Added support for randomizing the multiple choices, requires the use of \cs{bChoices}
-% and \cs{eChoices}.
+% Added support for randomizing the multiple choices, requires the use of \string\cs{bChoices}
+% and \string\cs{eChoices}.
% }
% \changes{v8.6.2}{2021/01/20}{Incorporated \string\cs{if@DoNotRandomize}
% into the \string\cs{@ansChoices} macro for MC and MS questions}
@@ -7669,10 +7685,10 @@ updateTally("*oField.*thequestionno");*fi%
% equivalent to \cs{ref}.
%\changes{v6.06c}{2007/04/26}
%{
-% Added \cs{REF} in support of the \texttt{showgrayletters} option.
+% Added \string\cs{REF} in support of the \string\texttt{showgrayletters} option.
%}
%\changes{v6.4d}{2011/07/14}{%
-% Correct \cs{REF} so that a link is created.
+% Correct \string\cs{REF} so that a link is created.
%}
% \begin{macrocode}
\def\REF{\@ifstar{\let\isREFstar\eq@One\aeb@REFstar}
@@ -7714,7 +7730,7 @@ updateTally("*oField.*thequestionno");*fi%
%
%\changes{v6.3j}{2008/12/08}
%{
-% Added \cs{useMCCircles} and \cs{useMCCRects}.
+% Added \string\cs{useMCCircles} and \string\cs{useMCCRects}.
%}
% \par\medskip\noindent We use a switch to keep track of ``circle mode.'' If the
% document author invokes \cs{useMCCircles} when we are already in circle mode,
@@ -7829,8 +7845,8 @@ updateTally("*oField.*thequestionno");*fi%
% in the preamble, we allow the score to go below zero.
%\changes{v6.3i}{2008/10/22}
%{
-% Added \cs{negPointsAllowed} to allow negative scores on quizzes. This is only relevant
-% when the quiz has a \texttt{manswers} environment.
+% Added \string\cs{negPointsAllowed} to allow negative scores on quizzes. This is only relevant
+% when the quiz has a \string\texttt{manswers} environment.
%}
% \begin{macrocode}
\def\negPointsAllowed{\def\negpointsallowed{true}}
@@ -7846,7 +7862,7 @@ updateTally("*oField.*thequestionno");*fi%
% and multiple choice questions.
%\changes{v6.3m}{2010/01/27}
%{
-% Added \cs{requireAlertBox} to turn off the ``Do not show this message again'' checkbox for objective questions.
+% Added \string\cs{requireAlertBox} to turn off the ``Do not show this message again'' checkbox for objective questions.
%}
%The alert box displays the message \cs{doNotShowAgainMsg} which by default is
%``Do not show this message again''
@@ -8008,8 +8024,8 @@ updateTally("*oField.*thequestionno");*fi%
\ifShowAppr\altApprOn\let\eqAddAAFormat\@empty\fi}
% \end{macrocode}
% Get any changes in the appearance of the text box
-% \changes{v6.4c}{2011/07/01}{\cs{RespBoxMath} now records its lists of
-% independent variables under the global variable \texttt{\_mathVars}.}
+% \changes{v6.4c}{2011/07/01}{\string\cs{RespBoxMath} now records its lists of
+% independent variables under the global variable \string\texttt{\_mathVars}.}
% \begin{macrocode}
\begin{defineJS}[\makeesc\*\makecmt\%]{\AAKqRespBoxMath}
% \end{macrocode}
@@ -8489,6 +8505,57 @@ if(event.willCommit) {
% \end{macro}
% \end{macro}
% \end{macro}
+% \begin{macrocode}
+%</package>
+%<*rbmIntrvl>
+% \end{macrocode}
+% \subsubsection{The \texorpdfstring{\protect\cs}{\textbackslash}{rbmIntrvl} command}\label{ss:rbmi}
+% This code segment is input into \pkg{exerquiz} when the \opt{userbmintrvl} is specified.
+% The commands of this section are motivated by an {Acro\negthinspace\TeX} user (Thor G). He
+% wants to ask his students to make a series of calculations, the result of
+% which is to be entered into a \cs{RespBoxMath} input box. He is willing to
+% accept the response as correct if the response falls into a designated
+% interval $[a,b]$.
+%
+% Two commands are defined, one internal (\cs{c@lcEPInfo}) and the other public {\cs{rbmIntrvl}}.
+%
+% The first command \cs{c@lcEPInfo} takes as its parameters an (closed) interval of numbers.
+% It calculates the midpoint \DescribeMacro\intrCAns\cs{intrCAns} and
+% \DescribeMacro\intrPrec\cs{intrPrec}. The first number can be used as a (representative) point
+% value of the answer; the second is used as the precision parameter of \cs{RespBoxMath}.
+% \changes{v8.7}{2021/04/24}{Added \string\cs{rbmIntrvl}}
+% \begin{macrocode}
+\def\c@lcEPInfo[#1,#2]{%
+ \setlength{\eflength}{(#1pt+#2pt)/2}%
+ \edef\intrCAns{\strip@pt\eflength}%
+ \setlength{\eflength}{(#2pt-#1pt)/2}%
+ \edef\intrPrec{\strip@pt\eflength}%
+}
+% \end{macrocode}
+% \DescribeMacro\rbmIntrvl\hskip-\marginparsep\texttt{\darg{[\meta{a{\upshape,}b}]}}
+% This macro takes as its first argument the interval you want the student response
+% to fall into. The command expands \cs{c@lcEPInfo} then \cs{RespBoxMath}. Use \cs{intrCAns} and \cs{intrPrec}
+% in the arguments of \cs{RespBoxMath}.
+% \begin{macrocode}
+\newcommand{\rbmIntrvl}[1]{\c@lcEPInfo#1\RespBoxMath}
+% \end{macrocode}
+% \cs{rbmIntrvl} has implied arguments, those of \cs{RespBoxMath}. Below is a simple example.
+%\begin{Verbatim}[xleftmargin=\parindent,fontsize=\small,codes={\catcode`\%=9}]
+%\rbmIntrvl{[6.40,6.90]}{\intrCAns}{1}{\intrPrec}{[0,1]}
+%\end{Verbatim}
+%Following the interval declaration are the parameters of \cs{RespBoxMath}. The first
+%one following the interval is the correct answer (\cs{intrCAns}), the midpoint of the interval;
+%the third argument following the interval is the precision parameter of \cs{RespBoxMath},
+%which is taken to be \cs{intrPrec}, the half-width of the interval.
+% \begin{macrocode}
+%</rbmIntrvl>
+%<*package>
+% \end{macrocode}
+% We input the definition of \cs{rbmIntrvl} here, if the \opt{userbmintrvl}
+% option is taken.
+% \begin{macrocode}
+\inputRBMICode
+% \end{macrocode}
%\subsection{Text Fill-In}
% \begin{macro}{\RespBoxTxt}
% \begin{macro}{\RespBoxTxtNT}
@@ -8726,8 +8793,8 @@ if(event.willCommit) {
% \end{macro}
% \DescribeMacro{\txtRef}\hskip-\marginparsep\texttt{\darg{\ameta{label}}}
% The \cs{RespBoxTxt} can be used for a matching-type question. We define a special
-% \cs{ref}-type command that produces plain text. Refer to demo file \texttt{qz-matching.tex} for
-% details.
+% \cs{ref}-type command that produces plain text. Refer to demo file
+% \texttt{qz-matching.tex} for details.
% \changes{v8.6.4}{2021/02/15}{Support for matching-type question based in
% \string\cs{RespBoxTxt}}
% \begin{macrocode}
@@ -9173,7 +9240,7 @@ else !processJSfunc("obj.!oField.!thequestionno","!CorrectAns",%
%{%
% Fixed a problem with the clear button not setting the boundary color
% back to the default. I must have changed the name of an objective field,
-% now, we say \texttt{this.getField("obj.\cs{oField}")}.
+% now, we say \string\texttt{this.getField("obj.\string\cs{oField}")}.
%}
% \begin{macrocode}
\def\sqClearButtonDefaults
@@ -10298,8 +10365,8 @@ aCorrectAns[!currQuiz.Grp["!thequestionno"].offset],!oField);!fi
%
%\changes{v6.3b}{2008/06/29}
%{
-% Added the \cs{AddAAKeystroke} to the recognizable set of keys. This will be obeyed
-% within the optional arguments of \cs{RespBoxMath} and \cs{RespBoxTxt}.
+% Added the \string\cs{AddAAKeystroke} to the recognizable set of keys. This will be obeyed
+% within the optional arguments of \string\cs{RespBoxMath} and \string\cs{RespBoxTxt}.
%}
% \begin{macrocode}
\def\@eqAddAAKeystroke#1{\def\argi{#1}\ifx\argi\@empty
@@ -10491,9 +10558,9 @@ var aDlLibSpecResp=new Array(\dlLibSpecRespJS);
% JSf is an array of supported mathematical functions.
%\changes{v6.06}{2007/02/23}
%{
-% Separated the \texttt{JSf} array into \texttt{JSfBuiltIn} and \texttt{JSfCustom}. This
+% Separated the \string\texttt{JSf} array into \string\texttt{JSfBuiltIn} and \string\texttt{JSfCustom}. This
% allows us to identify the built-in JavaScript functions. I concatenate these two
-% into \texttt{JSf}.
+% into \string\texttt{JSf}.
%}
% \begin{macrocode}
var JSfBuiltIn = new Array
@@ -10516,7 +10583,7 @@ var JSfBuiltIn = new Array
% recognized properly when implmulti from dljslib is active. I think that
% the problem is caused by the fact that arcsin(x) follows sin(x) in the
% field of known functions and converted into arc*sin(x) and then into
-% a*r*c*sin(x). I enclose the patch for the exerquiz.dtx file which in my
+% a*r*c*sin(x). I enclose the patch for the \textsf{exerquiz.dtx} file which in my
% opinion solves the problem.''
%}
% \begin{macrocode}
@@ -10636,8 +10703,8 @@ function CkBalVert(UserInput)
% \texttt{UserInput}: a string\\
% Returns: 1 (if there is a match); 0 (if no match)
% also sets the global variable \texttt{ok2Continue} to \texttt{false}.
-% \changes{v6.4c}{2011/07/01}{Ckfunc now uses a global variable \texttt{\_mathVars} which
-% holds the variables of the current \cs{RespBoxMath} being processed. We search
+% \changes{v6.4c}{2011/07/01}{Ckfunc now uses a global variable \string\texttt{\_mathVars} which
+% holds the variables of the current \string\cs{RespBoxMath} being processed. We search
% all substrings containing 2 or more letters; if it consists only of the variables
% that substring is OK.}
% \begin{macrocode}
@@ -11009,8 +11076,8 @@ function ParseInput(UserInput)
%\changes{v6.06}{2007/02/23}
%{
% Now, just before we return the parsed expression, we append all built-in
-% JavaScript functions and constants with \texttt{Math.}, this is to avoid
-% having to use the \texttt{with(Math)} construct. These changes are in support
+% JavaScript functions and constants with \string\texttt{Math.}, this is to avoid
+% having to use the \string\texttt{with(Math)} construct. These changes are in support
% of using scientific notation.
%}
% \begin{macrocode}
@@ -11533,7 +11600,7 @@ function reldiffCompare(_a,_c,_v,_F,_G) {
% ]\CorrAnsButton{-4z^3(3z+4)^2}
%\end{verbatim}
% where \cs{refac}, \cs{repow}, \cs{redigit}, and \cs{rediv} are convenience macros defined
-% earlier in \texttt{exerquiz.dtx}. The regular expression describe the form of the answer
+% earlier in \textsf{exerquiz.dtx}. The regular expression describe the form of the answer
% acceptable.
%
% There seems to be a redundancy in the usage of \cs{Array}, but this is by design.
@@ -11859,8 +11926,8 @@ function eqFilter(filterMethod) {
case 3:
default:
% \end{macrocode}
-%\changes{v6.4k}{2011/08/17}{Within the function eqFilter, changed \texttt{this} to
-% \texttt{this.toString()}. The comparisons were returning false when they shouldn't
+%\changes{v6.4k}{2011/08/17}{Within the function eqFilter, changed \string\texttt{this} to
+% \string\texttt{this.toString()}. The comparisons were returning false when they shouldn't
% this is because in this case, we were comparing objects to objects}
% \begin{macrocode}
return this.toString();
@@ -11954,23 +12021,31 @@ function ProcUserResp(key,userresp,probno,notify)
fieldPopTbl(a[1]);
}
}
+% \end{macrocode}
+% (2021/04/04) Added try/catch to catch exceptions.
+% \changes{v8.6.6}{2021/04/04}{Added some try/catch pairs to avoid tossing cookies}
+% \begin{macrocode}
function ProcUserNoResp(key,userresp,probno,notify)
{
if ( arguments.length > 4 ) {
- RightWrong[probno][arguments[4]] = undefined;
- Responses[probno][arguments[4]] = undefined;
+ try{
+ RightWrong[probno][arguments[4]] = undefined;
+ Responses[probno][arguments[4]] = undefined;
+ } catch(e){};
var bVoidArray=true;
- for (var i=0; i<Responses[probno].length; i++) {
- if ( typeof Responses[probno][i] != "undefined") {
- bVoidArray=false;
- break;
- }
- }
- if (bVoidArray) {
- Responses[probno]=undefined;
- RightWrong[probno]=undefined;
+ try {
+ for (var i=0; i<Responses[probno].length; i++) {
+ if ( typeof Responses[probno][i] != "undefined") {
+ bVoidArray=false;
+ break;
+ }
+ }
+ } catch(e){};
+ if (bVoidArray) {
+ Responses[probno]=undefined;
+ RightWrong[probno]=undefined;
ProbValue[probno]=undefined;
- }
+ }
} else {
RightWrong[probno] = undefined;
Responses[probno] = undefined;
@@ -12204,7 +12279,7 @@ function DisplayQuizResults(qtfield,nPointTotal,nQuestions)
% be either \texttt{true} or \texttt{false}; if \texttt{true}, \texttt{DisplayQuizResults()}
% does not display quiz results; the default is \texttt{false}. This feature is used in the
% demo file \texttt{qz-pin-to-correct.tex} found on the {Acro\!\TeX} Blog.
-% \changes{v8.6.4}{2021/02/17}{Added conditional (\texttt{\_bSilent})}
+% \changes{v8.6.4}{2021/02/17}{Added conditional (\string\texttt{\_bSilent})}
% \begin{macrocode}
var _bSilent=(arguments.length > 3 ) ? arguments[3] : false;
if (!_bSilent) {