diff options
Diffstat (limited to 'macros/latex/contrib/acrotex/exerquiz.dtx')
-rw-r--r-- | macros/latex/contrib/acrotex/exerquiz.dtx | 517 |
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) { |