summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--texmf-dist/doc/latex/acrotex/README.md8
-rw-r--r--texmf-dist/doc/latex/acrotex/aeb_man.pdfbin2254268 -> 2255476 bytes
-rw-r--r--texmf-dist/doc/latex/acrotex/aeb_man.tex205
-rw-r--r--texmf-dist/doc/latex/acrotex/eformman.pdfbin999978 -> 999995 bytes
-rw-r--r--texmf-dist/doc/latex/acrotex/eformman.tex2
-rw-r--r--texmf-dist/doc/latex/acrotex/examples/jquiztst.pdfbin354518 -> 126756 bytes
-rw-r--r--texmf-dist/doc/latex/acrotex/examples/jquiztst.tex33
-rw-r--r--texmf-dist/source/latex/acrotex/exerquiz.dtx299
-rw-r--r--texmf-dist/source/latex/acrotex/insdljs.dtx6
-rw-r--r--texmf-dist/tex/latex/acrotex/aebjs.def2
-rw-r--r--texmf-dist/tex/latex/acrotex/aebrandom.def5
-rw-r--r--texmf-dist/tex/latex/acrotex/aebsumrytbls.def2
-rw-r--r--texmf-dist/tex/latex/acrotex/exerquiz.sty176
-rw-r--r--texmf-dist/tex/latex/acrotex/insdljs.sty3
-rw-r--r--texmf-dist/tex/latex/acrotex/template.def2
15 files changed, 464 insertions, 279 deletions
diff --git a/texmf-dist/doc/latex/acrotex/README.md b/texmf-dist/doc/latex/acrotex/README.md
index c3b3e38f..e64297bc 100644
--- a/texmf-dist/doc/latex/acrotex/README.md
+++ b/texmf-dist/doc/latex/acrotex/README.md
@@ -1,6 +1,6 @@
The AcroTeX eDucation Bundle (AeB)
Author: D. P. Story
-Dated: 2021-05-10
+Dated: 2021-05-15
AeB contains the following:
@@ -19,6 +19,12 @@ AeB contains the following:
6) Documentation for AeB (AcroTeX eDucatation Bundle) and eforms
(including insdljs and dljslib).
+What's New (2021-05-15)
+ exerquiz: Some bug fixes.
+ Defined the new insertAt key of the \bChoices command. See
+ http://www.acrotex.net/blog/?tag=enhanced-quizzes for discussion
+ and demo files.
+
What's New (2021-05-10)
web: added navibar* option
exerquiz: new option usealtadobe is passed to insdljs
diff --git a/texmf-dist/doc/latex/acrotex/aeb_man.pdf b/texmf-dist/doc/latex/acrotex/aeb_man.pdf
index 56bcb062..1e187364 100644
--- a/texmf-dist/doc/latex/acrotex/aeb_man.pdf
+++ b/texmf-dist/doc/latex/acrotex/aeb_man.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/acrotex/aeb_man.tex b/texmf-dist/doc/latex/acrotex/aeb_man.tex
index 917be858..0969156c 100644
--- a/texmf-dist/doc/latex/acrotex/aeb_man.tex
+++ b/texmf-dist/doc/latex/acrotex/aeb_man.tex
@@ -17,7 +17,7 @@
%%\usepackage{times}
%\usepackage{timesNRMT}
-%\previewOn\pmpvOn
+% \previewOn\pmpvOn
\usepackage{aeb_mlink}
\usepackage{longtable,colortbl}
@@ -243,10 +243,10 @@
\university{{\AcroT} Software Development Team}
\email{dpstory@acrotex.net}
\versionLabel{Dated:}
-\version{2021/05/10}
+\version{2021/05/15}
\copyrightyears{1999-\the\year}
\nocopyright
-\prepared{2021/05/10}
+\prepared{2021/05/15}
\revisionLabel{Distribution Dated:}
\copyrightStatus{True}
@@ -4033,8 +4033,7 @@ this option.
\subsection{Options passed through to the \tops{\protect\pkg}{}{insdljs} package}
The following options are passed through to \pkg{insdljs}: \opt{nodljs},
-\opt{exercisesonly} (same as \opt{nodljs}), \opt{execAfter} (passes the
-option \opt{execJS}), and \opt{usealtadobe}.
+\opt{exercisesonly} (same as \opt{nodljs}), \opt{execJS}, and \opt{usealtadobe}.
\begin{comment}
If you are creating a document that is meant to be printed or your
@@ -5505,14 +5504,25 @@ command.
The commands \cs{bChoices} and \cs{eChoices} can be used within the
\env{answers} or \env{manswers} environment as part of a \texttt{shortquiz}
-or a \texttt{\hyperref[ss:GradedQuizzes]{quiz}} environment.
+or a \texttt{\hyperref[ss:GradedQuizzes]{quiz}} environment. The full syntax of \cs{bChoices}
+is as follows:
+\begin{Verbatim}[commandchars=!(),xleftmargin=\amtIndent]
+\bChoices[!ameta(n(!upshape|nCols=)n),random=!ameta(!upshape(true|false)),
+ insertAt=!ameta(n),label=!ameta(name)]
+\end{Verbatim}
+The \texttt{nCols} and \texttt{random} keys are discussed in
+Section~\ref{s:random}. Read about the key \texttt{insertAt} on the
+{\AcroTeX} Blog
+\href{http://www.acrotex.net/blog/?tag=enhanced-quizzes}{here}. The
+\texttt{label} key is used for cross referencing purposes and is not
+currently documented.
+\newtopic\indent
Concerning the example above, the argument of the \texttt{answers}
-environment is 4 which means we are going to use the tabular
-environment with 4 columns. Now within those 4 columns we are
-going to only use the first 2 columns (this is the optional
-argument of \cs{bChoices}). If the optional argument is removed
-from \cs{bChoices}, the choices are typeset in the with 4
+environment is 4 which means we are going to use the tabular environment with
+4 columns. Now within those 4 columns we are going to only use the first 2
+columns (this is the optional argument of \cs{bChoices}). If the optional
+argument is removed from \cs{bChoices}, the choices are typeset in the with 4
columns.
If the argument of \texttt{answers} or \texttt{manswers} is changed to 1, the
@@ -5876,11 +5886,12 @@ In this section, several commands are discussed that enhance the user experience
One way of making the short-quiz more interesting to the respondent is through
the tally box.
-\bVerb\takeMeasure{\string\answersEndHook\darg{\ameta{content}}}%
+\bVerb\takeMeasure{\string\setAnsEnvLinewidth\darg{\ameta{length}}}%
\begin{dCmd}[commandchars=!()]{\bxSize}
\sqTallyBox[!ameta(options)]
\sqTallyTotal[!ameta(options)]
\answersEndHook{!ameta(content)}
+\setAnsEnvLinewidth{!ameta(length)}
\sqClearButton[!ameta(options)]
\end{dCmd}
\eVerb The first (\cs{sqTallyBox}) tracks the number of times the respondent has
@@ -5896,7 +5907,7 @@ The example below illustrates all four of the commands. Within the
\begin{Verbatim}[xleftmargin=\amtIndent]
\answersEndHook{\hfill\makebox[0pt][r]{\sqTallyBox}}
\end{Verbatim}
-which means \cs{sqTallyBox} is insert to the right of the choice field, push
+which means \cs{sqTallyBox} is insert to the right of the choice field, pushed
to the right margin, then moved to the left using the 0pt width \cs{makebox}.
\begin{shortquiz*}
Correctly respond to each, passing is not making a single incorrect choice.
@@ -5958,13 +5969,14 @@ in a \env{shortquiz} environment.
\begin{aebQuote}
\begin{enumerate}
\item[MC] Nothing happens after the respondent selects the correct answer,
- s/he must press the new \uif{Ans} button to jump to the solution page.
- If the respondent presses the \uif{Ans} button before selecting the
- correct answer, an alert box appears with message determined by \cs{sqSolnMCMsg}.
-\item[MS] When the user has selected \emph{all correct answers}, s/he must press
- the new \uif{Ans} button in order to jump to the solution page. If the
- user presses the \uif{Ans} button before selecting all correct
- answers, an alert box appears with message determined by \cs{sqSolnMSMsg}.
+ the new \uif{Ans} button must be pressed to jump to the solution page. If
+ the respondent presses the \uif{Ans} button before selecting the correct
+ answer, an alert box appears with message determined by \cs{sqSolnMCMsg}.
+\item[MS] When the user has selected \emph{all correct answers}, the new
+ \uif{Ans} button must be pressed in order to jump to the solution page.
+ If the user presses the \uif{Ans} button before selecting all correct
+ answers, an alert box appears with message determined by
+ \cs{sqSolnMSMsg}.
\end{enumerate}
If a MC or MS question does not have a solution, the \uif{Ans} button is not
typeset into the document.
@@ -5999,111 +6011,13 @@ also how \cs{sqTallyBox} is inserted. In this document,
%!textsf( Alternate experience: Insert !cs(sqSolnBtn) and !cs(sqTallyBox))
\answersEndHook{\hfill\makebox[0pt][r]{\sqSolnBtn\sqTallyBox}}
\end{Verbatim}
-\begin{comment}
-The \cs{olBdry} is used to overlay the contiguous boundaries of the two
-button fields. Refer to the documentation, \texttt{eformman.pdf}, for the
-\pkg{eforms} and \pkg{insdljs} packages, which come with the \pkg{acrotex}
-bundle. \cs{answersEndHook} insert its content at the right margin, pushing
-it to the left; as a result, the content may overlay the text of the choice
-field. It is up to the document author, that's you, to design the layout of
-the choice field so the \cs{sqTallyBox} and/or the \cs{sqSolnBtn} does not
-overlay other content.
-
-\promoteNewPageHere[2\textheight]
-
-\paragraph*{A sample quiz to illustrate.}
-These new commands are illustrated in the following short-quiz.
-
-\begin{shortquiz*}
-Answer each of the following. Passing is to
-complete the quiz without selecting any wrong answers.
-
-\answersEndHook{\hfill\makebox[0pt][r]{\sqTallyBox}}
-
-\medskip\noindent
-Problems~1 and~2 are in the style \emph{traditional user experience} that has been
-used since the very beginning of \pkg{exerquiz}.
-
-\begin{questions}
-
-\item\label{MC} In what year did Columbus sail the ocean blue?
-\begin{answers}*{4}
-\bChoices
-\Ans0 1490\eAns
-\Ans0 1491\eAns
-\Ans1 1492\eAns
-\Ans0 1493\eAns
-\eChoices
-\end{answers}
-\begin{solution}
-Columbus sailed the ocean in 1492. It rhymes.
-\end{solution}
-
-\item\label{MS} Which of the following numbers are prime?
-\begin{manswers}*{4}\rowsep{3pt}
-\bChoices
- \Ans0 1\eAns
- \Ans1 2\eAns
- \Ans1 3\eAns
- \Ans0 4\eAns
- \Ans1 5\eAns
- \Ans0 6\eAns
- \Ans1 7\eAns
- \Ans0 8\eAns
-\eChoices
-\end{manswers}
-\begin{solution}
-Yes, 2, 3, 5, and 7; they are the first four prime numbers.
-\end{solution}
-
-\pushquestions Problems~3 and~4 are in the style \emph{alternate user experience}.
-
-\popquestions
-
-\answersEndHook{\hfill\makebox[0pt][r]{\sqSolnBtn\olBdry\sqTallyBox}}
-\item\label{Alt:MC} In what year did Columbus sail the ocean blue?
-\begin{answers}*{4}
-\bChoices
-\Ans0 1490\eAns
-\Ans0 1491\eAns
-\Ans1 1492\eAns
-\Ans0 1493\eAns
-\eChoices
-\end{answers}
-\begin{solution}
-Columbus sailed the ocean in 1492. It rhymes.
-\end{solution}
-
-\item\label{Alt:MS} Which of the following numbers are prime?
-\begin{manswers}*{4}\rowsep{3pt}
-\bChoices
- \Ans0 1\eAns
- \Ans1 2\eAns
- \Ans1 3\eAns
- \Ans0 4\eAns
- \Ans1 5\eAns
- \Ans0 6\eAns
- \Ans1 7\eAns
- \Ans0 8\eAns
-\eChoices
-\end{manswers}
-\begin{solution}
-Yes, 2, 3, 5, and 7; they are the first four prime numbers.
-\end{solution}
-\end{questions}
-\hfill\sqClearButton\olBdry\sqTallyTotal
-\end{shortquiz*}
-\end{comment}
-
% ?? revise after publication
-\exAeBBlogPDF{p=803} The discussion of the alternate viewing experience discussed in this section
-as well as the source markup for the above short quiz, can be found in the {\AcroTeX} Blog titled
-
-%Use the source file for
-%\texttt{\href{\urlAcroTeXBlog/?p=803}{webeqtst.pdf}} as a prototype or
-%template for your own document.
+%\exAeBBlogPDF{p=1489} Additional information, as well as working
+%examples of alternate viewing experiences, can be found in the {\AcroTeX}
+%Blog article \emph{An alternate user experience for viewing solutions to MC/MS
+%questions in a short-quiz.}
\subsubsection{The concept of weak and strong pass levels}
@@ -6123,18 +6037,18 @@ levels are set through the optional argument of \cs{sqTallyTotal}.
\begin{description}
\item[Weak passing level] Syntax: \cs{sqTallyTotal[\cs{weakpassing\darg{\ameta{n}}}]}\\[3pt]
\textbf{User Experience.} As soon as the student makes more than
-\ameta{n} errors, the following message appears in an alert box:
+\ameta{n} errors, the following message appears in an alert dialog box:
\begin{Verbatim}
\flJSStr{\sqWeakMsg}{You have missed too many questions.
After you finish, it is recommended you retake this quiz
with fewer errors and greater understanding.}
\end{Verbatim}
-The student is allowed to continue the quiz, but with the knowledge that s/he
-is not performing to the expected standard, as set by the instructor.
+The student is allowed to continue the quiz, but with the knowledge the
+performance is below the expected standard, as set by the instructor.
\item[Strong passing level] Syntax: \cs{sqTallyTotal[\cs{strongpassing\darg{\ameta{n}}}]}\\[3pt]
\textbf{User Experience.} As soon as the student makes more than \ameta{n}
-errors, the following message appears in an alert box:
+errors, the following message appears in an alert dialog box:
\begin{Verbatim}
\flJSStr{\sqStrongMsg}{You have missed too many questions.
We are resetting the quiz. Start over, this time with
@@ -6142,14 +6056,23 @@ fewer errors and greater understanding.}
\end{Verbatim}
After the student dismisses the alert dialog box, the short-quiz s/he is
working is cleared. Perhaps this condition will inspire the student to
-spend more time and think about his/her responses.
+spend more time and think about the responses.
\end{description}
\end{aebQuote}
In both cases, \ameta{n} is a nonnegative integer.
% ?? revise after publication
-\exAeBBlogPDF{p=803} The discussion of the alternate viewing experience discussed in this section
-as well as the source markup for the above short quiz, can be found in the {\AcroTeX} Blog titled
+%\exAeBBlogPDF{p=1493} The additional discussion of weak and strong passing,
+%as well as working examples of each, can be found in the {\AcroTeX} Blog titled
+%\emph{Setting the passing level in a short-quiz}.
+
+\exAeBBlogPDF{p=tag=enhanced-quizzes} There is a series of four articles on
+enhancing the short-quiz on the {\AcroTeX} Blog. Follow the link set around
+the icon in the margin to obtain a listing of these articles. Additionally,
+the articles document two features of \pkg{exerquiz}: the \texttt{insertAt}
+key of \cs{bChoices} and \cs{setAnsEnvLinewidth}.
+
+
\subsection{Redesigning the
\tops{\protect\texttt{shortquiz}}{shortquiz} Environment}\label{sss:redefinesq}
@@ -6162,7 +6085,7 @@ titles and form elements.
You can temporarily change the title for the \texttt{shortquiz}
environment by redefining the macro \cs{sqlabel}; for example, the
-default definition of this macro is
+default definition of this macro is,
\begin{Verbatim}[xleftmargin=\amtIndent]
\newcommand\sqlabel{\textcolor{red}{Quiz.}}
\end{Verbatim}
@@ -8064,17 +7987,19 @@ for posing a \textit{single} question and will be used in this
section to discuss in detail the macros for posing mathematical
and text open questions.
-The syntax for the \texttt{oQuestion} environment is
-\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
+The syntax for the \texttt{oQuestion} environment is,
+\bVerb\takeMeasure{\quad\ameta{A math or text open ended question}}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
\begin{oQuestion}{!ameta(field_name)}
- !ameta(A math or text open ended question.)
+!quad!ameta(A math or text open ended question)
\end{oQuestion}
-\end{Verbatim}
-\noindent The environment takes one required argument, a unique name for the
+\end{dCmd}
+\eVerb The environment takes one required argument, a unique name for the
question. This name, \ameta{field\_name}, is used by other supporting macros.
-The \env{oQuestion} environment has one hook \cs{oqpriorhook} that is
-expanded just prior to the opening of the environment. If redefined, it is
-used once, then reset to its default empty definition.
+The \env{oQuestion} environment has one hook
+\FmtMP{\cs{oqpriorhook}}\cs{oqpriorhook} that is expanded just prior to the
+opening of the environment. If redefined, it is used once, then reset to its
+default empty definition.
\subsubsection{\tops{\protect\cs{RespBoxMath}}
{\textbackslash RespBoxMath}: The Math Question}\label{ss:respbox}
@@ -8842,7 +8767,7 @@ such a problem is marked by a human teacher, he/she may give full credit or
may dock the credit slightly.
Beginning with \pkg{exerquiz} dated 2020/11/11, the \cs{SpellCheck} command
-and the JavaScript function \texttt{checkTheSpelling()} are
+and the supporting JavaScript function \texttt{checkTheSpelling()} are
defined.\footnote{This feature was suggested to me by Thorsten G.} This a
feature allows the student to use the spell checking of \app{Adobe Reader} to
inspect each word and to optionally change the word to one of the words
@@ -9252,7 +9177,7 @@ KV-pairs of the \pkg{eforms} package. It only accepts these four keys:
its argument (\ameta{code}) to the keystroke event of all response boxes
(\cs{RespBoxMath}, \cs{RespBoxTxt}, and \cs{RespBoxTxtPC}).
- To distinguish between \env{shortquiz} (and \env{oQuestions}) and
+ To distinguish between \env{shortquiz} (and \env{oQuestion}) and
\env{quiz} environments, use the methods explained below in the
description of the \cs{AddAAMouseUpMC} key.
diff --git a/texmf-dist/doc/latex/acrotex/eformman.pdf b/texmf-dist/doc/latex/acrotex/eformman.pdf
index 6a74f299..ef8900e6 100644
--- a/texmf-dist/doc/latex/acrotex/eformman.pdf
+++ b/texmf-dist/doc/latex/acrotex/eformman.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/acrotex/eformman.tex b/texmf-dist/doc/latex/acrotex/eformman.tex
index c56e1beb..bc472205 100644
--- a/texmf-dist/doc/latex/acrotex/eformman.tex
+++ b/texmf-dist/doc/latex/acrotex/eformman.tex
@@ -82,7 +82,7 @@
subject={Documentation for the eforms and insdljs packages},
talksite={\url{www.acrotex.net}},
version={2.0},
- prepared={2021/05/10},
+ prepared={2021/05/15},
preparedLabel={Distribution Dated:},
keywords={LaTeX, hyperref, PDF, exercises, quizzes},
copyrightStatus=True,
diff --git a/texmf-dist/doc/latex/acrotex/examples/jquiztst.pdf b/texmf-dist/doc/latex/acrotex/examples/jquiztst.pdf
index 2646de18..7d18e4eb 100644
--- a/texmf-dist/doc/latex/acrotex/examples/jquiztst.pdf
+++ b/texmf-dist/doc/latex/acrotex/examples/jquiztst.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/acrotex/examples/jquiztst.tex b/texmf-dist/doc/latex/acrotex/examples/jquiztst.tex
index 28031e96..eba2884d 100644
--- a/texmf-dist/doc/latex/acrotex/examples/jquiztst.tex
+++ b/texmf-dist/doc/latex/acrotex/examples/jquiztst.tex
@@ -33,15 +33,14 @@ Department of Mathematics}
% the quiz is evaluated.
%\renewcommand\minQuizResp{highThreshold}
-\font\hv=cmtt10 \def\hvperk{\char`^}
-%\font\hv=hv at 9pt \def\hvperk{\char142 }
+% The following is to create a \js command in which JavaScript code
+% can be written, without the use of the \verb command. Merely cosmetic.
+\def\hvperk{\char`^}
{\catcode`\^=\active
- \gdef\js{\bgroup\hv\catcode`\^=\active \let^=\hvperk \jsi}
+ \gdef\js{\bgroup\ttfamily\catcode`\^=\active \let^=\hvperk \jsi}
}\def\jsi#1{#1\egroup}
-\def\hr#1{\textcolor{red}{#1}}
-\def\hb#1{\textcolor{blue}{#1}}
-
+% Some convenience commands for differentiation.
\def\D{\dfrac {\text{d}}{\text{d}x}}
\def\dPose#1{$\D#1=$ }
@@ -115,7 +114,7 @@ typing error. The JavaScript routines will also check for
unbalanced parentheses; thus, \js{((x^4+1) + sin(x)^2} will be
flagged as a syntax error.
-\medskip\noindent\hr{\textbf{Important:}} When you enter a function
+\medskip\noindent\textcolor{red}{\textbf{Important:}} When you enter a function
of a single variable---the only type currently supported---use as
the independent variable implied by the statement of the problem.
If the problem statement involves the variable $x$, use \js{x} as
@@ -149,9 +148,12 @@ brief discussion.
\subsection{Practice Example}
-\noindent\hb{\textbf{Example:}} Consider the following sample question.
+\noindent\textcolor{blue}{\textbf{Example:}} Consider the following sample question.
Practice by typing in the answer:
-\js{2*x^3*(x^4+1)^(-1/2)}
+\js{2*x^3*(x^4+1)^(-1/2)}.
+
+You can also type \js{2x^3(x^4+1)^(-1/2)} since the
+\texttt{ImplMulti} option is taken with the \textsf{dljslib} package.
\medskip
\begin{oQuestion}{example}
@@ -162,17 +164,17 @@ Practice by typing in the answer:
\noindent$\dfrac{\text{d}}{\text{d}x} {(x^4 + 1)^{1/2}} =
\eqsanitize
\underset{\text{\rotatebox{-45}{\rlap{The Response Box}}}}
- {\underbrace{\STRUT\efKern{1bp}{0bp}
- \RespBoxMath{2*x^3*(x^4+1)^(-1/2)}{4}{.0001}{[1,2]}\relax\efKern{1bp}{0bp}}}\kern-1bp
+ {\underbrace{\RespBoxMath{2*x^3*(x^4+1)^(-1/2)}{4}{.0001}{[1,2]}}}
\underset{\text{\rotatebox{-45}{\rlap{Answer Button}}}}
- {\underbrace{\STRUT\efKern{1bp}{0bp}\CorrAnsButton{2*x^3*(x^4+1)^(-1/2)}\efKern{1bp}{0bp}}}\kern-1bp
+ {\underbrace{\cgBdry\CorrAnsButton{2*x^3*(x^4+1)^(-1/2)}}}
\underset{\text{\rotatebox{-45}{\rlap{Num.\ of incorrect tries}}}}
- {\underbrace{\STRUT\efKern{1bp}{0bp}\sqTallyBox\relax\efKern{1bp}{0bp}}}\olBdry\efKern{-1bp}{0bp}\sqClearButton$
+ {\underbrace{\olBdry\sqTallyBox\relax}}\olBdry\sqClearButton$
\end{oQuestion}
\vspace{5\bigskipamount}
+\noindent
When a correct answer is input into the response box, the color of
the border surrounding the response box changes to \textcolor{webgreen}{green}.
The answer can also be expressed correctly using the \js{sqrt}
@@ -227,12 +229,9 @@ Or, in the syntax of this quiz: \js{-2*t^(-3/2)}.
\item $\displaystyle\int_0^\pi \sin(x)\,dx
= \RespBoxMath{2}{1}{.0001}{[0,1]}$\hfill\CorrAnsButton{2}\olBdry\sqTallyBox
\end{questions}
+\hfill\sqClearButton\olBdry\sqTallyTotal
\end{shortquiz*}
-\begin{flushright}
-\sqClearButton\olBdry\sqTallyTotal
-\end{flushright}
-
\subsection{Quiz Environment}\label{s:quiz}
diff --git a/texmf-dist/source/latex/acrotex/exerquiz.dtx b/texmf-dist/source/latex/acrotex/exerquiz.dtx
index d73c3efd..3890683a 100644
--- a/texmf-dist/source/latex/acrotex/exerquiz.dtx
+++ b/texmf-dist/source/latex/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/05/10 v8.7.7 %
+%<package|driver|aebjs|eqexam|randomize|sumrytbls|template> [2021/05/15 v8.8 %
%<package> Exerquiz: Exercises and Quizzes for LaTeX/PDF package (dps)]
%<driver> Exerquiz documentation driver file (dps)]
%<aebjs> Exerquiz document level JavaScript (dps)]
@@ -74,6 +74,7 @@
\let\env\texttt\let\pkg\textsf
\let\app\textsf
\let\tops\texorpdfstring
+ \let\key\texttt
\GetFileInfo{exerquiz.sty}
\title{Exerquiz: Exercises and Quizzes for \LaTeX/PDF}
\author{D. P. Story\\
@@ -277,7 +278,7 @@
\DeclareOption{nodljs}{\PassOptionsToPackage{nodljs}{insdljs}%
\AtEndOfPackage{\let\importdljs\eq@YES}}
% \end{macrocode}
-% \leavevmode\IndexOpt{execAfter}^^A
+% \leavevmode\IndexOpt{execJS}^^A
% Execute any JS defined within the \env{execJS} environment. Works only for
% authors using Acrobat 5.0 or Acrobat Approval.
% \begin{macrocode}
@@ -3945,6 +3946,96 @@
%
% \section{The \texttt{shortquiz} and \texttt{shortquiz*} Environments}
%
+% \subsection{Preliminaries}
+% Beginning with 2021/05/15 v8.7, we introduce several changes that affect
+% both \env{shortquiz} and \env{quiz} environments. These definitions are
+% placed here.
+% \changes{v8.7}{2021/05/15}{Enhanced control over placement of \string\cs{eq@answersEndHook}}
+%
+% These definitions support the added control over the \ameta{content} placed by the
+% command \cs{answersEndHook\darg{\ameta{content}}}. The \ameta{content} argument is
+% usally a combination of \cs{sqTallyBox} and \cs{sqSolnBtn} commands, but can be anything.
+%
+% Another aspect of the change is the \cs{setAnsEnvLinewidth}. Through this command, the
+% value of \cs{linewidth} can be changed within the \env{answers} and \env{manswers} environmnts.
+% \begin{macro}{\setAnsEnvLinewidth}\hskip-\marginparsep\,\texttt{\darg{\ameta{length}}} Sets the
+% \cs{linewidth} of the \env{answers} and \env{manswers} for both the \env{list} and \env{tabular} modes.
+% It it not shown here, but within each of these envioronments, before the change is made
+% the ``natural'' \cs{linewidth} is saved as \DescribeMacro\natlinewidth\cs{natlinewidth},
+% this value is available only locally, within the environments.
+%
+% All changes corresponding to enhanced control over placement of \ameta{content} are marked in the source
+% by \texttt{dps21-5-15}, \texttt{dps21-5-16}, and \texttt{dps21-5-17}.
+% \begin{macrocode}
+\def\setAnsEnvLinewidth#1{\def\@nsLineWidth{#1}} % dps21-5-17
+\let\@nsLineWidth\@empty % dps21-5-17
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\answersEndHook}\hskip-\marginparsep\,\texttt{\darg{\ameta{content}}}
+% Internally, defines the text macro \cs{eq@answersEndHook} to expand to \ameta{content}.
+% The command also defines text macro \cs{insertAnsEndHookHere} to expand to \ameta{content}.
+% \cs{eq@answsersEndHook} is used when placing \ameta{content} in the default location;
+% while \cs{insertAnsEndHookHere} is used to place \ameta{content} at the location specified
+% by the value of the \texttt{insertAt} key of the \cs{bChoices} command.
+% \begin{macrocode}
+\newcommand\answersEndHook[1]{\def\eq@answersEndHook{#1}%
+ \ifx\eq@answersEndHook\@empty\else
+ \def\insertAnsEndHookHere{#1}%
+ \fi
+} % dps21-5-15
+\let\eq@answersEndHook\@empty
+\let\insertAnsEndHookHere\@empty % dps21-5-15
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+% \end{macrocode}
+% At the end of each of the targeted envionments, we insert \ameta{content},
+% provided a value for \texttt{insertAt} has not been specified; otherwise, we
+% do nothing as \ameta{content} has been inserted according to the value
+% of \texttt{insertAt}.
+% \begin{macrocode}
+\def\@insertAndHookAtEndEnv{% dps21-5-16
+ \ifx\insertAnsHookAt\@empty
+ \eq@answersEndHook
+ \else % dps21-5-16
+ \ifnum\insertAnsHookAt>\aeb@RowCnt
+ \eq@answersEndHook
+ \PackageWarning{exerquiz}{insertAt=\insertAnsHookAt:
+ The value (\insertAnsHookAt) of insertAt is greater\MessageBreak
+ than the number of rows (\aeb@RowCnt).
+ Using the default\MessageBreak
+ positioning instead}
+ \else
+% \end{macrocode}
+% Reset the value of \cs{insertAnsHookAt} to its default value. The document
+% author must specify \texttt{insertAt} for each \cs{eChoices} where a nondefault
+% placement is wanted.
+% \begin{macrocode}
+ \global\let\insertAnsHookAt\@empty
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \cs{@insertAnsHookAt} is inserted at the end of \cs{Ans}/\cs{eAns} pair;
+% the \ameta{content} is placed just after the text of this item.
+% \begin{macrocode}
+\def\@insertAnsHookAt{% dps21-5-16
+ \let\eqe@next\relax
+ \ifx\insertAnsHookAt\@empty\else
+ \ifnum\insertAnsHookAt=\aeb@RowCnt
+ \def\eqe@next{\insertAnsEndHookHere}\fi
+ \fi\eqe@next
+}
+% \end{macrocode}
+% Repetitive code to increment the \cs{aeb@RowCnt} macro.
+% \begin{macrocode}
+\def\@incRowCnt{{\@tempcnta\aeb@RowCnt\advance\@tempcnta\@ne
+ \xdef\aeb@RowCnt{\the\@tempcnta}}% dps21-5-16
+}
+% \end{macrocode}
+%
+% \subsection{The \texttt{shortquiz} environment}
+%
% This \texttt{shortquiz} environment sets up multiple choice
% questions, with immediate feedback whether the user clicked on the
% right or wrong answer. Solutions to the \texttt{shortquiz} may,
@@ -5921,6 +6012,13 @@ if (isEndQuizPushed("@eqBaseName")){
\let\endanswers\endanswers@sq@list\else
\let\endmanswers\endanswers@sq@list\fi
\list{\strut\@Ans}{%
+% \end{macrocode}
+% Save the natural width of the line, then readjust the
+% width if \cs{@nsLineWidth} is not empty.
+% \begin{macrocode}
+ \edef\natlinewidth{\the\linewidth}% dps21-5-17
+ \ifx\@nsLineWidth\@empty\else % dps21-5-17
+ \setlength{\linewidth}{\@nsLineWidth}\fi
\if\sqstar*\relax
\settowidth{\labelwidth}{\eq@lw@f}\else
\settowidth{\labelwidth}{\eq@lw@l}\fi
@@ -5959,14 +6057,14 @@ if (isEndQuizPushed("@eqBaseName")){
% another for \texttt{exerquiz}.
% to the following.
% \begin{macrocode}
-% Begin joint package and eqexam
+% End joint package and eqexam
%</package|eqexam>
%<package> \setlength{\labelsep}{0pt}%
%<eqexam> \setlength{\labelsep}{0pt}%
%<*package|eqexam>
\def\Ans{\Ans@list}%
}% list
-}{\eq@answersEndHook\endlist\setcounter{quizno}{0}}
+}{\@insertAndHookAtEndEnv\endlist\setcounter{quizno}{0}} % dps21-5-16
% \end{macrocode}
% Answers environment for a tabular environment. This command picks
% up the arguments of \cs{Ans}, then passes on the \cs{@Ans}
@@ -6010,13 +6108,19 @@ if (isEndQuizPushed("@eqBaseName")){
% In the next line, we adjust \cs{linewidth}, \cs{eqemargin} is \texttt{0pt}
% in \textsf{exerquiz} and nonzero otherwise.
% \begin{macrocode}
-% \setlength{\linewidth}{\linewidth-\eqemargin}%
- \eq@tmpdima=\linewidth
+% \end{macrocode}
+% Save the natural width of the line, then readjust the
+% width if \cs{@nsLineWidth} is not empty.
+% \begin{macrocode}
+ \edef\natlinewidth{\the\linewidth}% dps21-5-17
+ \ifx\@nsLineWidth\@empty\else % dps21-5-17
+ \setlength{\linewidth}{\@nsLineWidth}\fi
+ \eq@tmpdima\linewidth
\@tempcnta#1\relax
% n-1
- \advance\@tempcnta-1\relax
+ \advance\@tempcnta\m@ne\relax
% 2(n-1)
- \multiply\@tempcnta by2
+ \multiply\@tempcnta\tw@
\@tempdima\sq@tabsep\relax
% 2*(n-1)*\eq@partstabcolsep
\multiply\@tempdima\@tempcnta
@@ -6059,23 +6163,25 @@ if (isEndQuizPushed("@eqBaseName")){
% Close off \texttt{tabular} environment, and re-initialize the
% \texttt{quizno} counter. Added \cs{answersEndHook}.
% \begin{macrocode}
-\newcommand\answersEndHook[1]{\def\eq@answersEndHook{#1}%
- \ifx\eq@answersEndHook\@empty\else
- \def\insertEndHookHere{#1}\fi}
-\let\eq@answersEndHook\@empty
\def\endanswers@sq{\endtabular\setcounter{quizno}{0}%
- \eq@answersEndHook\reset@doendpe{\the\everypar}%
- \ifinner\else%\par
- \removelastskip
-% \removelastparskip
- \vspace{\aboveanswersSkip}\@endpetrue\fi
+ \@insertAndHookAtEndEnv % dps21-5-16
+ \global\let\@nsLineWidth\@empty % dps21-5-17
+ \reset@doendpe{\the\everypar}%
+ \ifinner\else%\par
+ \removelastskip
+% \removelastparskip
+ \vspace{\aboveanswersSkip}\@endpetrue
+ \fi
}
\def\endmanswers@sq{\endtabular\setcounter{quizno}{0}%
- \eq@answersEndHook\reset@doendpe{\the\everypar}%
- \ifinner\else%\par
- \removelastskip
-% \removelastparskip
- \vspace{\aboveanswersSkip}\@endpetrue\fi
+ \@insertAndHookAtEndEnv % dps21-5-16
+ \global\let\@nsLineWidth\@empty % dps21-5-17
+ \reset@doendpe{\the\everypar}%
+ \ifinner\else%\par
+ \removelastskip
+% \removelastparskip
+ \vspace{\aboveanswersSkip}\@endpetrue
+ \fi
}
\def\popiiictm{\special{CTM: pop pop pop}}
%</package|eqexam>
@@ -6206,7 +6312,7 @@ false*fi;
var f=this.getField("corr.*oField.*thequestionno");
if (f==null) {
if ((qzSolnDest!="") && !solnAfter) %
- jmpToNamedDest("*oField","*@qzsolndest",%
+jmpToNamedDest("*oField","*@qzsolndest",%
*ifx*@sqTurnOffAlerts*eq@Zero0*else1*fi);%
*ifx*eqAddAAMouseUpMC*empty*else
*eqAddAAMouseUpMC*fi
@@ -6221,7 +6327,7 @@ if (f==null) {
OnBlurRespBox(false,"*oField");
*fi%
var qzSolnDest="*@qzsolndest";
-if( qzSolnDest!="") updateTally("*oField.*thequestionno");%
+updateTally("*oField.*thequestionno");%
*ifx*eqAddAAMouseUpMC*empty*else
*eqAddAAMouseUpMC*fi
\end{defineJS}
@@ -6561,6 +6667,13 @@ updateTally("*oField.*thequestionno");*fi%
\let\endanswers\endanswers@q@list\else
\let\endmanswers\endanswers@q@list\fi
\list{\strut\@Ans}{%
+% \end{macrocode}
+% Save the natural width of the line, then readjust the
+% width if \cs{@nsLineWidth} is not empty.
+% \begin{macrocode}
+ \edef\natlinewidth{\the\linewidth}% dps21-5-17
+ \ifx\@nsLineWidth\@empty\else % dps21-5-17
+ \setlength{\linewidth}{\@nsLineWidth}\fi
\if\qstar*\relax
\if\aeb@FLOverride\eq@l
\settowidth{\labelwidth}{\eq@lw@l}\else
@@ -6577,7 +6690,9 @@ updateTally("*oField.*thequestionno");*fi%
\setlength{\labelsep}{0pt}%
\def\Ans{\Ans@list}%
}%
-}{\eq@answersEndHook\endlist\setcounter{quizno}{0}%
+}{\endlist\setcounter{quizno}{0}%
+ \@insertAndHookAtEndEnv % dps21-5-17
+ \global\let\@nsLineWidth\@empty % dps21-5-17
\setdefault@Ans
\ifx\aeb@answerType\aeb@answerType@r
% \end{macrocode}
@@ -6603,7 +6718,14 @@ updateTally("*oField.*thequestionno");*fi%
\def\qzTabPos#1{\def\qz@TabPos{[#1]}}\qzTabPos{}
\def\answers@q@tabular#1{%
\ifinner\else\par\removelastparskip\vspace{\aboveanswersSkip}\fi
- \eq@tmpdima=\linewidth
+% \end{macrocode}
+% Save the natural width of the line, then readjust the
+% width if \cs{@nsLineWidth} is not empty.
+% \begin{macrocode}
+ \edef\natlinewidth{\the\linewidth}% dps21-5-17
+ \ifx\@nsLineWidth\@empty\else % dps21-5-17
+ \setlength{\linewidth}{\@nsLineWidth}\fi
+ \eq@tmpdima\linewidth
\@tempcnta#1\relax
% n-1
\advance\@tempcnta\m@ne
@@ -6630,7 +6752,8 @@ updateTally("*oField.*thequestionno");*fi%
% \begin{macrocode}
\def\endanswers@q@tabular{%
\endtabular\setcounter{quizno}{0}%
- \eq@answersEndHook
+ \@insertAndHookAtEndEnv % dps21-5-17
+ \global\let\@nsLineWidth\@empty % dps21-5-17
\setdefault@Ans
\ifx\aeb@answerType\aeb@answerType@r
% \end{macrocode}
@@ -7100,13 +7223,40 @@ updateTally("*oField.*thequestionno");*fi%
}
% \end{macrocode}
% \changes{v6.3x}{2011/04/05}{%
-% Added \string\texttt{label} parameter to \string\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
+% A new key, \IndexKey{label}\texttt{label=\ameta{name}}, 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.
% \begin{macrocode}
\define@key{bchoice}{label}[]{\xdef\bChoiceLabel{#1}}
% \end{macrocode}
+% New key, \IndexKey{insertAt}\texttt{insertAt=\ameta{n}} inserts the content of
+% the \cs{answersEndHook\darg{\ameta{content}}} at line \ameta{n}.
+% \begin{macrocode}
+\def\rmFracPrt#1.#2\@nil{\gdef\intPrt{#1}}
+\define@key{bchoice}{insertAt}[]{%
+ \let\insertAtMsg\relax
+ \def\rmFr@cPrt##1.##2\@nil{\def\intP@rt{##1}}
+ \def\@rgi{#1}\ifx\@rgi\@empty
+ \def\insertAtMsg{\PackageWarning{exerquiz}
+ {An empty value for insertAt, will use\MessageBreak
+ the default positioning}}%
+ \else
+ \rmFr@cPrt#1.\@nil
+ \expandafter\@tempcnta\intP@rt\relax
+ \ifnum\@tempcnta<\@ne
+ \def\insertAtMsg{\PackageWarning{exerquiz}
+ {insertAt=#1: The value (#1) of insertAt must be\MessageBreak
+ greater than zero. Using the default\MessageBreak
+ positioning instead}}
+ \else
+ \xdef\insertAnsHookAt{\the\@tempcnta}
+ \fi
+ \fi
+ \insertAtMsg
+} % dps21-5-15
+\let\insertAnsHookAt\@empty
+% \end{macrocode}
% The \cs{bChoices} command is now processed by the \texttt{keyval} package. There
% are two keys: \texttt{nCols} and \texttt{random}. The first key
% sets the number of columns we are limited to; the second one obviously declares
@@ -7121,11 +7271,11 @@ updateTally("*oField.*thequestionno");*fi%
% \end{macrocode}
% We initialize some variables that the new label option uses.
% \begin{macrocode}
- \global\let\@tempholdSaveAns\@empty %4/5
- \global\let\@tempholdSaveChoice\@empty %4/5
- \global\let\bChoiceLabel\@empty %4/5
- \setkeys{bchoice}{#1}%
- \global\eq@tabColCnt=\z@
+ \global\let\@tempholdSaveAns\@empty
+ \global\let\@tempholdSaveChoice\@empty
+ \global\let\bChoiceLabel\@empty
+ \setkeys{bchoice}{#1}% dps21-5-15
+ \def\aeb@RowCnt{0}\global\eq@tabColCnt\z@
\ifnum\aeb@numCols=\@ne % list mode
\def\eq@next{\@layoutListAns}\else % tabular mode
\def\eq@next{\@layoutTabularAns{\bChoiceNumCols}}\fi
@@ -7284,12 +7434,14 @@ updateTally("*oField.*thequestionno");*fi%
% This command gets, and sets the list of alternatives
% \begin{macrocode}
\long\def\@getListAns\Ans#1\eAns{%\@@par
+ \@incRowCnt % dps21-5-16
% \end{macrocode}
% We record the list as we process each item.
% \begin{macrocode}
\eq@saveAns#1\eAns
- \Ans#1\vspace{\@rowskip}%
- \@layoutListAns
+ \Ans#1% dps21-5-15
+ \@insertAnsHookAt % dps21-5-16
+ \vspace{\@rowskip}\@layoutListAns
}
\long\def\@lookforendansChoices#1{%
\@ifnextchar\eChoices{\rowsep{\rowsep@default}%
@@ -7301,8 +7453,17 @@ updateTally("*oField.*thequestionno");*fi%
% environment.
% \begin{macrocode}
\def\@layoutTabularAns#1{%
+ \@incRowCnt % dps21-5-16
\let\eq@tabSep\@empty
\xdef\numShortCols{#1}%
+%\typeout{!! compare #1 with \aeb@numCols}%
+ \@tempcnta\aeb@numCols % dps21-5-16
+ \advance\@tempcnta-#1
+%\typeout{!! need \the\@tempcnta\space more tabs}%
+ \global\let\nAddT@bs\@empty
+ \@whilenum\@tempcnta>\z@\do
+ {\g@addto@macro\nAddT@bs{&}\advance\@tempcnta\m@ne}%
+%\toks@=\expandafter{\nAddT@bs}\typeout{!! \the\toks@}%
\ifnum#1>\aeb@numCols \xdef\numShortCols{\aeb@numCols}\fi
\@@layoutTabularAns
}
@@ -7323,16 +7484,21 @@ updateTally("*oField.*thequestionno");*fi%
\def\rowsep@default{0pt}
\long\def\@getTabAns\Ans#1\eAns{%
\eq@saveAns#1\eAns
- \global\advance\eq@tabColCnt1
- \let\@save@tabSep=\eq@tabSep
+ \global\advance\eq@tabColCnt\@ne % dps21-5-16
+ \let\@save@tabSep\eq@tabSep % dps21-5-16
\ifnum\eq@tabColCnt=\numShortCols
- \global\eq@tabColCnt=0
- \xdef\eq@tabSep{\noexpand\\\noalign{\kern\@rowskip\relax}}%
+ \global\eq@tabColCnt\z@ % dps21-5-16
+ \xdef\eq@tabSep{%
+ \noexpand\nAddT@bs
+ \noexpand\@insertAnsHookAt
+ \noexpand\\
+ \noalign{\kern\@rowskip\relax}\noexpand\@incRowCnt
+ }%
\else
- \gdef\eq@tabSep{&}%
+ \gdef\eq@tabSep{&}%
\fi
- \@ifnextchar\eChoices{\@save@tabSep\Ans#1\rowsep{\rowsep@default}
- \expandafter\@findendans\@gobble}%
+ \@ifnextchar\eChoices{\@save@tabSep\Ans#1\rowsep{\rowsep@default}%
+ \nAddT@bs\@insertAnsHookAt\expandafter\@findendans\@gobble}%
{\@save@tabSep\Ans#1\@@layoutTabularAns}%
}
% \end{macrocode}
@@ -7472,7 +7638,7 @@ updateTally("*oField.*thequestionno");*fi%
% that this list of choices should be randomized, a boolean.
%
% We redefine \cs{@ansChoices} above to take key-value optional arguments.
-% We allow for a global override of the random key. If random is true, we
+% We allow for a global override of the \key{random} key. If \key{random} is true, we
% call \cs{@@bChoices}, which begins the process of randomization; otherwise
% we call \cs{@@ansChoices} which is roughly equal to the earlier
% \cs{@ansChoices}.
@@ -7483,6 +7649,8 @@ updateTally("*oField.*thequestionno");*fi%
% }
% \changes{v8.6.2}{2021/01/20}{Incorporated \string\cs{if@DoNotRandomize}
% into the \string\cs{@ansChoices} macro for MC and MS questions}
+% \changes{v8.7}{2021/05/15}{Support for the \texttt{insertAt} key
+% of \cs{bChoices}; initialize macro \string\cs{aeb@numRows}}
% \begin{macrocode}
\def\@ansChoices[#1]{%
\global\let\@tempholdSaveAns\@empty
@@ -7491,7 +7659,8 @@ updateTally("*oField.*thequestionno");*fi%
\ifeq@randomizeallChoices
\setkeys{bchoice}{#1,random=true}\else
\setkeys{bchoice}{#1}\fi
- \global\eq@tabColCnt=\z@
+ \global\eq@tabColCnt\z@
+ \def\aeb@RowCnt{0}% dps21-5-15
\if@DoNotRandomize\eq@randomizeChoicesfalse\fi
\ifeq@randomizeChoices\expandafter\@@bChoices
\else\expandafter\@@ansChoices\fi
@@ -9028,7 +9197,7 @@ if(event.willCommit) {
% \begin{macro}{\RespBoxEssay}
% Here is a simple text field with a multi-line attribute for entering
% essay-type questions. This question will not be graded by JavaScript,
-% of course; ideally, the response will be submitted to a CGI for storage
+% of course; ideally, the response will be submitted to a server-side script for storage
% in a database. The instructor can later bring up the student's response
% and assign a grade. Syntax:
%\begin{quote}\ttfamily
@@ -9036,15 +9205,15 @@ if(event.willCommit) {
% \string\RespBoxEssay[\ameta{opts}]*\darg{\ameta{wd}}\darg{\ameta{ht}}
% \end{quote}
% The second argument declares the problem has a \env{solution} file; we define the target
-% of the solution twh ways: an explicit \ameta{dest} string, or an star (\texttt*), where
+% of the solution two ways: an explicit \ameta{dest} string or a star (\texttt*), where
% the destination is automatically named. If you use \ameta{dest}, you must have
-% a frist optional, even if its only \texttt{[]}, to correctly parse this construction.
+% a first optional argument \ameta{opts}, even if its only empty (\texttt{[]}), to correctly
+% parse this construction.
% \changes{v8.3}{2019/08/13}{\string\env{solution} environment now defined for
% \string\cs{RespBoxEssay}}
% \begin{macrocode}
-\def\RespBoxEssayDefaults
-{%
- \BC{0 0 0}\W{1}\S{S}\Ff{\FfMultiline}\rawPDF{}%
+\def\RespBoxEssayDefaults{%
+ \BC{0 0 0}\W{1}\S{S}\Ff{\FfMultiline}\rawPDF{}%
}
\def\@@RespBoxEssayActions{\AA{%
\if\eqQuizType\isQZ
@@ -9061,7 +9230,9 @@ if(event.willCommit) {
}%
\fi}%
}
-% \RespBoxEssay[opt][dest]|*{wd}{ht}
+% \end{macrocode}
+% Begin the \cs{RespBoxEassay} command.
+% \begin{macrocode}
\def\annot@subtype@rbe{rbe}
\newcommand\RespBoxEssay[1][]{\edef\annot@subtype{\annot@subtype@rbe}%
\def\rbe@rgi{#1}\RespBoxEssay@i}
@@ -9070,12 +9241,12 @@ if(event.willCommit) {
{\@ifstar{\RespBoxEssay@ii[\curr@quiz.\thequestionno]}}%
{\RespBoxEssay@ii[]}%
}
-% \RespBoxEssay#1[dest]{wd}{ht}
\newcommand\RespBoxEssay@ii[3][]{%
\smallskip\addtocounter{eqpointvalue}{\eqPTs}%
% \end{macrocode}
% (2019/06/26) Added \cs{eq@AddProbToQzQuesList} for \cs{RespBoxEssay}
-% \changes{v8.2.13}{2019/06/26}{Added \string\cs{eq@AddProbToQzQuesList} for \string\cs{RespBoxEssay}}
+% \changes{v8.2.13}{2019/06/26}{Added \string\cs{eq@AddProbToQzQuesList}
+% for \string\cs{RespBoxEssay}}
% \begin{macrocode}
\eq@AddProbToQzQuesList
\stepcounter{questionno}%
@@ -9100,14 +9271,8 @@ if(event.willCommit) {
% question. This box is not required to appear.
% \begin{macrocode}
\let\@@sqTallyBoxActions\@empty
-%\@ifundefined{calcOrder}{%
-%\ifpdf\def\@@sqTallyBoxActions{%
-% \AA{\AAValidate{getTotalTally("\oField");}}}\fi}{}
-%\ifpdf\def\@@sqTallyBoxActions{%
-% \AA{\AAValidate{getTotalTally("\oField");}}}\else
-% \let\@@sqTallyBoxActions\@empty\fi
\def\sqTallyBoxDefaults{%
- \BC{0 0 0}\W{1}\textColor{1 0 0 rg}\S{I}\Q{2}\Ff{\FfReadOnly}}
+ \BC{0 0 0}\W{1}\textColor{1 0 0 rg}\S{I}\Q{2}\Ff{\FfReadOnly}}
\newcommand\sqTallyBox[1][]{%
\mbox{\text@@Field{#1}{tally.\oField.\thequestionno}%
{\TBW}{\DefaultHeightOfWidget}%
@@ -9119,7 +9284,7 @@ if(event.willCommit) {
% \subsubsection{The \tops{\protect\cs}{\textbackslash}{sqTallyTotal} command}
% \begin{macro}{\sqTallyTotal}\hskip-\marginparsep\texttt{[\ameta{options}]}
% This text field stores the tally total. Only used within the
-% \texttt{shortquiz} environment. Takes on optional parameter; this
+% \env{shortquiz} environment. Takes on optional parameter; this
% parameter can be used to modify the appearance of the fields. Two special
% key-values are also recognized: \cs{weakpass\darg{\ameta{n}}} and \cs{strongpass\darg{\ameta{n}}}
% \begin{macrocode}
@@ -9144,10 +9309,11 @@ fewer errors and greater understanding.}
% \end{macrocode}
% The code that formats the field and if needed, responds to the weak-pass
% or strong-pass parameter.
+% \changes{v8.7.8}{2021/05/13}{Use try/catch (\string\cs{dlTC}) in number format.}
% \begin{macrocode}
\def\@@sqTallyTotalActions{\AA{%
\AAKeystroke{\dl@EForAF4Number_Keystroke(0,0,0,0,"",true);}
- \AAFormat{\dl@EForAF4Number_Format(0,0,0,0,"",true);}
+ \AAFormat{\dlTC{\dl@EForAF4Number_Format(0,0,0,0,"",true);}}
\AACalculate{%
\dl@EForAF4Simple_Calculate("SUM",new Array("tally.\oField"));\r
var sqTlyTotl=event.value;
@@ -9216,10 +9382,9 @@ fewer errors and greater understanding.}
% now, we say \string\texttt{this.getField("obj.\string\cs{oField}")}.
%}
% \begin{macrocode}
-\def\sqClearButtonDefaults
-{%
- \CA{\eq@local@sqClearButton}\textColor{0 g}\F{\FPrint}
- \BC{0 0 0}\BG{.7529 .7529 .7529}\W{1}\S{B}\Ff{\FfNoExport}
+\def\sqClearButtonDefaults{%
+ \CA{\eq@local@sqClearButton}\textColor{0 g}\F{\FPrint}
+ \BC{0 0 0}\BG{.7529 .7529 .7529}\W{1}\S{B}\Ff{\FfNoExport}
}
% \end{macrocode}
% In an attempt to supply some custom colors for the shortquiz, we
diff --git a/texmf-dist/source/latex/acrotex/insdljs.dtx b/texmf-dist/source/latex/acrotex/insdljs.dtx
index 8df24984..7f848638 100644
--- a/texmf-dist/source/latex/acrotex/insdljs.dtx
+++ b/texmf-dist/source/latex/acrotex/insdljs.dtx
@@ -16,7 +16,7 @@
%</copyright>
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{insdljs}
-%<package> [2021/05/10 v2.5.3 Insert Document Level JavaScripts (dps)]
+%<package> [2021/05/13 v2.5.4 Insert Document Level JavaScripts (dps)]
%<*driver>
\documentclass{ltxdoc}
\usepackage[colorlinks,hyperindex=false]{hyperref}
@@ -931,9 +931,11 @@
% \end{macrocode}
% \paragraph*{Convenience command\DescribeMacro{\dl@EForAF4} that support \opt{usealtadobe} option.} This helper
% command make it convenient to switch from the `AF' to the `EF' versions.
-% \changes{v2.5.3}{2021/05/10}
+% \changes{v2.5.3}{2021/05/10}{Added \string\cs{dl@EForAF4}}
+% \changes{v2.5.4}{2021/05/13}{Added \string\cs{dl@EForAFMergeChange}}
% \begin{macrocode}
\def\dl@EForAF4#1_{\ifx\usedAdbFuncs\dl@YES EF\else AF\fi#1_}
+\def\dl@EForAFMergeChange{\ifx\usedAdbFuncs\dl@YES EF\else AF\fi MergeChange}
% \end{macrocode}
% \subsection{Some JavaScript Support}
%
diff --git a/texmf-dist/tex/latex/acrotex/aebjs.def b/texmf-dist/tex/latex/acrotex/aebjs.def
index a0fb5916..f8dd2dbc 100644
--- a/texmf-dist/tex/latex/acrotex/aebjs.def
+++ b/texmf-dist/tex/latex/acrotex/aebjs.def
@@ -18,7 +18,7 @@
%% License, or (at your option) any later version. %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ProvidesFile{aebjs.def}
- [2021/05/10 v8.7.7 %
+ [2021/05/15 v8.8 %
Exerquiz document level JavaScript (dps)]
\def\aeb@array{new Array}
\def\refac#1{\\(#1\\)}\def\regrp#1{(#1)}\def\rechrclass#1{[#1]}
diff --git a/texmf-dist/tex/latex/acrotex/aebrandom.def b/texmf-dist/tex/latex/acrotex/aebrandom.def
index f648e885..856d4a69 100644
--- a/texmf-dist/tex/latex/acrotex/aebrandom.def
+++ b/texmf-dist/tex/latex/acrotex/aebrandom.def
@@ -18,7 +18,7 @@
%% License, or (at your option) any later version. %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ProvidesFile{aebrandom.def}
- [2021/05/10 v8.7.7 %
+ [2021/05/15 v8.8 %
Exerquiz support for randomization (dps)]
\@ifundefined{nextrandom}{\input{random.tex}}{}
\def\nextrandom{\begingroup
@@ -50,7 +50,8 @@
\ifeq@randomizeallChoices
\setkeys{bchoice}{#1,random=true}\else
\setkeys{bchoice}{#1}\fi
- \global\eq@tabColCnt=\z@
+ \global\eq@tabColCnt\z@
+ \def\aeb@RowCnt{0}% dps21-5-15
\if@DoNotRandomize\eq@randomizeChoicesfalse\fi
\ifeq@randomizeChoices\expandafter\@@bChoices
\else\expandafter\@@ansChoices\fi
diff --git a/texmf-dist/tex/latex/acrotex/aebsumrytbls.def b/texmf-dist/tex/latex/acrotex/aebsumrytbls.def
index c4213d4d..e0c42972 100644
--- a/texmf-dist/tex/latex/acrotex/aebsumrytbls.def
+++ b/texmf-dist/tex/latex/acrotex/aebsumrytbls.def
@@ -18,7 +18,7 @@
%% License, or (at your option) any later version. %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ProvidesFile{aebsumrytbls.def}
- [2021/05/10 v8.7.7 %
+ [2021/05/15 v8.8 %
Exerquiz support for summary tables (dps)]
\def\ccatCurrQzWith(#1){\currQuiz#1}
\def\pbPopulateSumTable{\pushButton[\W0\BG{}\BC{}\S{S}\autoCenter{n}
diff --git a/texmf-dist/tex/latex/acrotex/exerquiz.sty b/texmf-dist/tex/latex/acrotex/exerquiz.sty
index 2815e490..c1cd8eb8 100644
--- a/texmf-dist/tex/latex/acrotex/exerquiz.sty
+++ b/texmf-dist/tex/latex/acrotex/exerquiz.sty
@@ -19,7 +19,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{exerquiz}
- [2021/05/10 v8.7.7 %
+ [2021/05/15 v8.8 %
Exerquiz: Exercises and Quizzes for LaTeX/PDF package (dps)]
\usepackage{keyval}
\RequirePackage{ifpdf}[2006/02/20]
@@ -1706,6 +1706,41 @@
\begin{questions}[\csname quesOpts\@quesctr\endcsname]%
\setcounter{\@quesctr}{\csname save\@quesctr\endcsname}%
\@ifnextchar\popquestions{\item[]}{\@ifnextchar\begin{\item[]}{}}}
+\def\setAnsEnvLinewidth#1{\def\@nsLineWidth{#1}} % dps21-5-17
+\let\@nsLineWidth\@empty % dps21-5-17
+\newcommand\answersEndHook[1]{\def\eq@answersEndHook{#1}%
+ \ifx\eq@answersEndHook\@empty\else
+ \def\insertAnsEndHookHere{#1}%
+ \fi
+} % dps21-5-15
+\let\eq@answersEndHook\@empty
+\let\insertAnsEndHookHere\@empty % dps21-5-15
+\def\@insertAndHookAtEndEnv{% dps21-5-16
+ \ifx\insertAnsHookAt\@empty
+ \eq@answersEndHook
+ \else % dps21-5-16
+ \ifnum\insertAnsHookAt>\aeb@RowCnt
+ \eq@answersEndHook
+ \PackageWarning{exerquiz}{insertAt=\insertAnsHookAt:
+ The value (\insertAnsHookAt) of insertAt is greater\MessageBreak
+ than the number of rows (\aeb@RowCnt).
+ Using the default\MessageBreak
+ positioning instead}
+ \else
+ \global\let\insertAnsHookAt\@empty
+ \fi
+ \fi
+}
+\def\@insertAnsHookAt{% dps21-5-16
+ \let\eqe@next\relax
+ \ifx\insertAnsHookAt\@empty\else
+ \ifnum\insertAnsHookAt=\aeb@RowCnt
+ \def\eqe@next{\insertAnsEndHookHere}\fi
+ \fi\eqe@next
+}
+\def\@incRowCnt{{\@tempcnta\aeb@RowCnt\advance\@tempcnta\@ne
+ \xdef\aeb@RowCnt{\the\@tempcnta}}% dps21-5-16
+}
\newcommand{\priorsqhook}[1]{\def\sq@priorhook{#1}}
\priorsqhook{}
\newcommand{\abovesqskip}[1]{\def\sq@aboveskip{#1}}
@@ -2557,6 +2592,9 @@ if (isEndQuizPushed("@eqBaseName")){
\let\endanswers\endanswers@sq@list\else
\let\endmanswers\endanswers@sq@list\fi
\list{\strut\@Ans}{%
+ \edef\natlinewidth{\the\linewidth}% dps21-5-17
+ \ifx\@nsLineWidth\@empty\else % dps21-5-17
+ \setlength{\linewidth}{\@nsLineWidth}\fi
\if\sqstar*\relax
\settowidth{\labelwidth}{\eq@lw@f}\else
\settowidth{\labelwidth}{\eq@lw@l}\fi
@@ -2576,7 +2614,7 @@ if (isEndQuizPushed("@eqBaseName")){
\setlength{\labelsep}{0pt}%
\def\Ans{\Ans@list}%
}% list
-}{\eq@answersEndHook\endlist\setcounter{quizno}{0}}
+}{\@insertAndHookAtEndEnv\endlist\setcounter{quizno}{0}} % dps21-5-16
\newcommand\Ans@tabular[2][0]{\gdef\eq@pPTs{#1}\xdef\Ans@choice{#2}%
\leavevmode\@Ans
}
@@ -2592,10 +2630,13 @@ if (isEndQuizPushed("@eqBaseName")){
\vskip\aboveanswersSkip\fi
\noindent\ifnum\exerwparts@cols>1\relax\parshape=0\fi
\tabcolsep=0pt
- \eq@tmpdima=\linewidth
+ \edef\natlinewidth{\the\linewidth}% dps21-5-17
+ \ifx\@nsLineWidth\@empty\else % dps21-5-17
+ \setlength{\linewidth}{\@nsLineWidth}\fi
+ \eq@tmpdima\linewidth
\@tempcnta#1\relax
- \advance\@tempcnta-1\relax
- \multiply\@tempcnta by2
+ \advance\@tempcnta\m@ne\relax
+ \multiply\@tempcnta\tw@
\@tempdima\sq@tabsep\relax
\multiply\@tempdima\@tempcnta
\advance\eq@tmpdima-\@tempdima
@@ -2613,21 +2654,23 @@ if (isEndQuizPushed("@eqBaseName")){
\everypar{}\@endpefalse}\the\eq@scratchtoks
}%
}
-\newcommand\answersEndHook[1]{\def\eq@answersEndHook{#1}%
- \ifx\eq@answersEndHook\@empty\else
- \def\insertEndHookHere{#1}\fi}
-\let\eq@answersEndHook\@empty
\def\endanswers@sq{\endtabular\setcounter{quizno}{0}%
- \eq@answersEndHook\reset@doendpe{\the\everypar}%
- \ifinner\else%\par
- \removelastskip
- \vspace{\aboveanswersSkip}\@endpetrue\fi
+ \@insertAndHookAtEndEnv % dps21-5-16
+ \global\let\@nsLineWidth\@empty % dps21-5-17
+ \reset@doendpe{\the\everypar}%
+ \ifinner\else%\par
+ \removelastskip
+ \vspace{\aboveanswersSkip}\@endpetrue
+ \fi
}
\def\endmanswers@sq{\endtabular\setcounter{quizno}{0}%
- \eq@answersEndHook\reset@doendpe{\the\everypar}%
- \ifinner\else%\par
- \removelastskip
- \vspace{\aboveanswersSkip}\@endpetrue\fi
+ \@insertAndHookAtEndEnv % dps21-5-16
+ \global\let\@nsLineWidth\@empty % dps21-5-17
+ \reset@doendpe{\the\everypar}%
+ \ifinner\else%\par
+ \removelastskip
+ \vspace{\aboveanswersSkip}\@endpetrue
+ \fi
}
\def\popiiictm{\special{CTM: pop pop pop}}
\def\sqWrongRespJS{OnBlurRespBox(false,"\oField");}
@@ -2689,7 +2732,7 @@ false*fi;
var f=this.getField("corr.*oField.*thequestionno");
if (f==null) {
if ((qzSolnDest!="") && !solnAfter) %
- jmpToNamedDest("*oField","*@qzsolndest",%
+jmpToNamedDest("*oField","*@qzsolndest",%
*ifx*@sqTurnOffAlerts*eq@Zero0*else1*fi);%
*ifx*eqAddAAMouseUpMC*empty*else
*eqAddAAMouseUpMC*fi
@@ -2700,7 +2743,7 @@ if (f==null) {
OnBlurRespBox(false,"*oField");
*fi%
var qzSolnDest="*@qzsolndest";
-if( qzSolnDest!="") updateTally("*oField.*thequestionno");%
+updateTally("*oField.*thequestionno");%
*ifx*eqAddAAMouseUpMC*empty*else
*eqAddAAMouseUpMC*fi
\end{defineJS}
@@ -2920,6 +2963,9 @@ updateTally("*oField.*thequestionno");*fi%
\let\endanswers\endanswers@q@list\else
\let\endmanswers\endanswers@q@list\fi
\list{\strut\@Ans}{%
+ \edef\natlinewidth{\the\linewidth}% dps21-5-17
+ \ifx\@nsLineWidth\@empty\else % dps21-5-17
+ \setlength{\linewidth}{\@nsLineWidth}\fi
\if\qstar*\relax
\if\aeb@FLOverride\eq@l
\settowidth{\labelwidth}{\eq@lw@l}\else
@@ -2936,7 +2982,9 @@ updateTally("*oField.*thequestionno");*fi%
\setlength{\labelsep}{0pt}%
\def\Ans{\Ans@list}%
}%
-}{\eq@answersEndHook\endlist\setcounter{quizno}{0}%
+}{\endlist\setcounter{quizno}{0}%
+ \@insertAndHookAtEndEnv % dps21-5-17
+ \global\let\@nsLineWidth\@empty % dps21-5-17
\setdefault@Ans
\ifx\aeb@answerType\aeb@answerType@r
\eq@recordCorrAns{\eq@ansChoiceArray}\ifwithinMCFI
@@ -2950,7 +2998,10 @@ updateTally("*oField.*thequestionno");*fi%
\def\qzTabPos#1{\def\qz@TabPos{[#1]}}\qzTabPos{}
\def\answers@q@tabular#1{%
\ifinner\else\par\removelastparskip\vspace{\aboveanswersSkip}\fi
- \eq@tmpdima=\linewidth
+ \edef\natlinewidth{\the\linewidth}% dps21-5-17
+ \ifx\@nsLineWidth\@empty\else % dps21-5-17
+ \setlength{\linewidth}{\@nsLineWidth}\fi
+ \eq@tmpdima\linewidth
\@tempcnta#1\relax
\advance\@tempcnta\m@ne
\multiply\@tempcnta\tw@
@@ -2968,7 +3019,8 @@ updateTally("*oField.*thequestionno");*fi%
}
\def\endanswers@q@tabular{%
\endtabular\setcounter{quizno}{0}%
- \eq@answersEndHook
+ \@insertAndHookAtEndEnv % dps21-5-17
+ \global\let\@nsLineWidth\@empty % dps21-5-17
\setdefault@Ans
\ifx\aeb@answerType\aeb@answerType@r
\eq@recordCorrAns{\eq@ansChoiceArray}\ifwithinMCFI
@@ -3273,13 +3325,36 @@ updateTally("*oField.*thequestionno");*fi%
\else\eq@randomizeChoicesfalse\fi
}
\define@key{bchoice}{label}[]{\xdef\bChoiceLabel{#1}}
+\def\rmFracPrt#1.#2\@nil{\gdef\intPrt{#1}}
+\define@key{bchoice}{insertAt}[]{%
+ \let\insertAtMsg\relax
+ \def\rmFr@cPrt##1.##2\@nil{\def\intP@rt{##1}}
+ \def\@rgi{#1}\ifx\@rgi\@empty
+ \def\insertAtMsg{\PackageWarning{exerquiz}
+ {An empty value for insertAt, will use\MessageBreak
+ the default positioning}}%
+ \else
+ \rmFr@cPrt#1.\@nil
+ \expandafter\@tempcnta\intP@rt\relax
+ \ifnum\@tempcnta<\@ne
+ \def\insertAtMsg{\PackageWarning{exerquiz}
+ {insertAt=#1: The value (#1) of insertAt must be\MessageBreak
+ greater than zero. Using the default\MessageBreak
+ positioning instead}}
+ \else
+ \xdef\insertAnsHookAt{\the\@tempcnta}
+ \fi
+ \fi
+ \insertAtMsg
+} % dps21-5-15
+\let\insertAnsHookAt\@empty
\def\bChoices{\@ifnextchar[{\@ansChoices}{\@ansChoices[\aeb@numCols]}}
\def\@ansChoices[#1]{%
- \global\let\@tempholdSaveAns\@empty %4/5
- \global\let\@tempholdSaveChoice\@empty %4/5
- \global\let\bChoiceLabel\@empty %4/5
- \setkeys{bchoice}{#1}%
- \global\eq@tabColCnt=\z@
+ \global\let\@tempholdSaveAns\@empty
+ \global\let\@tempholdSaveChoice\@empty
+ \global\let\bChoiceLabel\@empty
+ \setkeys{bchoice}{#1}% dps21-5-15
+ \def\aeb@RowCnt{0}\global\eq@tabColCnt\z@
\ifnum\aeb@numCols=\@ne % list mode
\def\eq@next{\@layoutListAns}\else % tabular mode
\def\eq@next{\@layoutTabularAns{\bChoiceNumCols}}\fi
@@ -3369,17 +3444,25 @@ updateTally("*oField.*thequestionno");*fi%
\newcommand{\useSavedNumAns}[1]{\@nameuse{NumAns#1}}
\long\def\@@@SaveAnsGobbleAns#1\eAns{}
\long\def\@getListAns\Ans#1\eAns{%\@@par
+ \@incRowCnt % dps21-5-16
\eq@saveAns#1\eAns
- \Ans#1\vspace{\@rowskip}%
- \@layoutListAns
+ \Ans#1% dps21-5-15
+ \@insertAnsHookAt % dps21-5-16
+ \vspace{\@rowskip}\@layoutListAns
}
\long\def\@lookforendansChoices#1{%
\@ifnextchar\eChoices{\rowsep{\rowsep@default}%
\expandafter\@findendans\@gobble}{\expandafter#1\@gobble}%
}
\def\@layoutTabularAns#1{%
+ \@incRowCnt % dps21-5-16
\let\eq@tabSep\@empty
\xdef\numShortCols{#1}%
+ \@tempcnta\aeb@numCols % dps21-5-16
+ \advance\@tempcnta-#1
+ \global\let\nAddT@bs\@empty
+ \@whilenum\@tempcnta>\z@\do
+ {\g@addto@macro\nAddT@bs{&}\advance\@tempcnta\m@ne}%
\ifnum#1>\aeb@numCols \xdef\numShortCols{\aeb@numCols}\fi
\@@layoutTabularAns
}
@@ -3393,16 +3476,21 @@ updateTally("*oField.*thequestionno");*fi%
\def\rowsep@default{0pt}
\long\def\@getTabAns\Ans#1\eAns{%
\eq@saveAns#1\eAns
- \global\advance\eq@tabColCnt1
- \let\@save@tabSep=\eq@tabSep
+ \global\advance\eq@tabColCnt\@ne % dps21-5-16
+ \let\@save@tabSep\eq@tabSep % dps21-5-16
\ifnum\eq@tabColCnt=\numShortCols
- \global\eq@tabColCnt=0
- \xdef\eq@tabSep{\noexpand\\\noalign{\kern\@rowskip\relax}}%
+ \global\eq@tabColCnt\z@ % dps21-5-16
+ \xdef\eq@tabSep{%
+ \noexpand\nAddT@bs
+ \noexpand\@insertAnsHookAt
+ \noexpand\\
+ \noalign{\kern\@rowskip\relax}\noexpand\@incRowCnt
+ }%
\else
- \gdef\eq@tabSep{&}%
+ \gdef\eq@tabSep{&}%
\fi
- \@ifnextchar\eChoices{\@save@tabSep\Ans#1\rowsep{\rowsep@default}
- \expandafter\@findendans\@gobble}%
+ \@ifnextchar\eChoices{\@save@tabSep\Ans#1\rowsep{\rowsep@default}%
+ \nAddT@bs\@insertAnsHookAt\expandafter\@findendans\@gobble}%
{\@save@tabSep\Ans#1\@@layoutTabularAns}%
}
\def\@findendans{\@ifnextchar\end{%
@@ -4109,9 +4197,8 @@ if(event.willCommit) {
\fi\r
var splErrors=checkTheSpelling(targetFldName);\@fterSplChkActn
}}]{spl.\curr@quiz.\thequestionno}{}{11bp}}
-\def\RespBoxEssayDefaults
-{%
- \BC{0 0 0}\W{1}\S{S}\Ff{\FfMultiline}\rawPDF{}%
+\def\RespBoxEssayDefaults{%
+ \BC{0 0 0}\W{1}\S{S}\Ff{\FfMultiline}\rawPDF{}%
}
\def\@@RespBoxEssayActions{\AA{%
\if\eqQuizType\isQZ
@@ -4150,7 +4237,7 @@ if(event.willCommit) {
}
\let\@@sqTallyBoxActions\@empty
\def\sqTallyBoxDefaults{%
- \BC{0 0 0}\W{1}\textColor{1 0 0 rg}\S{I}\Q{2}\Ff{\FfReadOnly}}
+ \BC{0 0 0}\W{1}\textColor{1 0 0 rg}\S{I}\Q{2}\Ff{\FfReadOnly}}
\newcommand\sqTallyBox[1][]{%
\mbox{\text@@Field{#1}{tally.\oField.\thequestionno}%
{\TBW}{\DefaultHeightOfWidget}%
@@ -4169,7 +4256,7 @@ We are resetting the quiz. Start over, this time with
fewer errors and greater understanding.}
\def\@@sqTallyTotalActions{\AA{%
\AAKeystroke{\dl@EForAF4Number_Keystroke(0,0,0,0,"",true);}
- \AAFormat{\dl@EForAF4Number_Format(0,0,0,0,"",true);}
+ \AAFormat{\dlTC{\dl@EForAF4Number_Format(0,0,0,0,"",true);}}
\AACalculate{%
\dl@EForAF4Simple_Calculate("SUM",new Array("tally.\oField"));\r
var sqTlyTotl=event.value;
@@ -4201,10 +4288,9 @@ fewer errors and greater understanding.}
{\sqTallyTotalDefaults\@@sqTallyTotalActions\every@eqTextField
\every@sqTallyTotal}}%
}
-\def\sqClearButtonDefaults
-{%
- \CA{\eq@local@sqClearButton}\textColor{0 g}\F{\FPrint}
- \BC{0 0 0}\BG{.7529 .7529 .7529}\W{1}\S{B}\Ff{\FfNoExport}
+\def\sqClearButtonDefaults{%
+ \CA{\eq@local@sqClearButton}\textColor{0 g}\F{\FPrint}
+ \BC{0 0 0}\BG{.7529 .7529 .7529}\W{1}\S{B}\Ff{\FfNoExport}
}
\begin{defineJS}[\makeesc\*\makecmt\%]{\@@sqClearButtonJSCode}
ProcessIt = false;
diff --git a/texmf-dist/tex/latex/acrotex/insdljs.sty b/texmf-dist/tex/latex/acrotex/insdljs.sty
index 1fb1faff..22769ae2 100644
--- a/texmf-dist/tex/latex/acrotex/insdljs.sty
+++ b/texmf-dist/tex/latex/acrotex/insdljs.sty
@@ -19,7 +19,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{insdljs}
- [2021/05/10 v2.5.3 Insert Document Level JavaScripts (dps)]
+ [2021/05/13 v2.5.4 Insert Document Level JavaScripts (dps)]
\usepackage{xkeyval}
\RequirePackage{ifpdf}[2006/02/20]
\RequirePackage{ifxetex}[2006/08/21]
@@ -198,6 +198,7 @@
\newwrite\js@verbatim@out
\def\iwvo#1{\immediate\write\js@verbatim@out{#1}}
\def\dl@EForAF4#1_{\ifx\usedAdbFuncs\dl@YES EF\else AF\fi#1_}
+\def\dl@EForAFMergeChange{\ifx\usedAdbFuncs\dl@YES EF\else AF\fi MergeChange}
\def\dl@lparen{(}\def\dl@rparen{)}
\def\genericNL{^^J}
\def\defjsLB{\gobiv}
diff --git a/texmf-dist/tex/latex/acrotex/template.def b/texmf-dist/tex/latex/acrotex/template.def
index 371929e5..997fcd7e 100644
--- a/texmf-dist/tex/latex/acrotex/template.def
+++ b/texmf-dist/tex/latex/acrotex/template.def
@@ -18,7 +18,7 @@
%% License, or (at your option) any later version. %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ProvidesFile{template.def}
- [2021/05/10 v8.7.7 %
+ [2021/05/15 v8.8 %
Exerquiz template for language support (dps)]
%%------------- Instructions ------------------------------------
%% Make your language localizations to this file and rename it to