summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-12-25 15:31:44 +0900
committerNorbert Preining <norbert@preining.info>2019-12-25 15:40:39 +0900
commite98d5dc25eeecb2f30d84b21c064e5fe4264ac52 (patch)
tree95ae6b18f281abd1e10ab35a4fb5d3d4ba701569
parentc14c208cebda8d3661b39bd83d9ccdfc0309caec (diff)
acrotex update
-rw-r--r--texmf-dist/doc/latex/acrotex/README.md5
-rw-r--r--texmf-dist/doc/latex/acrotex/aeb_man.pdfbin1362922 -> 1362881 bytes
-rw-r--r--texmf-dist/doc/latex/acrotex/aeb_man.tex53
-rw-r--r--texmf-dist/doc/latex/acrotex/eformman.pdfbin995308 -> 989403 bytes
-rw-r--r--texmf-dist/doc/latex/acrotex/eformman.tex4
-rw-r--r--texmf-dist/doc/latex/acrotex/examples/README.md2
-rw-r--r--texmf-dist/doc/latex/acrotex/examples/jquiztst.pdfbin355970 -> 250926 bytes
-rw-r--r--texmf-dist/doc/latex/acrotex/examples/jtxttst.pdfbin319897 -> 320860 bytes
-rw-r--r--texmf-dist/doc/latex/acrotex/examples/webeqtst.pdfbin489546 -> 491490 bytes
-rw-r--r--texmf-dist/doc/latex/acrotex/install_jsfiles.pdfbin236764 -> 237391 bytes
-rw-r--r--texmf-dist/source/latex/acrotex/acrotex.ins2
-rw-r--r--texmf-dist/source/latex/acrotex/eforms.dtx34
-rw-r--r--texmf-dist/source/latex/acrotex/exerquiz.dtx670
-rw-r--r--texmf-dist/source/latex/acrotex/exerquiz.ins2
-rw-r--r--texmf-dist/source/latex/acrotex/insdljs.dtx45
-rw-r--r--texmf-dist/source/latex/acrotex/web.dtx82
-rw-r--r--texmf-dist/tex/latex/acrotex/aeb-comment.sty6
-rw-r--r--texmf-dist/tex/latex/acrotex/aebdocfmt.def9
-rw-r--r--texmf-dist/tex/latex/acrotex/aebjs.def343
-rw-r--r--texmf-dist/tex/latex/acrotex/aebrandom.def2
-rw-r--r--texmf-dist/tex/latex/acrotex/aebsumrytbls.def2
-rw-r--r--texmf-dist/tex/latex/acrotex/eforms.sty8
-rw-r--r--texmf-dist/tex/latex/acrotex/eqexam.def29
-rw-r--r--texmf-dist/tex/latex/acrotex/eqtr.def4
-rw-r--r--texmf-dist/tex/latex/acrotex/exerquiz.sty256
-rw-r--r--texmf-dist/tex/latex/acrotex/insdljs.sty12
-rw-r--r--texmf-dist/tex/latex/acrotex/template.def6
-rw-r--r--texmf-dist/tex/latex/acrotex/web.cfg3
-rw-r--r--texmf-dist/tex/latex/acrotex/web.sty54
29 files changed, 973 insertions, 660 deletions
diff --git a/texmf-dist/doc/latex/acrotex/README.md b/texmf-dist/doc/latex/acrotex/README.md
index 8e149839..2ea307d3 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
Author: D. P. Story
-Dated: 2019-08-13
+Dated: 2019-12-17
AeB contains the following:
@@ -19,6 +19,9 @@ AeB contains the following:
6) Documentation for AeB (AcroTeX eDucatation Bundle) and eForms
(including insdljs and dljslib).
+What's New (2019-12-17) Defined \InputExrSolnsLevel and \InputQzSolnsLevel to
+make it easy to change the section-type for the solution pages.
+
What's New (2019-08-13) Use \protect when formatting a enhanced preview value.
Other minor changes and bug fixes.
diff --git a/texmf-dist/doc/latex/acrotex/aeb_man.pdf b/texmf-dist/doc/latex/acrotex/aeb_man.pdf
index 794013af..280a4bc0 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 679358f2..032ec52e 100644
--- a/texmf-dist/doc/latex/acrotex/aeb_man.tex
+++ b/texmf-dist/doc/latex/acrotex/aeb_man.tex
@@ -232,10 +232,10 @@
\university{{\AcroT} Software Development Team}
\email{dpstory@acrotex.net}
\versionLabel{Dated:}
-\version{2019/08/13}
+\version{2019/12/17}
\copyrightyears{1999-\the\year}
\nocopyright
-\prepared{2019/08/13}
+\prepared{2019/12/17}
\revisionLabel{Distribution Dated:}
\copyrightStatus{True}
@@ -3585,7 +3585,7 @@ The {\Web} package has several commands for customizing the \cs{part} and
The appearance of the part title can be controlled by \cs{formatPartTitle}.
-\settowidth{\aebdimen}{\cs{customSubsubsecHead\darg{\anglemeta{tex\_code}}}}
+\settowidth{\aebdimen}{\ttfamily\cs{customSubsubsecHead\darg{\anglemeta{tex\_code}}}}
\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule}
\formatPartTitle{!anglemeta(tex_code)}
\noPartNumbers
@@ -4704,7 +4704,7 @@ the questions when the questions are in tabular form.\endredpoint
website for examples.
-\subsubsection{Moving the Solution Set}
+\subsubsection{Inputting the Solution Set}
The solution set, by default, comes last in the file. You can
move its positioning by including the command
@@ -4713,6 +4713,20 @@ exercise. You'll note that I have moved the solutions in this
file \emph{before} the \nameref{references} section, as indicated, for
example, by its position in the table of contents.
+By default, the exercise solutions are brought into the document as a
+\cs{section*} titled \cs{exsectitle}. The default settings can be changed
+with the \cs{InputExrSolnsLevel} command :
+\settowidth{\aebdimen}{\ttfamily\string\InputExrSolnsLevel*[\ameta{label}]\darg{\ameta{level}}}%
+\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule}
+\InputExrSolnsLevel*[!ameta(label)]{!ameta(level)}
+\end{dCmd}
+\smallskip\noindent
+where, \ameta{level} is the section-level (usually \texttt{section} or
+\texttt{chapter}); if the \texttt*-option is specified, then the solutions
+are placed in a starred-section (\cs{section*} or \cs{chapter*}). If
+\ameta{label} is specified, then \cs{label\darg{\ameta{label}}} is placed
+just after the section title. The default is \cs{InputExrSolnsLevel*\darg{section}}.
+
\subsubsection{Grouping the solutions at end}\label{ss:grpEx}
Historically, solutions to exercises appearing at the end of the file
@@ -4723,7 +4737,6 @@ You can now declare \cs{makeExSolnsLocalOn} or \cs{makeExSolnsLocalOff}
anywhere in the document to turn on grouping for all exercises that follow,
or to turn off this feature again. The default is \cs{makeExSolnsLocalOff}.
-
\subsection{Redesigning the
\texorpdfstring{\protect\texttt{exercise}}{exercise}
Environment}\label{sss:redesignex}
@@ -5688,15 +5701,29 @@ transparent, keep it that way.
this command can be redefined as desired. See the source file \texttt{exerquiz.dtx}.
Also see the definition of \Com{bottomOfAnsfStack}.
-\subsubsection{Moving the Solution Set}
+\subsubsection{Inputting the Solution Set}
+
+The solution set, by default, comes last in the file. You can move its
+positioning by including the command \cs{includequizsolutions} at any point
+\emph{after} the last quiz (created by the \texttt{shortquiz} and
+\texttt{quiz} environments). You'll note that I have moved the solutions in
+this file before the \nameref{references} section, as indicated, for example,
+by its position in the table of contents.
+
+By default, the quiz solutions are brought into the document as a
+\cs{section*} titled \cs{sqslsectitle}. The default settings can be changed
+with the \cs{InputQzSolnsLevel} command:
+\settowidth{\aebdimen}{\ttfamily\string\InputQzSolnsLevel*[\ameta{label}]\darg{\ameta{level}}}%
+\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule}
+\InputQzSolnsLevel*[!ameta(label)]{!ameta(level)}
+\end{dCmd}
+\smallskip\noindent
+where, \ameta{level} is the section-level (usually \texttt{section} or
+\texttt{chapter}); if the \texttt*-option is specified, then the solutions
+are placed in a starred-section (\cs{section*} or \cs{chapter*}). If
+\ameta{label} is specified, then \cs{label\darg{\ameta{label}}} is placed
+just after the section title. The default is \cs{InputQzSolnsLevel*\darg{section}}.
-The solution set, by default, comes last in the file. You can move
-its positioning by including the command \cs{includequizsolutions}
-at any point \emph{after} the last quiz (created by the \texttt{shortquiz} and \texttt{quiz} environments). You'll note
-that I
-have moved the solutions in this file before the
-\nameref{references} section, as indicated, for example, by its
-position in the table of contents.
\subsubsection{Grouping the solutions at end}\label{ss:grpQzs}
diff --git a/texmf-dist/doc/latex/acrotex/eformman.pdf b/texmf-dist/doc/latex/acrotex/eformman.pdf
index c3532cfb..88525c5b 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 ecfbb3d8..fe52261c 100644
--- a/texmf-dist/doc/latex/acrotex/eformman.tex
+++ b/texmf-dist/doc/latex/acrotex/eformman.tex
@@ -80,8 +80,8 @@
email={dpstory@acrotex.net},
subject={Documentation for the eforms and insdljs packages},
talksite={\url{www.acrotex.net}},
- version={2.0},
- prepared={2019/08/06},
+ version={2019/12/17},
+ prepared={2019/12/17},
preparedLabel={Distribution Dated:},
keywords={LaTeX, hyperref, PDF, exercises, quizzes},
copyrightStatus=True,
diff --git a/texmf-dist/doc/latex/acrotex/examples/README.md b/texmf-dist/doc/latex/acrotex/examples/README.md
index d56ccff2..4157ef8c 100644
--- a/texmf-dist/doc/latex/acrotex/examples/README.md
+++ b/texmf-dist/doc/latex/acrotex/examples/README.md
@@ -24,4 +24,4 @@ The AcroTeX Blog (http://www.acrotex.net/blog/) is a great resource for all thin
AeB and PDF.
Don Story
-2019/05/21
+2019/12/17
diff --git a/texmf-dist/doc/latex/acrotex/examples/jquiztst.pdf b/texmf-dist/doc/latex/acrotex/examples/jquiztst.pdf
index d000d0dd..9ca2b2ab 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/jtxttst.pdf b/texmf-dist/doc/latex/acrotex/examples/jtxttst.pdf
index 298a75f3..8638f825 100644
--- a/texmf-dist/doc/latex/acrotex/examples/jtxttst.pdf
+++ b/texmf-dist/doc/latex/acrotex/examples/jtxttst.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/acrotex/examples/webeqtst.pdf b/texmf-dist/doc/latex/acrotex/examples/webeqtst.pdf
index 17f62734..98a1033a 100644
--- a/texmf-dist/doc/latex/acrotex/examples/webeqtst.pdf
+++ b/texmf-dist/doc/latex/acrotex/examples/webeqtst.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/acrotex/install_jsfiles.pdf b/texmf-dist/doc/latex/acrotex/install_jsfiles.pdf
index 221ba16f..7b2d3fab 100644
--- a/texmf-dist/doc/latex/acrotex/install_jsfiles.pdf
+++ b/texmf-dist/doc/latex/acrotex/install_jsfiles.pdf
Binary files differ
diff --git a/texmf-dist/source/latex/acrotex/acrotex.ins b/texmf-dist/source/latex/acrotex/acrotex.ins
index 3afd02ab..84304311 100644
--- a/texmf-dist/source/latex/acrotex/acrotex.ins
+++ b/texmf-dist/source/latex/acrotex/acrotex.ins
@@ -57,7 +57,7 @@
\generate{%
\file{exerquiz.sty}{\from{exerquiz.dtx}{copyright,package}}
\file{aebjs.def}{\from{exerquiz.dtx}{copyright,aebjs}}
-% \file{eqexam.def}{\from{exerquiz.dtx}{eqexam}}
+ \file{eqexam.def}{\from{exerquiz.dtx}{eqexam}}
\file{aebrandom.def}{\from{exerquiz.dtx}{copyright,randomize}}
\file{aebsumrytbls.def}{\from{exerquiz.dtx}{copyright,sumrytbls}}
\file{usemcfi.def}{\from{exerquiz.dtx}{copyright,mcfi}}
diff --git a/texmf-dist/source/latex/acrotex/eforms.dtx b/texmf-dist/source/latex/acrotex/eforms.dtx
index d3e63f29..7133e60f 100644
--- a/texmf-dist/source/latex/acrotex/eforms.dtx
+++ b/texmf-dist/source/latex/acrotex/eforms.dtx
@@ -16,7 +16,7 @@
%</copyright>
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{eforms}
-%<package> [2019/06/14 v2.3 Provides general eforms support (dps)]
+%<package> [2019/10/23 v2.3.2 Provides general eforms support (dps)]
%<*driver>
\documentclass{ltxdoc}
\usepackage[colorlinks,hyperindex=false]{hyperref}[2012/10/12]
@@ -415,6 +415,30 @@
%\end{itemize}
% \normalcolor
%
+% \subsection{Some utility commands}
+% The following two commands were created as a convenience to changing the definition of certain
+% JavaScript actions. Use \cs{efsave} to save the original definition of the action, then redefine the action,
+% the later, restore the JS action to its original definition.\par\medskip\noindent
+% \DescribeMacro{\efsave}\hskip-\marginparsep\texttt{\meta{\cs{cmd1}}\cs{as}\meta{\cs{cmd2}}}
+% \cs{let}s \meta{\cs{cmd2}} to \meta{\cs{cmd1}} (that is, saves \meta{\cs{cmd1}} `as' \meta{\cs{cmd2}}).
+% Arguments may contain \texttt{@}.
+% \changes{v2.3.1}{2019/10/14}{Define \string\cs{efsave} and \string\cs{efrestore}}
+% \begin{macrocode}
+\def\efsave{\bgroup\let\as\relax\makeatletter\efsavei}
+\def\efsavei#1\as#2{\global\let#2#1\egroup}
+% \end{macrocode}
+% \leavevmode\DescribeMacro{\efrestore}\hskip-\marginparsep\texttt{\meta{\cs{cmd1}}\cs{from}\meta{\cs{cmd2}}}
+% \cs{let}s \meta{\cs{cmd1}} to \meta{\cs{cmd2}} (that is, restores \meta{\cs{cmd1}} `from' \meta{\cs{cmd2}}).
+% Arguments may contain \texttt{@}.
+% \begin{macrocode}
+\def\efrestore{\bgroup\let\from\relax\makeatletter\efrestorei}
+\def\efrestorei#1\from#2{\global\let#1#2\egroup}
+% \end{macrocode}
+% For example, expanding |\efsave\x\as\y| (eg, |\let\y\x|), the definition of the macro |\y|
+% has the same definition as |\x| does. Now |\x| is free to be redefined. Later in the document,
+% we can say |\efrestore\x\from\y| (eg, |\let\x\y|). Now the
+% definition of |\x| has its original definition (at the time when it was saved).
+%
% \subsection{Process Key-Value Pairs: Main Macro}\label{procArgs}
%
% The following macro, \cs{processAppArgs}, is due in part to
@@ -1156,7 +1180,7 @@
% expansion within first argument of \string\cs{tops} within \string\cs{@eqV}}
% \begin{macrocode}
\let\x\protect
- \let\protect\noexpand@iii\edef\pmpvV{#1}%
+ \let\protect\noexpand@iii
\edef\pmpvV{#1}\let\protect\x
% \end{macrocode}
% There is a problem with detecting unicode, if the author wants to use unicode,
@@ -3195,10 +3219,10 @@
\eq@Check@driver}{\checkBoxDefaults\every@CheckBox}}}
% \end{macrocode}
% \end{macro}
-% \subsubsection{Radio Button}\label{radiobutton}
+% \subsubsection{Radio Buttons}\label{radiobutton}
% The basic command for creating radio button fields. As of the version dated 2019/06/14,
% radio button code was re-written so they operate in certain non-conforming PDF readers. The old code,
-% which has proven to be reliable for many years. The old code
+% which has proven to be reliable for many years,
% is available when \DescribeMacro\useNewRadiosOff\cmd{\useNewRadiosOff} is expanded. This is the default.
%
% When \DescribeMacro\useNewRadiosOn\cmd{\useNewRadiosOn} is expanded, the new code for radio buttons is used.
@@ -3957,7 +3981,7 @@
% \end{macrocode}
% Set the color of the link text. Ignored if the colorlinks option of hyperref
% has not been taken. The value of \texttt{linktxtcolor}\IndexKey{linktxtcolor} is a named color. For example,
-% \texttt{linkcolor=red}. The default is |\@linkcolor| from hyperref. This default
+% \texttt{linktxtcolor=red}. The default is |\@linkcolor| from hyperref. This default
% can be changed by redefining |\@linkcolor|, or be redefining |\defaultlinkcolor|.
% If |linktxtcolor={}| (an empty argument), or simply \texttt{linktxtcolor}, no color is applied to the text.
% \begin{macrocode}
diff --git a/texmf-dist/source/latex/acrotex/exerquiz.dtx b/texmf-dist/source/latex/acrotex/exerquiz.dtx
index b2f61b78..275fffcb 100644
--- a/texmf-dist/source/latex/acrotex/exerquiz.dtx
+++ b/texmf-dist/source/latex/acrotex/exerquiz.dtx
@@ -21,15 +21,15 @@
%<eqexam>\ProvidesFile{eqexam.def}
%<randomize>\ProvidesFile{aebrandom.def}
%<sumrytbls>\ProvidesFile{aebsumrytbls.def}
-%<template>\ProvidesFile{template.def}
-%<package|driver|aebjs|eqexam|randomize|sumrytbls|template> [2019/08/13 v8.3 %
-%<package> Exerquiz: Exercises and Quizzes for LaTeX/PDF package (dps)]
-%<driver> Exerquiz documentation driver file (dps)]
-%<aebjs> Exerquiz document level JavaScript (dps)]
-%<eqexam> Exerquiz support file for eqexam (dps)]
+%<template>\ProvidesFile{template.`def}
+%<package|driver|aebjs|eqexam|randomize|sumrytbls|template> [2019/12/17 v8.5.5 %
+%<package> Exerquiz: Exercises and Quizzes for LaTeX/PDF package (dps)]
+%<driver> Exerquiz documentation driver file (dps)]
+%<aebjs> Exerquiz document level JavaScript (dps)]
+%<eqexam> Exerquiz support file for eqexam (dps)]
%<randomize> Exerquiz support for randomization (dps)]
%<sumrytbls> Exerquiz support for summary tables (dps)]
-%<template> Exerquiz template for language support (dps)]
+%<template> Exerquiz template for language support (dps)]
%<eqfr>\ProvidesFile{eqfr.def}
%<eqde>\ProvidesFile{eqde.def}
%<eqno>\ProvidesFile{eqno.def}
@@ -47,10 +47,11 @@
%<*driver>
\documentclass{ltxdoc}
\usepackage[colorlinks,hyperindex=false]{hyperref}
-\def\darg#1{\texttt{\{#1\}}}
+\gdef\darg#1{\texttt{\char123\relax#1\char125\relax}}
\let\env\texttt
\let\opt\texttt
\let\app\textsf
+\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}}}
@@ -795,7 +796,8 @@
\RequirePackage{verbatim}
\RequirePackage{hyperref}
\RequirePackage{amssymb}% used for return symbols
-\RequirePackage{eforms}[2012/06/20]
+\RequirePackage{eforms}[2019/10/23]
+\dlSetPkgInfo
% \end{macrocode}
% \begin{macrocode}
\@ifundefined{eq@drivernum}{%
@@ -3457,14 +3459,39 @@
\let\priorexsectitle\@empty
\let\priorexslinput\@empty
% \end{macrocode}
+% \DescribeMacro{\InputExrSolnsLevel}\nmpsep{*[\ameta{name}]\darg{\ameta{level}}} The solutions to the exercises
+% are in their own section, historically this has been \cs{section*}; however for some documents, it is
+% desirable to have a numbered section number \cs{section} or \cs{chapter}, or \cs{chapter*}. The
+% \cs{InputExrSolnsLevel} is designed to ease the task of changing how section-type. \ameta{level} is usually
+% \texttt{section} or \texttt{chapter}; use \texttt* if you want solutions to be in \cs{section*} or \cs{chapter*};
+% if the \ameta{name} is used, the beginning of the solutions is marked with \cs{label\darg{name}}.
+% \changes{v8.5.5}{2019/12/17}{Added \string\cs{InputQzSolnsLevel}}
+% \begin{macrocode}
+\def\InputExrSolnsLevel{\@ifstar
+ {\def\eq@ExrSolnsStar{*}\InputExrSolnsLevel@i}
+ {\let\eq@ExrSolnsStar\@empty\InputExrSolnsLevel@i}}
+\newcommand{\InputExrSolnsLevel@i}[2][]{%
+ \def\eq@ExrSolnsLabel{#1}\def\eq@ExrSolnsLevel{#2}}
+\InputExrSolnsLevel*{section}
+% \end{macrocode}
%\DescribeMacro{\exerSolnsHeadnToc} sets the section title for the solutions
% to the exercises. May be redefined, I suppose.
% \begin{macrocode}
-\def\exerSolnsHeadnToc{\section*{\exsectitle}%
- \addcontentsline{toc}{section}{%
- \@ifundefined{web@latextoc}{}{%
- \ifx\web@latextoc\eq@YES\else
- \protect\numberline{}\fi}\exsectitle}}
+\def\exerSolnsHeadnToc{%
+ \edef\eq@mkCmd{\expandafter\noexpand
+ \csname\eq@ExrSolnsLevel\endcsname\eq@ExrSolnsStar}%
+ \eq@mkCmd{\exsectitle}\if!\eq@ExrSolnsLabel!\else
+ \label{\eq@ExrSolnsLabel}\fi
+ \if\eq@ExrSolnsStar*%
+% \addtocontents{toc}{\protect\def\protect\web@finalDot{}}
+ \addcontentsline{toc}{\eq@ExrSolnsLevel}{%
+ \@ifundefined{web@latextoc}{}{%
+ \ifx\web@latextoc\eq@YES\else
+ \protect\numberline{}\fi
+ }\exsectitle
+ }%
+ \fi
+}
% \end{macrocode}
%\changes{v6.4q}{2012/03/23}{define \cs{eq@defaultlheader}}
% Determine whether \textsf{web} package is loaded, and define \cs{eq@normallheader}
@@ -3477,8 +3504,8 @@
{\let\eq@defaultlheader\relax}
% \end{macrocode}
% \DescribeMacro{\exerSolnInput} is the macro that formats the opening page
-% of the solutions page and inputs \cmd{\jobname.sol}. Defined \DescribeMacro\eqExSolFileName
-% \cs{eqExSolFileName} in support of the \texttt{solutionsonly} option and the \pkg{ci-solns} package.
+% of the solutions page and inputs \cmd{\jobname.sol}. \DescribeMacro\eqExSolFileName
+% \cs{eqExSolFileName} is defined in support of the \texttt{solutionsonly} option and the \pkg{ci-solns} package.
% \changes{v8.2.8}{2018/12/13}{Defined \string\cs{eqExSolFileName}}
% \begin{macrocode}
\newif\ifExSolutionsSet \ExSolutionsSetfalse
@@ -4201,8 +4228,8 @@
}
\def\eq@promoteNewPageHere#1{\par
\bgroup\@nobreakfalse\addpenalty{-500}%
- \setlength{\@tempdimb}{#1}%
- \@tempdima \pagegoal \advance \@tempdima -\pagetotal
+ \setlength{\@tempdimb}{#1}\@tempdima \pagegoal
+ \advance \@tempdima -\pagetotal
\ifdim \@tempdima<\@tempdimb\ifnum\col@number>\@ne\columnbreak
\else\newpage\penalty1\fi\fi\egroup
}
@@ -4362,13 +4389,39 @@
\let\priorsqslsectitle\@empty
\let\priorsqslinput\@empty
% \end{macrocode}
+% \DescribeMacro{\InputQzSolnsLevel}\nmpsep{*[\ameta{name}]\darg{\ameta{level}}} The solutions to the quizzes
+% are in their own section, historically this has been \cs{section*}; however for some documents, it is
+% desirable to have a numbered section number \cs{section} or \cs{chapter}, or \cs{chapter*}. The
+% \cs{InputQzSolnsLevel} is designed to ease the task of changing how section-type. \ameta{level} is usually
+% \texttt{section} or \texttt{chapter}; use \texttt* if you want solutions to be in \cs{section*} or \cs{chapter*};
+% if the \ameta{name} is used, the beginning of the solutions is marked with \cs{label\darg{name}}.
+% \changes{v8.5.5}{2019/12/17}{Added \string\cs{InputQzSolnsLevel}}
+% \begin{macrocode}
+\def\InputQzSolnsLevel{\@ifstar
+ {\def\eq@QzSolnsStar{*}\InputQzSolnsLevel@i}
+ {\let\eq@QzSolnsStar\@empty\InputQzSolnsLevel@i}}
+\newcommand{\InputQzSolnsLevel@i}[2][]{%
+ \def\eq@QzSolnsLabel{#1}\def\eq@QzSolnsLevel{#2}}
+\InputQzSolnsLevel*{section}
+% \end{macrocode}
% \DescribeMacro{\quizSolnsHeadnToc} sets up the quiz solution title.
% \begin{macrocode}
-\def\quizSolnsHeadnToc{\section*{\sqslsectitle}%
- \addcontentsline{toc}{section}{%
- \@ifundefined{web@latextoc}{}{%
- \ifx\web@latextoc\eq@YES\else
- \protect\numberline{}\fi}\sqslsectitle}}
+\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
+ \protect\numberline{}\fi
+ }\sqslsectitle
+ }%
+ \fi
+}
% \end{macrocode}
% \DescribeMacro{\quizSolnInput} is the command that actually inputs
% the solutions file \cmd{\jobname.qsl}.
@@ -4914,19 +4967,27 @@
\def\eqButtonDefaults{%
\CA{\eq@local@CA}\AC{}\H{P}\W{1}\S{B}
\BC{1 0 0}\BG{.7529 .7529 .7529}}
-\def\@@eqButtonActions{%
- \A{\JS{if (isEndQuizPushed("\eqBaseName")){\jsR\jsT%
- correctQuiz("\eqBaseName",\thequestionno);%
- \ifusesumrytbls\jsR\jsT\else\jsR\fi
+% \end{macrocode}
+% \leavevmode\DescribeMacro\CorrBtnActionsJS is the JavaScript action
+% to support the \cs{eqButton}/\cs{CorrButton}. The macro may be redefined
+% using the \env{defineJS*} environment. Copy and pasted the contents into
+% a new \env{defineJS*} environment and modify the code.
+% \changes{v8.5}{2019/10/11}{Incorporated \string\env{defineJS} into
+% the action of \string\cs{eqButton}}
+% \begin{macrocode}
+\begin{defineJS}[\makeesc\@]{\CorrBtnActionsJS}
+if (isEndQuizPushed("@eqBaseName")){
+ correctQuiz("@eqBaseName",@thequestionno);
% \end{macrocode}
% (06/13/10) Added the quiz summary table, and the function
% \texttt{correctSumryTbl}. If a summary table is not present
% the function does nothing.
% \begin{macrocode}
- if (typeof correctSumryTbl == "function")\jsR\jsT\jsT
- correctSumryTbl("\eqBaseName",\thequestionno);\jsR
- }}}%
+ if (typeof correctSumryTbl == "function")
+ correctSumryTbl("@eqBaseName",@thequestionno);
}
+\end{defineJS}
+\def\@@eqButtonActions{\A{\JS{\CorrBtnActionsJS}}}
\newcommand\eqButton[2][]{%
% \end{macrocode}
% If nocorrections is true, then this button does not appear.
@@ -4953,8 +5014,8 @@
% green check or a red cross (by default).
% \begin{macrocode}
\def\rbMarkup@Defaults{%
- \BC{}\F{\FHidden}\Ff{\FfReadOnly}\textSize{12}
- \textColor{0 g}\symbolchoice{check}\W{}}
+ \BC{}\F{\FHidden}\Ff{\FfReadOnly}\textSize{12}
+ \textColor{0 g}\symbolchoice{check}\W{}}
\newcommand\rbMarkup[1][]{%
\ifx\grpquestions\eq@One
\def\Fld@name{%
@@ -4964,7 +5025,7 @@
{rbmarkup.\Fld@name}%
{\RadioFieldSize}{\RadioFieldSize}{Yes}{}%
{\eq@setWidgetProps\eq@Check@driver}%
- {\rbMarkup@Defaults\every@CheckBox\every@rbMarkup}}}%
+ {\rbMarkup@Defaults\every@CheckBox\every@rbMarkup}}}
% \end{macrocode}
% \end{macro}
%
@@ -8302,99 +8363,97 @@ if (_bOK) {\jsR\jsT
% Pick up any parameters that would modify the appearance of this text field.
% \begin{macrocode}
\def\RespBoxTxtOnBlur{OnBlurRespBox(%
- \if\@sqTurnOffAlerts1retn\else null\fi,"\curr@quiz");}
+ \if\@sqTurnOffAlerts1retn\else null\fi,"\curr@quiz");}
\def\eqObjAlert{%
- \ifx\eqQuizType\isQZ\ifx\eq@online\eq@YES\ifeq@noquizsolutions
- \else if (false) \fi\fi\fi}
+ \ifx\eqQuizType\isQZ\ifx\eq@online\eq@YES\ifeq@noquizsolutions
+ \else if (false) \fi\fi\fi}
\begin{defineJS}[%
\catcode`\@=0\relax\catcode`\%=14\relax]{\AAKqRespBoxTxt}
if(event.willCommit){
- RecordPointValue(@eqPTs,@thequestionno@ifx@grpquestions1,%
+ RecordPointValue(@eqPTs,@thequestionno@ifx@grpquestions1,%
@thegrpquestionno,@grpPointValue,@grpTotalWeight,%
"@grpEvalFunction"@fi);
- RecordProblemType("@eqQT",@thequestionno);
- var retn = ProcRespTxt(@rbTxtAlt);
- ProcUserResp(retn,event.value,@thequestionno,%
+ RecordProblemType("@eqQT",@thequestionno);
+ var retn = ProcRespTxt(@rbTxtAlt);
+ ProcUserResp(retn,event.value,@thequestionno,%
0@ifx@grpquestions1,@thegrpquestionno@fi);
}
if (!isQuizInitialized("@currQuiz")) {
- @eqObjAlert@space eqAppAlert(InitMsg("@bqlabelISO"),3);
- event.rc = false;
+ @eqObjAlert@space eqAppAlert(InitMsg("@bqlabelISO"),3);
+ event.rc = false;
}
\end{defineJS}
\def\RespBoxTxtDefaults
{%
- \BC{0 0 0}\W{1}\S{S}\textColor{0 g}\F{\FPrint}%
+ \BC{0 0 0}\W{1}\S{S}\textColor{0 g}\F{\FPrint}%
}
\def\moreRespBoxTxtDefaults
{%
- \edef\@moreRespBoxTxtDefaults{%
- \if\eqQuizType\isQZ\ifx\eq@online\eq@YES
- \ifeq@noquizsolutions\else
- \noexpand\Ff{\FfReadOnly}\fi\fi\fi
- }%
+ \edef\@moreRespBoxTxtDefaults{%
+ \if\eqQuizType\isQZ\ifx\eq@online\eq@YES
+ \ifeq@noquizsolutions\else
+ \noexpand\Ff{\FfReadOnly}\fi\fi\fi
+ }%
}
\def\@@RespBoxTxtActions
{%
- \AA{\if\eqQuizType\isQZ
+ \AA{\if\eqQuizType\isQZ
% \end{macrocode}
% Added \cs{eqAAKeystrokArg} to \cs{@@RespBoxTxtActions}
% \changes{v7.8i}{2017/07/21}{Added \string\cs{eqAAKeystrokArg} to \string\cs{@@RespBoxTxtActions}}
% \begin{macrocode}
- \AAKeystroke{\AAKqRespBoxTxt\eqAddAAKeystroke}
- \AAFormat{\eqAddAAFormat}
- \else
- \AAKeystroke{%
- if(event.willCommit) {\r\t
- retn = ProcRespTxt(\rbTxtAlt);\r
-\if\@sqTurnOffAlerts1
- \t\RespBoxTxtOnBlur\r
-\fi
- \eqAddAAKeystroke\r
- }%
- }
- \AAFormat{\eqAddAAFormat}
- \AAOnFocus{\JS{var retn = null;}}
+ \AAKeystroke{\AAKqRespBoxTxt\eqAddAAKeystroke}
+ \AAFormat{\eqAddAAFormat}
+ \else
+ \AAKeystroke{%
+ if(event.willCommit) {\r\t
+ retn = ProcRespTxt(\rbTxtAlt);\r
+ \if\@sqTurnOffAlerts1
+ \t\RespBoxTxtOnBlur\r\fi
+ \eqAddAAKeystroke\r
+ }%
+ }
+ \AAFormat{\eqAddAAFormat}
+ \AAOnFocus{\JS{var retn = null;}}
% \end{macrocode}
-% dps 2/12/05 A fix for Acro7.0, a change in the blur event, must
+% (2005/12/02) A fix for Acro7.0, a change in the blur event, must
% move this event to keystroke so behavior is the same as in previous
% versions.
% \begin{macrocode}
-\if\@sqTurnOffAlerts0
- \AAOnBlur{\JS{\RespBoxTxtOnBlur}}%
-\fi
- \fi
- }
+ \if\@sqTurnOffAlerts0%
+ \AAOnBlur{\JS{\RespBoxTxtOnBlur}}\fi
+ \fi
+ }
}
\def\annot@subtype@rbt{rbt}
\newcommand\@RespBoxTxt[1][]
{%
- \edef\annot@subtype{\annot@subtype@rbt}%
- \eq@AddProbToQzQuesList
- \ifx\grpquestions\eq@Zero\addtocounter{eqpointvalue}{\eqPTs}\fi
- \if\eqQuizType\isQZ
- \def\rbFlag{1}\global\IsRespBoxtrue
- \ifx\grpquestions\eq@One
- \stepcounter{grpquestionno}%
- \def\Fld@name{%
- grpobj.\curr@quiz.\thequestionno.\thegrpquestionno}%
- \else
- \eq@recordThesePTs\eq@recordProbType
- \edef\eqtmp{\aPointType}%
- \xdef\aPointType{\eqtmp,[\eqPTs,"text"]}%
- \stepcounter{questionno}%
- \def\Fld@name{obj.\curr@quiz.\thequestionno}%
- \fi
+ \edef\annot@subtype{\annot@subtype@rbt}%
+ \eq@AddProbToQzQuesList
+ \ifx\grpquestions\eq@Zero\addtocounter{eqpointvalue}{\eqPTs}\fi
+ \if\eqQuizType\isQZ
+ \def\rbFlag{1}\global\IsRespBoxtrue
+ \ifx\grpquestions\eq@One
+ \stepcounter{grpquestionno}%
+ \def\Fld@name{%
+ grpobj.\curr@quiz.\thequestionno.\thegrpquestionno}%
\else
- \stepcounter{questionno}%
- \def\Fld@name{obj.\oField.\thequestionno}%
+ \eq@recordThesePTs\eq@recordProbType
+ \edef\eqtmp{\aPointType}%
+ \xdef\aPointType{\eqtmp,[\eqPTs,"text"]}%
+ \stepcounter{questionno}%
+ \def\Fld@name{obj.\curr@quiz.\thequestionno}%
\fi
- \moreRespBoxTxtDefaults
- \leavevmode\hbox\bgroup\text@@Field{#1}{\Fld@name}%
- {\RBW}{\DefaultHeightOfWidget}%
- {\eq@protect\AA}{\eq@setWidgetProps\@@RespBoxTxt}%
- {\RespBoxTxtDefaults\@moreRespBoxTxtDefaults
- \@@RespBoxTxtActions\every@eqTextField\every@RespBoxTxt}%
+ \else
+ \stepcounter{questionno}%
+ \def\Fld@name{obj.\oField.\thequestionno}%
+ \fi
+ \moreRespBoxTxtDefaults
+ \leavevmode\hbox\bgroup\text@@Field{#1}{\Fld@name}%
+ {\RBW}{\DefaultHeightOfWidget}%
+ {\eq@protect\AA}{\eq@setWidgetProps\@@RespBoxTxt}%
+ {\RespBoxTxtDefaults\@moreRespBoxTxtDefaults
+ \@@RespBoxTxtActions\every@eqTextField\every@RespBoxTxt}%
}
% \end{macrocode}
% Now get the next two required parameters. Also, see if there is going to be a solution.
@@ -8406,35 +8465,36 @@ if (!isQuizInitialized("@currQuiz")) {
% |#1 = filter|, |#2 = comp|
% \begin{macrocode}
\def\@@RespBoxTxt#1#2{%
- \@ifnextchar[{\@@@RespBoxTxt{#1}{#2}}
- {\@ifstar{\@@@RespBoxTxt{#1}{#2}[\curr@quiz.\thequestionno]}%
- {\@@@RespBoxTxt{#1}{#2}[]}}}
+ \@ifnextchar[%]
+ {\@@@RespBoxTxt{#1}{#2}}
+ {\@ifstar{\@@@RespBoxTxt{#1}{#2}[\curr@quiz.\thequestionno]}%
+ {\@@@RespBoxTxt{#1}{#2}[]}}}
% \end{macrocode}
% |#1 = filter|, |#2 = comp|, |#3 = dest|, |#4 = num_alts|
% \begin{macrocode}
\def\eq@ZERO{0}\def\eq@ONE{1}\def\eq@TWO{2}
\def\@@@RespBoxTxt#1#2[#3]#4{%
- \xdef\@qzsolndest{#3}%
- \def\eq@argi{#1}\ifx\eq@argi\eq@ZERO\else
- \ifx\eq@argi\eq@ONE\else\ifx\eq@argi\eq@TWO\else
- \def\eq@argi{-1}\fi\fi\fi
- \def\eq@argii{#2}\ifx\eq@argii\eq@ONE\else\def\eq@argii{0}\fi
- \begingroup
- \ifnum\eq@argii=1\relax
+ \xdef\@qzsolndest{#3}%
+ \def\eq@argi{#1}\ifx\eq@argi\eq@ZERO\else
+ \ifx\eq@argi\eq@ONE\else\ifx\eq@argi\eq@TWO\else
+ \def\eq@argi{-1}\fi\fi\fi
+ \def\eq@argii{#2}\ifx\eq@argii\eq@ONE\else\def\eq@argii{0}\fi
+ \begingroup
+ \ifnum\eq@argii=1\relax
% \end{macrocode}
% local definitions: \DescribeMacro{\rexpStr}\cs{rexpStr},
% \DescribeMacro{\\<RegEXP>}|\\|, and \DescribeMacro{\word}\cs{word}.
% \begin{macrocode}
- \def\rexpStr##1{\eqbs\eqbs\eqbs\eqbs##1}%
- \def\\##1{\eqbs\eqbs\eqbs\eqbs##1}%
- \def\word##1{\\b##1\\b}\def\any{@any@}\fi
- \xdef\rbTxtAlt{\rbFlag,\eq@argi,\eq@argii}%
- \global\let\txtAltList\@empty
- \count0=#4 \ifnum\count0 > 0 \expandafter\@argRead\else
- \PackageError{exerquiz}{%
- The fourth required parameter of \string\RespBoxTxt\MessageBreak
- is required to be a positive integer. You entered\MessageBreak
- #4\space instead}{Enter a positive integer.}\fi
+ \def\rexpStr##1{\eqbs\eqbs\eqbs\eqbs##1}%
+ \def\\##1{\eqbs\eqbs\eqbs\eqbs##1}%
+ \def\word##1{\\b##1\\b}\def\any{@any@}\fi
+ \xdef\rbTxtAlt{\rbFlag,\eq@argi,\eq@argii}%
+ \global\let\txtAltList\@empty
+ \count0=#4 \ifnum\count0 > 0 \expandafter\@argRead\else
+ \PackageError{exerquiz}{%
+ The fourth required parameter of \string\RespBoxTxt\MessageBreak
+ is required to be a positive integer. You entered\MessageBreak
+ #4\space instead}{Enter a positive integer.}\fi
}
\def\@argRead#1{\xdef\jsTempArgs{\txtAltList}%
\ifx\txtAltList\@empty\xdef\txtAltList{"#1"}\else
@@ -8519,16 +8579,16 @@ if (!isQuizInitialized("@currQuiz")) {
\begin{defineJS}[%
\catcode`\@=0\relax\catcode`\%=14\relax]{\AAKqRespBoxTxtPC}
if(event.willCommit){
- RecordPointValue(@eqPTs,@thequestionno@ifx@grpquestions1,%
+ RecordPointValue(@eqPTs,@thequestionno@ifx@grpquestions1,%
@thegrpquestionno,@grpPointValue,@grpTotalWeight,%
"@grpEvalFunction"@fi);
- RecordProblemType("@eqQT",@thequestionno);
- var retn = ProcRespTxtPC(@rbTxtAlt);
+ RecordProblemType("@eqQT",@thequestionno);
+ var retn = ProcRespTxtPC(@rbTxtAlt);
@ifx@grpquestions1%
- ProbValue[@thequestionno][3+@thegrpquestionno]%
+ProbValue[@thequestionno][3+@thegrpquestionno]%
=ProcRespTxtPC.txtPCpCr;@else%
- ProbValue[@thequestionno]=ProcRespTxtPC.txtPCpCr;@fi
- ProcUserResp(retn,event.value,@thequestionno,0%
+ProbValue[@thequestionno]=ProcRespTxtPC.txtPCpCr;@fi
+ ProcUserResp(retn,event.value,@thequestionno,0%
@ifx@grpquestions1,@thegrpquestionno@fi);
}
if (!isQuizInitialized("@currQuiz")) {
@@ -8702,7 +8762,8 @@ if (!isQuizInitialized("@currQuiz")) {
\stepcounter{questionno}%
\xdef\@qzsolndest{#1}%
\edef\eqtmp{\aPointType}\xdef\aPointType{\eqtmp,[\eqPTs,"essay"]}%
- \expandafter\mbox\expandafter{\expandafter\text@@Field\expandafter{\rbe@rgi}{essay.\curr@quiz.\thequestionno}{#2}{#3}%
+ \expandafter\mbox\expandafter{\expandafter\text@@Field
+ \expandafter{\rbe@rgi}{essay.\curr@quiz.\thequestionno}{#2}{#3}%
{\eq@protect\AA}{\eq@setWidgetProps
\eq@TextField}{\RespBoxEssayDefaults\@@RespBoxEssayActions
\every@eqTextField}}%
@@ -9226,8 +9287,9 @@ if (!isQuizInitialized("@currQuiz")) {
% \end{macrocode}
% Cosmetic change replaced \cs{noexpand} with \cs{string}.
% \changes{v8.2.15}{2019/08/06}{replace \string\cs{noexpand} with \string\cs{string}}
+% \changes{v8.5.4}{2019/11/03}{Reverted to \string\cs{noexpand}}
% \begin{macrocode}
- \noexpand\eqQzQuesList{\string
+ \noexpand\eqQzQuesList{\noexpand
\@eqListExp{\@currentQues}{\the\c@page}}}%
% \@eqListExp{\@currentQues}{\thepage}}}%
% \end{macrocode}
@@ -10202,9 +10264,10 @@ if (!isQuizInitialized("@currQuiz")) {
% \begin{macrocode}
\begin{newsegment}{AeB: AcroTeX eDucation Bundle}
/*
- Document Level JavaScript
- AcroTeX eDucation Bundle
- D. P. Story copyright 2000-\the\year
+ Document Level JavaScript
+ AcroTeX eDucation Bundle
+ D. P. Story copyright 2000-\the\year
+ \dlPkgInfoPkg Dated \dlPkgInfoDate
*/
var exerquizLoaded = true;
this.disclosed = true;
@@ -11687,16 +11750,16 @@ function ProcUserResp(key,userresp,probno,notify)
% actual key is the first entry. The second entry, not used here, is 1
% if user has selected at least one correct answer, zero otherwise.
% \begin{macrocode}
- if ( typeof key == "object" ) {
- RightWrong[probno][0] = key[0];
- RightWrong[probno][1] = key[1];
- Responses[probno] = userresp;
- if (Responses[probno].length==0)
- Responses[probno]=undefined;
- } else {
- RightWrong[probno] = (!!key)?1:0;
- Responses[probno] = userresp;
- }
+ if ( typeof key == "object" ) {
+ RightWrong[probno][0] = key[0];
+ RightWrong[probno][1] = key[1];
+ Responses[probno] = userresp;
+ if (Responses[probno].length==0)
+ Responses[probno]=undefined;
+ } else {
+ RightWrong[probno] = (!!key)?1:0;
+ Responses[probno] = userresp;
+ }
}
% \end{macrocode}
% \texttt{ProcUserResp()} is also called by a link, so we'll skip this code.
@@ -11709,29 +11772,29 @@ function ProcUserResp(key,userresp,probno,notify)
}
function ProcUserNoResp(key,userresp,probno,notify)
{
- if ( arguments.length > 4 ) {
- RightWrong[probno][arguments[4]] = undefined;
- Responses[probno][arguments[4]] = undefined;
- var bVoidArray=true;
- for (var i=0; i<Responses[probno].length; i++) {
- if ( typeof Responses[probno][i] != "undefined") {
- bVoidArray=false;
- break;
- }
- }
+ if ( arguments.length > 4 ) {
+ RightWrong[probno][arguments[4]] = undefined;
+ Responses[probno][arguments[4]] = undefined;
+ 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;
- ProbValue[probno]=undefined;
+ ProbValue[probno]=undefined;
}
- } else {
- RightWrong[probno] = undefined;
- Responses[probno] = undefined;
- }
- if ( typeof fieldPopTbl == "function" ) {
- var a=reExtractBaseName.exec(event.target.name);
- fieldPopTbl(a[1]);
- }
+ } else {
+ RightWrong[probno] = undefined;
+ Responses[probno] = undefined;
+ }
+ if ( typeof fieldPopTbl == "function" ) {
+ var a=reExtractBaseName.exec(event.target.name);
+ fieldPopTbl(a[1]);
+ }
}
function InitializeQuiz(qtfield,mark) {
var oQName=eval(qtfield);
@@ -11852,29 +11915,31 @@ function resetQuiz(qtfield)
aQuizControl[qtfield] = -1;
}
% \end{macrocode}
-% The function RecordPointValue has two required parameters. For a grouped question,
-% there are three more parameters, they are, in order (2) grpquestionno (3) grpPointValue
-% (4) total weight (5) grpEvalFunction, a JS function that evaluates the group.
-% The elements of the ProbValue array are as follows:
+% \leavevmode\IndexJS{RecordPointValue}\hskip-\marginparsep\texttt{(\ameta{ptValue},\ameta{probno}}\\
+% \texttt{[,grpquestionno,grpPointValue,\ameta{total-weight},\ameta{grpEvalFunction}])}\\
+% The function \texttt{RecordPointValue} has two required parameters. For a grouped question,
+% there are four \emph{more} parameters, they are, in order (2) \texttt{grpquestionno} (3) \texttt{grpPointValue}
+% (4) total weight (5) \texttt{grpEvalFunction}, a JS function that evaluates the group.\par\medskip\noindent
+% The elements of the \texttt{ProbValue} array are as follows:
%\begin{enumerate}
% \item If multiple choice, then the entry is \texttt{[0, point value, partial credit]}
% \item If objective type question that is not part of a group, the entry is a number \texttt{point value}
% \item total weight of the group, significant only if greater than point value
% \item If objective grouped-type question, the entry is\\
-% \texttt{[1, EvalJS, grpPointValue, <list of points for each part>]}
+% \texttt{[1, EvalJS, grpPointValue, \ameta{list of points for each part}]}
%\end{enumerate}
% \begin{macrocode}
function RecordPointValue(ptvalue,probno)
{
- if (arguments.length > 2) {
- if ( typeof ProbValue[probno] == "undefined" ) {
- ProbValue[probno]=[1,arguments[5],arguments[3],arguments[4]];
- ProbValue[probno][3+arguments[2]] = ptvalue;
- } else ProbValue[probno][3+arguments[2]] = ptvalue;
- }
- else {
- ProbValue[probno]=ptvalue;
- }
+ if (arguments.length > 2) {
+ if ( typeof ProbValue[probno] == "undefined" ) {
+ ProbValue[probno]=[1,arguments[5],arguments[3],arguments[4]];
+ ProbValue[probno][3+arguments[2]] = ptvalue;
+ } else ProbValue[probno][3+arguments[2]] = ptvalue;
+ }
+ else {
+ ProbValue[probno]=ptvalue;
+ }
}
function RecordProblemType(qType,probno)
{
@@ -12055,51 +12120,62 @@ function ProcessQuestion (key,letterresp,probno,
% \begin{macrocode}
function correctQuiz(qtfield,nQuestions)
{
- var oQName=eval(qtfield);
- var defaultColor=(typeof oQName.DefaultColorJSLoc=="undefined")%
+% \end{macrocode}
+% (2019/10/14) If \texttt{oRecordOfQuizData} is present (from \pkg{eq-save}, we use that data from the quiz.
+% \changes{v8.5.1}{2019/10/14}{Incorporated oRecordOfQuizData into correctQuiz()}
+% \begin{macrocode}
+ var bROQD=(typeof oRecordOfQuizData=="object");
+ if(bROQD && %
+(typeof oRecordOfQuizData["RightWrong."+qtfield]!="undefined")) {
+ RightWrong=oRecordOfQuizData["RightWrong."+qtfield];
+ ProbDist=oRecordOfQuizData["ProbDist."+qtfield];
+ }
+ var oQName=eval(qtfield);
+ var defaultColor=(typeof oQName.DefaultColorJSLoc=="undefined")%
?\defaultColorJS:oQName.DefaultColorJSLoc;
- var rightColor=(typeof oQName.RightColorJSLoc=="undefined")%
+ var rightColor=(typeof oQName.RightColorJSLoc=="undefined")%
?\rghtColorJS:oQName.RightColorJSLoc;
- var wrongColor=(typeof oQName.WrongColorJSLoc=="undefined")%
+ var wrongColor=(typeof oQName.WrongColorJSLoc=="undefined")%
?\wrngColorJS:oQName.WrongColorJSLoc;
- var rightAnsSymb=(typeof oQName.RightAnsSymbJSLoc=="undefined")%
+ var rightAnsSymb=(typeof oQName.RightAnsSymbJSLoc=="undefined")%
?\rghtAnsSymbJS:oQName.RightAnsSymbJSLoc;
- var wrongAnsSymb=(typeof oQName.WrongAnsSymbJSLoc=="undefined")%
+ var wrongAnsSymb=(typeof oQName.WrongAnsSymbJSLoc=="undefined")%
?\wrngAnsSymbJS:oQName.WrongAnsSymbJSLoc;
% \end{macrocode}
% Implement a local version of fully correcting MC and MS questions.
% \changes{v8.1l}{2018/02/07}{Add local version of \string\cs{corrChoiceFullOn}}
% \begin{macrocode}
var bFullyCorrect=(typeof oQName.fullyCorrectLoc=="undefined")%
-?\eqCorrChoiceFully:oQName.fullyCorrectLoc; // dpsf07
+?\eqCorrChoiceFully:oQName.fullyCorrectLoc;
% \end{macrocode}
% MC or MS questions
% \begin{macrocode}
- var f = this.getField("mcq." + qtfield);
-% if ( f != null) f.display = display.visible;
+ var f = this.getField("mcq." + qtfield);
% \end{macrocode}
+% For MC question, show only the incorrect ones, depending on the
+% switch \texttt{bFullyCorrect}.
% \changes{v8.1f}{2017/12/04}{Added an option for MC question not to
% show the correct answer, but only the incorrect ones.}
% \begin{macrocode}
- if ( f != null) {
- if (bFullyCorrect) { // dpsf07
- f.display = display.visible;
- } else {
- for (var n=1; n<=nQuestions; n++) {
- var h=this.getField("mc."+qtfield+"."+n);
- var bOk=(h!=null);
- if(bOk) var choiceType="mc";
- else {
- h=this.getField("mck."+qtfield+"."+n);
- bOk=(h!=null);
- var choiceType="mck";
- }
- if (bOk) {
- var mcq=this.getField("mcq."+qtfield+"."+n);
- var g=mcq.getArray();
- if (choiceType=="mc") {
- for (var j=0; j< g.length; j++) {
- g[j].display=(h.isBoxChecked(j))?%
+ if ( f != null) {
+ if (bFullyCorrect) { // dpsf07
+ f.display = display.visible;
+ } else {
+ for (var n=1; n<=nQuestions; n++) {
+ var h=this.getField("mc."+qtfield+"."+n);
+ var bOk=(h!=null);
+ if(bOk) var choiceType="mc";
+ else {
+ h=this.getField("mck."+qtfield+"."+n);
+ bOk=(h!=null);
+ var choiceType="mck";
+ }
+ if (bOk) {
+ var mcq=this.getField("mcq."+qtfield+"."+n);
+ var g=mcq.getArray();
+ if (choiceType=="mc") {
+ for (var j=0; j< g.length; j++) {
+ g[j].display=(h.isBoxChecked(j))?%
display.visible:display.hidden;
}
} else {
@@ -12115,95 +12191,89 @@ display.visible:display.hidden;
}
f = this.getField("obj." + qtfield);
if ( f != null ) {
- var a = f.getArray();
- var re=/^obj\./;
- for (var i = 0; i < a.length; i++) {
- var probno = a[i].name.replace(/.*\./g,"");
- var rbmuname = a[i].name.replace(re,"rbmarkup\.");
- var oRBMarkup = this.getField(rbmuname);
- var bRBMU = ( oRBMarkup != null );
- if ( RightWrong[probno] == 1 ) {
- a[i].strokeColor = rightColor;
- if (bRBMU) {
- oRBMarkup.textColor=rightColor;
- oRBMarkup.style=rightAnsSymb;
- }
- } else {
- a[i].strokeColor = wrongColor;
- if (bRBMU) {
- oRBMarkup.textColor=wrongColor;
- oRBMarkup.style=wrongAnsSymb;
- }
- }
+ var a = f.getArray();
+ var re=/^obj\./;
+ for (var i = 0; i < a.length; i++) {
+ var probno = a[i].name.replace(/.*\./g,"");
+ var rbmuname = a[i].name.replace(re,"rbmarkup\.");
+ var oRBMarkup = this.getField(rbmuname);
+ var bRBMU = ( oRBMarkup != null );
+ if ( RightWrong[probno] == 1 ) {
+ a[i].strokeColor = rightColor;
+ if (bRBMU) {
+ oRBMarkup.textColor=rightColor;
+ oRBMarkup.style=rightAnsSymb;
+ }
+ } else {
+ a[i].strokeColor = wrongColor;
+ if (bRBMU) {
+ oRBMarkup.textColor=wrongColor;
+ oRBMarkup.style=wrongAnsSymb;
}
+ }
}
- f = this.getField("grpobj." + qtfield);
- var re=/^grpobj\./;
- if ( f != null ) {
- var a = f.getArray();
- for ( var i = 0; i < a.length; i++) {
- var rbmuname = a[i].name.replace(re,"rbmarkup\.");
- var oRBMarkup = this.getField(rbmuname);
- var bRBMU = ( oRBMarkup != null );
- var aX = a[i].name.split(".");
- var probno = 1*aX[aX.length-2];
- var grpProbno = 1*aX[aX.length-1];
- if ( ( RightWrong[probno] != undefined ) %
+ }
+ f = this.getField("grpobj." + qtfield);
+ var re=/^grpobj\./;
+ if ( f != null ) {
+ var a = f.getArray();
+ for ( var i = 0; i < a.length; i++) {
+ var rbmuname = a[i].name.replace(re,"rbmarkup\.");
+ var oRBMarkup = this.getField(rbmuname);
+ var bRBMU = ( oRBMarkup != null );
+ var aX = a[i].name.split(".");
+ var probno = 1*aX[aX.length-2];
+ var grpProbno = 1*aX[aX.length-1];
+ if ( ( RightWrong[probno] != undefined ) %
&& ( RightWrong[probno][grpProbno] == 1 ) ) {
- a[i].strokeColor = rightColor;
- if (bRBMU) {
- oRBMarkup.textColor=rightColor;
- oRBMarkup.style=rightAnsSymb;
- }
- } else {
- a[i].strokeColor = wrongColor;
- if (bRBMU) {
- oRBMarkup.textColor=wrongColor;
- oRBMarkup.style=wrongAnsSymb;
- }
- }
+ a[i].strokeColor = rightColor;
+ if (bRBMU) {
+ oRBMarkup.textColor=rightColor;
+ oRBMarkup.style=rightAnsSymb;
}
+ } else {
+ a[i].strokeColor = wrongColor;
+ if (bRBMU) {
+ oRBMarkup.textColor=wrongColor;
+ oRBMarkup.style=wrongAnsSymb;
+ }
+ }
}
- f=this.getField("rbmarkup."+qtfield);
- if ( f != null ) f.display = display.visible;
-% f = this.getField("Ans." + qtfield);
- % if ( f != null ) f.strokeColor = defaultColor;
- f = this.getField("promptButton." + qtfield)
- if ( f != null ) f.display = display.hidden;
- f = this.getField("corr." + qtfield);
- if ( f != null ) f.display = display.noPrint;
+ }
+ f=this.getField("rbmarkup."+qtfield);
+ if ( f != null ) f.display = display.visible;
+ f = this.getField("promptButton." + qtfield)
+ if ( f != null ) f.display = display.hidden;
+ f = this.getField("corr." + qtfield);
+ if ( f != null ) f.display = display.noPrint;
% \end{macrocode}
% dps (01/01/04) If there are qMark fields, then write marks for each question
% to them.
% \begin{macrocode}
- f = this.getField("qMark."+qtfield);
- if ( f != null )
- {
-% console.println("ProbDist = " + ProbDist.toSource() );
- for ( var i = 1; i <= nQuestions; i++)
- {
- if ( ProbValue[i] == undefined ) ProbValue[i]=0
- f = this.getField("qMark."+qtfield+"."+(i-1));
- if ( f != null )
- {
+ f = this.getField("qMark."+qtfield);
+ if ( f != null ) {
+ for ( var i = 1; i <= nQuestions; i++) {
+ if ( ProbValue[i] == undefined ) ProbValue[i]=0;
+ f = this.getField("qMark."+qtfield+"."+(i-1));
+ if ( f != null ) {
% \end{macrocode}
% (3/22/04) This is code to account for grouping
% \begin{macrocode}
- // find the next non-null field
- for ( var j=i; j <= nQuestions; j++)
- {
- var h = this.getField("qMark."+qtfield+"."+j);
- if ( h != null ) break;
- }
- var g = f.getArray();
- var qpts=(ProbDist[i]==undefined) ? 0 : ProbDist[i];
- if ( !negPointsMarkupAllowed && (qpts < 0) ) qpts=0;
- g[0].value = qpts + (( qpts == 1 ) ? " \eqptLabel\space"
- : " \eqptsLabel");
- }
+ // find the next non-null field
+ for ( var j=i; j <= nQuestions; j++)
+ {
+ var h = this.getField("qMark."+qtfield+"."+j);
+ if ( h != null ) break;
}
- this.getField("qMark."+qtfield).display = display.visible;
+ var g = f.getArray();
+ var qpts=(ProbDist[i]==undefined) ? 0 : ProbDist[i];
+ if ( !negPointsMarkupAllowed && (qpts < 0) ) qpts=0;
+ g[0].value = qpts + (( qpts == 1 ) ? " \eqptLabel\space"
+ : " \eqptsLabel");
+ }
}
+ this.getField("qMark."+qtfield).display = display.visible;
+ }
}
% \end{macrocode}
% When pdftex is used, the total tally box does not work because pdftex does not support
@@ -12384,27 +12454,26 @@ function notifyField(success, flag, fieldname) {
?\wrngColorJS:oQName.WrongColorJSLoc;
var wrongSymb=(typeof oQName.WrongAnsSymbJSLoc=="undefined")%
?\wrngAnsSymbJS:oQName.WrongAnsSymbJSLoc;
- if (success) {
- f.strokeColor = rightColor;
- if (isthereRBUP) {
- g.style = rightSymb;
- g.textColor=rightColor;
- g.display=display.visible;
- }
- return true;
- } else {
- updateTally.downState=false;
- updateTally(fieldname);
- f.strokeColor = wrongColor;
- if (isthereRBUP) {
- b2 = ( typeof oQName.WrongAnsSymbJSLoc == "undefined" );
- g.style = wrongSymb;
- g.textColor=wrongColor;
- g.display=display.visible;
- }
- return false;
+ if (success) {
+ f.strokeColor = rightColor;
+ if (isthereRBUP) {
+ g.style = rightSymb;
+ g.textColor=rightColor;
+ g.display=display.visible;
+ }
+ return true;
+ } else {
+ updateTally.downState=false;
+ updateTally(fieldname);
+ f.strokeColor = wrongColor;
+ if (isthereRBUP) {
+ b2 = ( typeof oQName.WrongAnsSymbJSLoc == "undefined" );
+ g.style = wrongSymb;
+ g.textColor=wrongColor;
+ g.display=display.visible;
}
-// return null; // remove ?
+ return false;
+ }
}
% \end{macrocode}
% \begin{macrocode}
@@ -12427,7 +12496,6 @@ function updateTally(fieldname)
if (!updateTally.downState) f.value += 1;
return true;
} else return false;
-
}
% \end{macrocode}
% Below is the \texttt{noPeek} JS function that has been part of \textsf{exerquiz} from the
@@ -12455,16 +12523,16 @@ var bNoPeekWait=false;
var oNoPeekTimer;
function noPeek(qtfield,rtnPage)
{
- if (!bNoPeekWait) {
- if ( (typeof (aQuizControl[qtfield]) == "undefined") %
+ if (!bNoPeekWait) {
+ if ( (typeof (aQuizControl[qtfield]) == "undefined") %
|| (aQuizControl[qtfield] != -1) ) {
- bNoPeekWait=true;
- oNoPeekTimer=app.setTimeOut("bNoPeekWait=false;%
+ bNoPeekWait=true;
+ oNoPeekTimer=app.setTimeOut("bNoPeekWait=false;%
app.clearTimeOut(oNoPeekTimer);",5);
- this.pageNum = rtnPage-1;
- \NoPeekAlert;
- }
- } else this.pageNum = rtnPage-1;
+ this.pageNum = rtnPage-1;
+ \NoPeekAlert;
+ }
+ } else this.pageNum = rtnPage-1;
}
% \end{macrocode}
% When the user exits a fill-in shortquiz field, this function is called.
@@ -14083,9 +14151,9 @@ function qRadioButtonMCFI(key,qname,n) {
\renewcommand\eq@Score{Skor:}
\renewcommand\eq@OutOf{\protect\374zerinden}
\renewcommand\eqQuizTotalMsg{%
- "\eqScore\space"+nQuestions+" \eqOutOf\space"+Score}
+ "\eqScore\space"+Score+" \eqOutOf\space"+nQuestions}
\renewcommand\eqQuizPointsMsg{%
- "\eqptScore\space"+nPointTotal+" \eqOutOf\space"+ptScore}
+ "\eqptScore\space"+ptScore+" \eqOutOf\space"+nPointTotal}
\renewcommand\eq@local@CorrAnsButton{Cevap}
\renewcommand\eqInitQuizMsg{%
"Kuizi Bitirdiniz. Do\protect\u011Fru cevaplar\protect\u0131
diff --git a/texmf-dist/source/latex/acrotex/exerquiz.ins b/texmf-dist/source/latex/acrotex/exerquiz.ins
index 5178412c..d3514d00 100644
--- a/texmf-dist/source/latex/acrotex/exerquiz.ins
+++ b/texmf-dist/source/latex/acrotex/exerquiz.ins
@@ -46,7 +46,7 @@
\generate{%
\file{exerquiz.sty}{\from{exerquiz.dtx}{copyright,package}}
\file{aebjs.def}{\from{exerquiz.dtx}{copyright,aebjs}}
- \file{eqexam.def}{\from{exerquiz.dtx}{eqexam}}
+% \file{eqexam.def}{\from{exerquiz.dtx}{eqexam}}
\file{aebrandom.def}{\from{exerquiz.dtx}{copyright,randomize}}
\file{aebsumrytbls.def}{\from{exerquiz.dtx}{copyright,sumrytbls}}
\file{usemcfi.def}{\from{exerquiz.dtx}{copyright,mcfi}}
diff --git a/texmf-dist/source/latex/acrotex/insdljs.dtx b/texmf-dist/source/latex/acrotex/insdljs.dtx
index d6bc80b5..12b507ce 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> [2019/08/06 v2.4.6 Insert Document Level JavaScripts (dps)]
+%<package> [2019/10/30 v2.4.8 Insert Document Level JavaScripts (dps)]
%<*driver>
\documentclass{ltxdoc}
\usepackage[colorlinks,hyperindex=false]{hyperref}
@@ -443,6 +443,20 @@
\let\dl@One=1 \let\dl@Zero=0
\let\dljs@YES=y \let\dljs@NO=n
% \end{macrocode}
+% \leavevmode\DescribeMacro{\dlpkgInfo} A command to identify package date
+% from within document level Javascript
+%\changes{v2.4.7}{2019/10/23}{Added \string\cs{dlkgInfo} to identify version}
+% \begin{macrocode}
+\def\dlpkgInfo{\@nameuse{ver@\@currname.\@currext}}
+\def\dlSetPkgInfo{%
+ \edef\dlpkgInfoExpd{\dlpkgInfo}%
+ \expandafter\dlparsePkgInfo\dlpkgInfoExpd\@nil}
+\def\dlparsePkgInfo#1 #2 #3:#4\@nil{%
+ \def\dlPkgInfoDate{#1}%
+ \def\dlPkgInfoVer{#2}%
+ \def\dlPkgInfoPkg{#3}%
+ \def\dlPkgInfoDesc{#4}}
+% \end{macrocode}
% When using pdfmarks, the open action is initiated by the document JavaScript code,
% when there was not document JavaScript, the open action did not get executed.
% This was a bad idea, here is a work around. When the \texttt{insDLJS} environment is used,
@@ -1913,6 +1927,35 @@
% \begin{macrocode}
\def\dl@makeesc#1{\catcode`#1=0\relax}
% \end{macrocode}
+% \leavevmode\DescribeMacro\dlgobToFi Used to format \env{defineJS} content
+% when a conditional leaves an empty space; for example,
+%\begin{verbatim}
+%\begin{defineJS}[%
+% \makeesc\*\catcode`\%=14\relax]{\X}
+%var w=1;
+%*ifx*Y*@empty*dlgobToFi*else%
+%var x=1;
+%var y=1;*fi
+%var z=1;
+%\end{defineJS}
+%\end{verbatim}
+%When \cs{Y} is empty, the content expands to
+%\begin{verbatim}
+%var w=1;
+%var z=1;
+%\end{verbatim}
+%and when \cs{Y} is nonempty, it expands to,
+%\begin{verbatim}
+%var w=1;
+%var x=1;
+%var y=1;
+%var z=1;
+%\end{verbatim}
+% \changes{v2.4.8}{2019/10/30}{Added \string\cs{dlgobToFi} to help format
+% \string\env{defineJS} code}
+% \begin{macrocode}
+\def\dlgobToFi#1\fi{\defjsLB}
+% \end{macrocode}
% Finally, we get to the definition of \env{defineJS}, and its compatriates.
% \begin{macrocode}
\newenvironment{defineJS}[2][]{%
diff --git a/texmf-dist/source/latex/acrotex/web.dtx b/texmf-dist/source/latex/acrotex/web.dtx
index de0477d5..312e6e40 100644
--- a/texmf-dist/source/latex/acrotex/web.dtx
+++ b/texmf-dist/source/latex/acrotex/web.dtx
@@ -21,7 +21,7 @@
%</copyright>
%<package>\NeedsTeXFormat{LaTeX2e}[1997/12/01]
%<package>\ProvidesPackage{web}
-%<package> [2017/12/05 v6.1.1 web: A Screen Design Package (dps)]
+%<package> [2019/12/16 v6.1.4 web: A Screen Design Package (dps)]
%<*driver>
\documentclass{ltxdoc}
\usepackage[colorlinks,hyperindex=false]{hyperref}
@@ -909,25 +909,50 @@
% \end{macro}
% If we are running \textsf{pdflatex} or \textsf{xelatex}, execute either the \texttt{pdftex}
% or \texttt{xetex} option, else input \texttt{web.cfg} and process options.
+% In support of version 6.1.3 (2019/10/23), we \cs{let} \cs{bWebCustomize} and
+% \cs{eWebCustomize} to \cs{endinput} and \cs{relax}, respectively. Also see the
+% definition of \cs{inputWebCfg} below.
%\changes{v4.2k}{2012/06/18}{Check for \string\texttt{pdftex}}
-%\changes{v6.0h}{2016/04/16}{An attempt to butter guess the driver if
+%\changes{v6.0h}{2016/04/16}{An attempt to better guess the driver if
%there is no \string\texttt{web.cfg} file.}%
% \begin{macrocode}
+\let\bWebCustomize\endinput
+\let\eWebCustomize\relax
\ifpdf\ExecuteOptionsX{pdftex}\else
- \ifxetex\ExecuteOptionsX{xetex}\else
+ \ifxetex\ExecuteOptionsX{xetex}\else
% \end{macrocode}
% For backward compatibility, we \cs{let} \cs{ExecuteOptions} to
% \cs{ExecutedOptionsX}, saving and restoring as we go.
% \changes{v6.0l}{2016/08/17}{For backward compatibility, we \string\cs{let} \string\cs{ExecuteOptions} to
% \string\cs{ExecutedOptionsX}}
% \begin{macrocode}
- \let\ExecuteOptions@SAVE\ExecuteOptions
- \let\ExecuteOptions\ExecuteOptionsX
- \InputIfFileExists{web.cfg}{}
- {\@ifundefined{l@tex@@@@driver}{\ExecuteOptionsX{dvips}}
- {\ExecuteOptionsX{dvipsone}}}%
- \let\ExecuteOptions\ExecuteOptions@SAVE
- \fi\fi
+ \let\ExecuteOptions@SAVE\ExecuteOptions
+ \let\ExecuteOptions\ExecuteOptionsX
+ \InputIfFileExists{web.cfg}{}
+ {\@ifundefined{l@tex@@@@driver}{\ExecuteOptionsX{dvips}}
+ {\ExecuteOptionsX{dvipsone}}}%
+ \let\ExecuteOptions\ExecuteOptions@SAVE
+ \fi
+\fi
+% \end{macrocode}
+% We allow \texttt{web.cfg} to be imported in the preamble. Expand
+% \DescribeMacro\inputWebCfg\cs{inputWebCfg} in the preamble only to
+% input the \texttt{web.cfg} file again. The \cs{ExecuteOptions} command is ignored.
+% Redefinitions should be placed between \cs{bWebCustomize} and \cs{eWebCustomize}.
+% \changes{v6.1.3}{2019/10/23}{Allow \string\texttt{web.cfg} to be imported in the preamble.}
+% \begin{macrocode}
+\providecommand{\inputWebCfg}{%
+ \let\bWebCustomize\relax
+ \let\eWebCustomize\endinput
+ \let\ExecuteOptions@SAVE\ExecuteOptions
+ \let\ExecuteOptions\@gobble
+ \makeatletter
+ \InputIfFileExists{web.cfg}{}{}\makeatother
+ \let\ExecuteOptions\ExecuteOptions@SAVE
+ \let\bWebCustomize\endinput
+ \let\eWebCustomize\relax
+}
+\@onlypreamble\inputWebCfg
% \end{macrocode}
% \subsection{Process Options}
% \begin{macrocode}
@@ -2965,7 +2990,7 @@
% \subsection{\texorpdfstring{\protect\cs{useFullWidthForPaper}}{\CMD{useFullWidthForPaper}}}
%
% We introduce a command of resetting the page layout paper. The primary
-% use is to create standard documents for academics, such as homeworks
+% use is to create standard documents for academics, such as homework
% and other handouts.
%
% \begin{macro}{\useFullWidthForPaper}
@@ -3205,6 +3230,7 @@
% \begin{macro}{\web@toc@subsubsection}
% The following determine the formatting commands of the various sections,
% including parts and chapter.
+% \changes{v6.1.4}{2019/12/16}{Modified \string\cs{web@toc@chapter} so it is a link}
% \begin{macrocode}
\def\web@numberline#1{\makebox[0pt]{#1\enspace}}%
\def\web@contentsline#1#2#3#4{%
@@ -3214,9 +3240,30 @@
\def\web@toc@part#1#2#3{\par\noindent
{\bfseries\hyperlink{#3}{#1}}\par\smallskip}
\def\web@toc@chapter#1#2#3{\global\let\isChapter\web@YES
- \par\mbox{}{\bfseries\makebox[0pt][r]{\hyperlink{#3}%
- {\numberline\web@finalDot}\space}\web@title}\par\smallskip
+ \par\mbox{}{\bfseries
+ \ifx\numberline\@empty
+ \@ifundefined{d@DingToc}{\hyperlink{#3}{\web@title}}
+ {%
+ \ifx\d@DingToc\@empty
+ \hyperlink{#3}{\web@title}%
+ \else
+ \if\aeb@use@section@numbers0\relax
+ \makebox[0pt][r]{\color{\d@DingTocColor}%
+ \d@DingToc\space}\hyperlink{#3}{\web@title}%
+ \else
+ \hyperlink{#3}{\web@title}%
+ \fi
+ \fi
+ }%
+ \else
+ \makebox[0pt][r]{\hyperlink{#3}{%
+ \numberline\web@finalDot}\space}\web@title
+ \fi}\par\smallskip
}
+%\def\web@toc@chapter#1#2#3{\global\let\isChapter\web@YES
+% \par\mbox{}{\bfseries\makebox[0pt][r]{\hyperlink{#3}%
+% {\numberline\web@finalDot}\space}\web@title}\par\smallskip
+%}
\def\web@toc@section#1#2#3{\penalty-500\par
\hspace*{\if\isChapter y\parindent\else0pt\fi}\mbox{}{\bfseries
\ifx\numberline\@empty
@@ -5408,13 +5455,14 @@
\def\clindx{\ifcodeline@index\expandafter\@firstoftwo\else
\expandafter\@secondoftwo\fi}
\GlossaryPrologue{\section{Change History}}
-\IndexPrologue{\section{Index} \parbox{\linewidth}{Numbers written in italic
- refer to the page where the corresponding entry is described;
- numbers underlined refer to the
+\IndexPrologue{\section{Index}\hfuzz\linewidth
+ \parbox{\linewidth}{Numbers written in italic
+ refer to the page where the corresponding entry is described;
+ numbers underlined refer to the
\clindx{code line of the}{}
definition; numbers in roman refer to the
\clindx{code lines}{pages}
- where the entry is used.}\medskip}
+ where the entry is used.}\medskip\par\hfuzz=0.1pt}
\value{IndexColumns}=2
\value{GlossaryColumns}=2
\def\changes@#1#2#3{%
diff --git a/texmf-dist/tex/latex/acrotex/aeb-comment.sty b/texmf-dist/tex/latex/acrotex/aeb-comment.sty
index 35624bd1..fd14ef73 100644
--- a/texmf-dist/tex/latex/acrotex/aeb-comment.sty
+++ b/texmf-dist/tex/latex/acrotex/aeb-comment.sty
@@ -1,6 +1,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This is an unmodified version of comment.sty (version 3.2) that is distributed
% with acrotex under the name of aeb-comment.sty. D. P. Story (dpstory at acrotex dot net)
+% 2019/12/18 (dps): Defined \CommentCutFile
%
% Comment.sty version 3.2, August 1997
% selectively in/exclude pieces of text: the user can define new
@@ -117,13 +118,14 @@
%%%% definitions for LaTeX
%%%%
\edef\restoreat{\catcode\noexpand`\noexpand\@=\the\catcode`\@\relax}
+\def\CommentCutFile{comment.cut} % 2019/12/18
\makeatletter
\def\AfterIncludedComment
{\immediate\closeout\CommentStream
- \input comment.cut
+ \input{\CommentCutFile}\relax
}%
\def\WriteCommentLine#1{\immediate\write\CommentStream{#1}}
-\def\BeforeIncludedComment{\immediate\openout\CommentStream=comment.cut
+\def\BeforeIncludedComment{\immediate\openout\CommentStream=\CommentCutFile
\let\ThisComment\WriteCommentLine}
\def\includecomment
#1{\message{Include comment '#1'}%
diff --git a/texmf-dist/tex/latex/acrotex/aebdocfmt.def b/texmf-dist/tex/latex/acrotex/aebdocfmt.def
index 44babcf0..b275c117 100644
--- a/texmf-dist/tex/latex/acrotex/aebdocfmt.def
+++ b/texmf-dist/tex/latex/acrotex/aebdocfmt.def
@@ -26,13 +26,14 @@
\def\clindx{\ifcodeline@index\expandafter\@firstoftwo\else
\expandafter\@secondoftwo\fi}
\GlossaryPrologue{\section{Change History}}
-\IndexPrologue{\section{Index} \parbox{\linewidth}{Numbers written in italic
- refer to the page where the corresponding entry is described;
- numbers underlined refer to the
+\IndexPrologue{\section{Index}\hfuzz\linewidth
+ \parbox{\linewidth}{Numbers written in italic
+ refer to the page where the corresponding entry is described;
+ numbers underlined refer to the
\clindx{code line of the}{}
definition; numbers in roman refer to the
\clindx{code lines}{pages}
- where the entry is used.}\medskip}
+ where the entry is used.}\medskip\par\hfuzz=0.1pt}
\value{IndexColumns}=2
\value{GlossaryColumns}=2
\def\changes@#1#2#3{%
diff --git a/texmf-dist/tex/latex/acrotex/aebjs.def b/texmf-dist/tex/latex/acrotex/aebjs.def
index 8c75a6f0..93c261af 100644
--- a/texmf-dist/tex/latex/acrotex/aebjs.def
+++ b/texmf-dist/tex/latex/acrotex/aebjs.def
@@ -18,8 +18,8 @@
%% License, or (at your option) any later version. %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ProvidesFile{aebjs.def}
- [2019/08/13 v8.3 %
- Exerquiz document level JavaScript (dps)]
+ [2019/12/17 v8.5.5 %
+ Exerquiz document level JavaScript (dps)]
\def\aeb@array{new Array}
\def\refac#1{\\(#1\\)}\def\regrp#1{(#1)}\def\rechrclass#1{[#1]}
\def\redm{\\.}\def\remul{\\*}\def\rediv{\\/}\def\repow{\\^}
@@ -45,9 +45,10 @@
\begin{insDLJS*}[exerquizLoaded]{exerquiz}
\begin{newsegment}{AeB: AcroTeX eDucation Bundle}
/*
- Document Level JavaScript
- AcroTeX eDucation Bundle
- D. P. Story copyright 2000-\the\year
+ Document Level JavaScript
+ AcroTeX eDucation Bundle
+ D. P. Story copyright 2000-\the\year
+ \dlPkgInfoPkg Dated \dlPkgInfoDate
*/
var exerquizLoaded = true;
this.disclosed = true;
@@ -797,16 +798,16 @@ function ProcUserResp(key,userresp,probno,notify)
RightWrong[probno][arguments[4]] = (!!key) ? 1 : 0;
Responses[probno][arguments[4]] = userresp;
} else {
- if ( typeof key == "object" ) {
- RightWrong[probno][0] = key[0];
- RightWrong[probno][1] = key[1];
-Responses[probno] = userresp;
-if (Responses[probno].length==0)
- Responses[probno]=undefined;
- } else {
- RightWrong[probno] = (!!key)?1:0;
-Responses[probno] = userresp;
-}
+ if ( typeof key == "object" ) {
+ RightWrong[probno][0] = key[0];
+ RightWrong[probno][1] = key[1];
+ Responses[probno] = userresp;
+ if (Responses[probno].length==0)
+ Responses[probno]=undefined;
+ } else {
+ RightWrong[probno] = (!!key)?1:0;
+ Responses[probno] = userresp;
+ }
}
if ( (typeof fieldPopTbl == "function")&&(event.type != "Link") ) {
var a=reExtractBaseName.exec(event.target.name);
@@ -815,29 +816,29 @@ Responses[probno] = userresp;
}
function ProcUserNoResp(key,userresp,probno,notify)
{
- if ( arguments.length > 4 ) {
- RightWrong[probno][arguments[4]] = undefined;
- Responses[probno][arguments[4]] = undefined;
-var bVoidArray=true;
-for (var i=0; i<Responses[probno].length; i++) {
-if ( typeof Responses[probno][i] != "undefined") {
-bVoidArray=false;
-break;
-}
-}
+ if ( arguments.length > 4 ) {
+ RightWrong[probno][arguments[4]] = undefined;
+ Responses[probno][arguments[4]] = undefined;
+ 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;
- ProbValue[probno]=undefined;
+ ProbValue[probno]=undefined;
}
- } else {
- RightWrong[probno] = undefined;
- Responses[probno] = undefined;
- }
- if ( typeof fieldPopTbl == "function" ) {
- var a=reExtractBaseName.exec(event.target.name);
- fieldPopTbl(a[1]);
- }
+ } else {
+ RightWrong[probno] = undefined;
+ Responses[probno] = undefined;
+ }
+ if ( typeof fieldPopTbl == "function" ) {
+ var a=reExtractBaseName.exec(event.target.name);
+ fieldPopTbl(a[1]);
+ }
}
function InitializeQuiz(qtfield,mark) {
var oQName=eval(qtfield);
@@ -947,15 +948,15 @@ function resetQuiz(qtfield)
}
function RecordPointValue(ptvalue,probno)
{
- if (arguments.length > 2) {
- if ( typeof ProbValue[probno] == "undefined" ) {
- ProbValue[probno]=[1,arguments[5],arguments[3],arguments[4]];
- ProbValue[probno][3+arguments[2]] = ptvalue;
- } else ProbValue[probno][3+arguments[2]] = ptvalue;
- }
- else {
- ProbValue[probno]=ptvalue;
- }
+ if (arguments.length > 2) {
+ if ( typeof ProbValue[probno] == "undefined" ) {
+ ProbValue[probno]=[1,arguments[5],arguments[3],arguments[4]];
+ ProbValue[probno][3+arguments[2]] = ptvalue;
+ } else ProbValue[probno][3+arguments[2]] = ptvalue;
+ }
+ else {
+ ProbValue[probno]=ptvalue;
+ }
}
function RecordProblemType(qType,probno)
{
@@ -1126,39 +1127,45 @@ function ProcessQuestion (key,letterresp,probno,
}
function correctQuiz(qtfield,nQuestions)
{
- var oQName=eval(qtfield);
- var defaultColor=(typeof oQName.DefaultColorJSLoc=="undefined")%
+ var bROQD=(typeof oRecordOfQuizData=="object");
+ if(bROQD && %
+(typeof oRecordOfQuizData["RightWrong."+qtfield]!="undefined")) {
+ RightWrong=oRecordOfQuizData["RightWrong."+qtfield];
+ ProbDist=oRecordOfQuizData["ProbDist."+qtfield];
+ }
+ var oQName=eval(qtfield);
+ var defaultColor=(typeof oQName.DefaultColorJSLoc=="undefined")%
?\defaultColorJS:oQName.DefaultColorJSLoc;
- var rightColor=(typeof oQName.RightColorJSLoc=="undefined")%
+ var rightColor=(typeof oQName.RightColorJSLoc=="undefined")%
?\rghtColorJS:oQName.RightColorJSLoc;
- var wrongColor=(typeof oQName.WrongColorJSLoc=="undefined")%
+ var wrongColor=(typeof oQName.WrongColorJSLoc=="undefined")%
?\wrngColorJS:oQName.WrongColorJSLoc;
- var rightAnsSymb=(typeof oQName.RightAnsSymbJSLoc=="undefined")%
+ var rightAnsSymb=(typeof oQName.RightAnsSymbJSLoc=="undefined")%
?\rghtAnsSymbJS:oQName.RightAnsSymbJSLoc;
- var wrongAnsSymb=(typeof oQName.WrongAnsSymbJSLoc=="undefined")%
+ var wrongAnsSymb=(typeof oQName.WrongAnsSymbJSLoc=="undefined")%
?\wrngAnsSymbJS:oQName.WrongAnsSymbJSLoc;
var bFullyCorrect=(typeof oQName.fullyCorrectLoc=="undefined")%
-?\eqCorrChoiceFully:oQName.fullyCorrectLoc; // dpsf07
- var f = this.getField("mcq." + qtfield);
- if ( f != null) {
- if (bFullyCorrect) { // dpsf07
- f.display = display.visible;
- } else {
- for (var n=1; n<=nQuestions; n++) {
- var h=this.getField("mc."+qtfield+"."+n);
- var bOk=(h!=null);
- if(bOk) var choiceType="mc";
- else {
- h=this.getField("mck."+qtfield+"."+n);
- bOk=(h!=null);
- var choiceType="mck";
- }
- if (bOk) {
- var mcq=this.getField("mcq."+qtfield+"."+n);
- var g=mcq.getArray();
- if (choiceType=="mc") {
- for (var j=0; j< g.length; j++) {
- g[j].display=(h.isBoxChecked(j))?%
+?\eqCorrChoiceFully:oQName.fullyCorrectLoc;
+ var f = this.getField("mcq." + qtfield);
+ if ( f != null) {
+ if (bFullyCorrect) { // dpsf07
+ f.display = display.visible;
+ } else {
+ for (var n=1; n<=nQuestions; n++) {
+ var h=this.getField("mc."+qtfield+"."+n);
+ var bOk=(h!=null);
+ if(bOk) var choiceType="mc";
+ else {
+ h=this.getField("mck."+qtfield+"."+n);
+ bOk=(h!=null);
+ var choiceType="mck";
+ }
+ if (bOk) {
+ var mcq=this.getField("mcq."+qtfield+"."+n);
+ var g=mcq.getArray();
+ if (choiceType=="mc") {
+ for (var j=0; j< g.length; j++) {
+ g[j].display=(h.isBoxChecked(j))?%
display.visible:display.hidden;
}
} else {
@@ -1174,86 +1181,82 @@ display.visible:display.hidden;
}
f = this.getField("obj." + qtfield);
if ( f != null ) {
- var a = f.getArray();
- var re=/^obj\./;
- for (var i = 0; i < a.length; i++) {
- var probno = a[i].name.replace(/.*\./g,"");
- var rbmuname = a[i].name.replace(re,"rbmarkup\.");
- var oRBMarkup = this.getField(rbmuname);
- var bRBMU = ( oRBMarkup != null );
- if ( RightWrong[probno] == 1 ) {
- a[i].strokeColor = rightColor;
- if (bRBMU) {
- oRBMarkup.textColor=rightColor;
- oRBMarkup.style=rightAnsSymb;
- }
- } else {
- a[i].strokeColor = wrongColor;
- if (bRBMU) {
- oRBMarkup.textColor=wrongColor;
- oRBMarkup.style=wrongAnsSymb;
- }
- }
+ var a = f.getArray();
+ var re=/^obj\./;
+ for (var i = 0; i < a.length; i++) {
+ var probno = a[i].name.replace(/.*\./g,"");
+ var rbmuname = a[i].name.replace(re,"rbmarkup\.");
+ var oRBMarkup = this.getField(rbmuname);
+ var bRBMU = ( oRBMarkup != null );
+ if ( RightWrong[probno] == 1 ) {
+ a[i].strokeColor = rightColor;
+ if (bRBMU) {
+ oRBMarkup.textColor=rightColor;
+ oRBMarkup.style=rightAnsSymb;
+ }
+ } else {
+ a[i].strokeColor = wrongColor;
+ if (bRBMU) {
+ oRBMarkup.textColor=wrongColor;
+ oRBMarkup.style=wrongAnsSymb;
}
+ }
}
- f = this.getField("grpobj." + qtfield);
- var re=/^grpobj\./;
- if ( f != null ) {
- var a = f.getArray();
- for ( var i = 0; i < a.length; i++) {
- var rbmuname = a[i].name.replace(re,"rbmarkup\.");
- var oRBMarkup = this.getField(rbmuname);
- var bRBMU = ( oRBMarkup != null );
- var aX = a[i].name.split(".");
- var probno = 1*aX[aX.length-2];
- var grpProbno = 1*aX[aX.length-1];
- if ( ( RightWrong[probno] != undefined ) %
+ }
+ f = this.getField("grpobj." + qtfield);
+ var re=/^grpobj\./;
+ if ( f != null ) {
+ var a = f.getArray();
+ for ( var i = 0; i < a.length; i++) {
+ var rbmuname = a[i].name.replace(re,"rbmarkup\.");
+ var oRBMarkup = this.getField(rbmuname);
+ var bRBMU = ( oRBMarkup != null );
+ var aX = a[i].name.split(".");
+ var probno = 1*aX[aX.length-2];
+ var grpProbno = 1*aX[aX.length-1];
+ if ( ( RightWrong[probno] != undefined ) %
&& ( RightWrong[probno][grpProbno] == 1 ) ) {
- a[i].strokeColor = rightColor;
- if (bRBMU) {
- oRBMarkup.textColor=rightColor;
- oRBMarkup.style=rightAnsSymb;
- }
- } else {
- a[i].strokeColor = wrongColor;
- if (bRBMU) {
- oRBMarkup.textColor=wrongColor;
- oRBMarkup.style=wrongAnsSymb;
- }
- }
+ a[i].strokeColor = rightColor;
+ if (bRBMU) {
+ oRBMarkup.textColor=rightColor;
+ oRBMarkup.style=rightAnsSymb;
+ }
+ } else {
+ a[i].strokeColor = wrongColor;
+ if (bRBMU) {
+ oRBMarkup.textColor=wrongColor;
+ oRBMarkup.style=wrongAnsSymb;
}
+ }
}
- f=this.getField("rbmarkup."+qtfield);
- if ( f != null ) f.display = display.visible;
- % if ( f != null ) f.strokeColor = defaultColor;
- f = this.getField("promptButton." + qtfield)
- if ( f != null ) f.display = display.hidden;
- f = this.getField("corr." + qtfield);
- if ( f != null ) f.display = display.noPrint;
- f = this.getField("qMark."+qtfield);
- if ( f != null )
- {
- for ( var i = 1; i <= nQuestions; i++)
+ }
+ f=this.getField("rbmarkup."+qtfield);
+ if ( f != null ) f.display = display.visible;
+ f = this.getField("promptButton." + qtfield)
+ if ( f != null ) f.display = display.hidden;
+ f = this.getField("corr." + qtfield);
+ if ( f != null ) f.display = display.noPrint;
+ f = this.getField("qMark."+qtfield);
+ if ( f != null ) {
+ for ( var i = 1; i <= nQuestions; i++) {
+ if ( ProbValue[i] == undefined ) ProbValue[i]=0;
+ f = this.getField("qMark."+qtfield+"."+(i-1));
+ if ( f != null ) {
+ // find the next non-null field
+ for ( var j=i; j <= nQuestions; j++)
{
- if ( ProbValue[i] == undefined ) ProbValue[i]=0
- f = this.getField("qMark."+qtfield+"."+(i-1));
- if ( f != null )
- {
- // find the next non-null field
- for ( var j=i; j <= nQuestions; j++)
- {
- var h = this.getField("qMark."+qtfield+"."+j);
- if ( h != null ) break;
- }
- var g = f.getArray();
- var qpts=(ProbDist[i]==undefined) ? 0 : ProbDist[i];
- if ( !negPointsMarkupAllowed && (qpts < 0) ) qpts=0;
- g[0].value = qpts + (( qpts == 1 ) ? " \eqptLabel\space"
- : " \eqptsLabel");
- }
+ var h = this.getField("qMark."+qtfield+"."+j);
+ if ( h != null ) break;
}
- this.getField("qMark."+qtfield).display = display.visible;
+ var g = f.getArray();
+ var qpts=(ProbDist[i]==undefined) ? 0 : ProbDist[i];
+ if ( !negPointsMarkupAllowed && (qpts < 0) ) qpts=0;
+ g[0].value = qpts + (( qpts == 1 ) ? " \eqptLabel\space"
+ : " \eqptsLabel");
+ }
}
+ this.getField("qMark."+qtfield).display = display.visible;
+ }
}
function getTotalTally(basename) {
var sqtotal=0;
@@ -1360,27 +1363,26 @@ function notifyField(success, flag, fieldname) {
?\wrngColorJS:oQName.WrongColorJSLoc;
var wrongSymb=(typeof oQName.WrongAnsSymbJSLoc=="undefined")%
?\wrngAnsSymbJS:oQName.WrongAnsSymbJSLoc;
- if (success) {
- f.strokeColor = rightColor;
- if (isthereRBUP) {
- g.style = rightSymb;
- g.textColor=rightColor;
- g.display=display.visible;
- }
- return true;
- } else {
- updateTally.downState=false;
- updateTally(fieldname);
- f.strokeColor = wrongColor;
-if (isthereRBUP) {
- b2 = ( typeof oQName.WrongAnsSymbJSLoc == "undefined" );
- g.style = wrongSymb;
- g.textColor=wrongColor;
- g.display=display.visible;
- }
- return false;
+ if (success) {
+ f.strokeColor = rightColor;
+ if (isthereRBUP) {
+ g.style = rightSymb;
+ g.textColor=rightColor;
+ g.display=display.visible;
+ }
+ return true;
+ } else {
+ updateTally.downState=false;
+ updateTally(fieldname);
+ f.strokeColor = wrongColor;
+ if (isthereRBUP) {
+ b2 = ( typeof oQName.WrongAnsSymbJSLoc == "undefined" );
+ g.style = wrongSymb;
+ g.textColor=wrongColor;
+ g.display=display.visible;
}
-// return null; // remove ?
+ return false;
+ }
}
function updateTally(fieldname)
{
@@ -1397,22 +1399,21 @@ function updateTally(fieldname)
if (!updateTally.downState) f.value += 1;
return true;
} else return false;
-
}
var bNoPeekWait=false;
var oNoPeekTimer;
function noPeek(qtfield,rtnPage)
{
- if (!bNoPeekWait) {
- if ( (typeof (aQuizControl[qtfield]) == "undefined") %
+ if (!bNoPeekWait) {
+ if ( (typeof (aQuizControl[qtfield]) == "undefined") %
|| (aQuizControl[qtfield] != -1) ) {
- bNoPeekWait=true;
- oNoPeekTimer=app.setTimeOut("bNoPeekWait=false;%
+ bNoPeekWait=true;
+ oNoPeekTimer=app.setTimeOut("bNoPeekWait=false;%
app.clearTimeOut(oNoPeekTimer);",5);
- this.pageNum = rtnPage-1;
- \NoPeekAlert;
- }
- } else this.pageNum = rtnPage-1;
+ this.pageNum = rtnPage-1;
+ \NoPeekAlert;
+ }
+ } else this.pageNum = rtnPage-1;
}
var oCB=\bcheckboxused
function OnBlurRespBox (retn)
diff --git a/texmf-dist/tex/latex/acrotex/aebrandom.def b/texmf-dist/tex/latex/acrotex/aebrandom.def
index 10dbce06..5e53a8e3 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}
- [2019/08/13 v8.3 %
+ [2019/12/17 v8.5.5 %
Exerquiz support for randomization (dps)]
\@ifundefined{nextrandom}{\input{random.tex}}{}
\def\nextrandom{\begingroup
diff --git a/texmf-dist/tex/latex/acrotex/aebsumrytbls.def b/texmf-dist/tex/latex/acrotex/aebsumrytbls.def
index ce8636cd..00ca013e 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}
- [2019/08/13 v8.3 %
+ [2019/12/17 v8.5.5 %
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/eforms.sty b/texmf-dist/tex/latex/acrotex/eforms.sty
index d29485b8..325f0dc3 100644
--- a/texmf-dist/tex/latex/acrotex/eforms.sty
+++ b/texmf-dist/tex/latex/acrotex/eforms.sty
@@ -19,7 +19,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{eforms}
- [2019/06/14 v2.3 Provides general eforms support (dps)]
+ [2019/10/23 v2.3.2 Provides general eforms support (dps)]
\RequirePackage{ifpdf}[2006/02/20]
\RequirePackage{ifxetex}[2006/08/21]
\RequirePackage{ifluatex}
@@ -176,6 +176,10 @@
\parbox[b][#2][c]{#1}{\vfil\hfil\hfil\vfil}\fi}%
}
\let\Bbox\ef@Bbox
+\def\efsave{\bgroup\let\as\relax\makeatletter\efsavei}
+\def\efsavei#1\as#2{\global\let#2#1\egroup}
+\def\efrestore{\bgroup\let\from\relax\makeatletter\efrestorei}
+\def\efrestorei#1\from#2{\global\let#1#2\egroup}
\let\ef@passedArgs\@empty
\def\processAppArgs#1#2{%
\ifx\end#1% if #1=\end, #2=\@nil.
@@ -519,7 +523,7 @@
\def\noexpand@iii{\noexpand\noexpand\noexpand}
\def\@eqV#1{\Hy@pdfstringfalse
\let\x\protect
- \let\protect\noexpand@iii\edef\pmpvV{#1}%
+ \let\protect\noexpand@iii
\edef\pmpvV{#1}\let\protect\x
\let\unicodeStrSAVE\unicodeStr
\Hy@pdfstringtrue\let\unicodeStr\relax
diff --git a/texmf-dist/tex/latex/acrotex/eqexam.def b/texmf-dist/tex/latex/acrotex/eqexam.def
index 505fba81..ab303d3c 100644
--- a/texmf-dist/tex/latex/acrotex/eqexam.def
+++ b/texmf-dist/tex/latex/acrotex/eqexam.def
@@ -7,8 +7,8 @@
%% exerquiz.dtx (with options: `eqexam')
%%
\ProvidesFile{eqexam.def}
- [2019/08/13 v8.3 %
- Exerquiz support file for eqexam (dps)]
+ [2019/12/17 v8.5.5 %
+ Exerquiz support file for eqexam (dps)]
\let\eq@YES=y \let\eq@NO=n
\let\eq@One=1 \let\eq@Zero=0
\def\eq@r{r}\let\eq@f=f \let\eq@l=l
@@ -1025,11 +1025,26 @@
\let\eq@solutionshook\@empty
\let\priorexsectitle\@empty
\let\priorexslinput\@empty
-\def\exerSolnsHeadnToc{\section*{\exsectitle}%
- \addcontentsline{toc}{section}{%
- \@ifundefined{web@latextoc}{}{%
- \ifx\web@latextoc\eq@YES\else
- \protect\numberline{}\fi}\exsectitle}}
+\def\InputExrSolnsLevel{\@ifstar
+ {\def\eq@ExrSolnsStar{*}\InputExrSolnsLevel@i}
+ {\let\eq@ExrSolnsStar\@empty\InputExrSolnsLevel@i}}
+\newcommand{\InputExrSolnsLevel@i}[2][]{%
+ \def\eq@ExrSolnsLabel{#1}\def\eq@ExrSolnsLevel{#2}}
+\InputExrSolnsLevel*{section}
+\def\exerSolnsHeadnToc{%
+ \edef\eq@mkCmd{\expandafter\noexpand
+ \csname\eq@ExrSolnsLevel\endcsname\eq@ExrSolnsStar}%
+ \eq@mkCmd{\exsectitle}\if!\eq@ExrSolnsLabel!\else
+ \label{\eq@ExrSolnsLabel}\fi
+ \if\eq@ExrSolnsStar*%
+ \addcontentsline{toc}{\eq@ExrSolnsLevel}{%
+ \@ifundefined{web@latextoc}{}{%
+ \ifx\web@latextoc\eq@YES\else
+ \protect\numberline{}\fi
+ }\exsectitle
+ }%
+ \fi
+}
\@ifpackageloaded{web}{\def\eq@normallheader{\lheader{\rightmark}}}
{\let\eq@normallheader\relax}
\@ifpackageloaded{web}{\def\eq@defaultlheader{\lheader{\aeb@setmarks}}}
diff --git a/texmf-dist/tex/latex/acrotex/eqtr.def b/texmf-dist/tex/latex/acrotex/eqtr.def
index b2cfd4ec..e72184a7 100644
--- a/texmf-dist/tex/latex/acrotex/eqtr.def
+++ b/texmf-dist/tex/latex/acrotex/eqtr.def
@@ -55,9 +55,9 @@
\renewcommand\eq@Score{Skor:}
\renewcommand\eq@OutOf{\protect\374zerinden}
\renewcommand\eqQuizTotalMsg{%
- "\eqScore\space"+nQuestions+" \eqOutOf\space"+Score}
+ "\eqScore\space"+Score+" \eqOutOf\space"+nQuestions}
\renewcommand\eqQuizPointsMsg{%
- "\eqptScore\space"+nPointTotal+" \eqOutOf\space"+ptScore}
+ "\eqptScore\space"+ptScore+" \eqOutOf\space"+nPointTotal}
\renewcommand\eq@local@CorrAnsButton{Cevap}
\renewcommand\eqInitQuizMsg{%
"Kuizi Bitirdiniz. Do\protect\u011Fru cevaplar\protect\u0131
diff --git a/texmf-dist/tex/latex/acrotex/exerquiz.sty b/texmf-dist/tex/latex/acrotex/exerquiz.sty
index a9c14748..7530720b 100644
--- a/texmf-dist/tex/latex/acrotex/exerquiz.sty
+++ b/texmf-dist/tex/latex/acrotex/exerquiz.sty
@@ -19,8 +19,8 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{exerquiz}
- [2019/08/13 v8.3 %
- Exerquiz: Exercises and Quizzes for LaTeX/PDF package (dps)]
+ [2019/12/17 v8.5.5 %
+ Exerquiz: Exercises and Quizzes for LaTeX/PDF package (dps)]
\usepackage{keyval}
\RequirePackage{ifpdf}[2006/02/20]
\RequirePackage{ifxetex}[2006/08/21]
@@ -305,7 +305,8 @@
\RequirePackage{verbatim}
\RequirePackage{hyperref}
\RequirePackage{amssymb}% used for return symbols
-\RequirePackage{eforms}[2012/06/20]
+\RequirePackage{eforms}[2019/10/23]
+\dlSetPkgInfo
\@ifundefined{eq@drivernum}{%
\PackageError{exerquiz}%
{You have not specified dvips, dvipsone, pdftex, dvipdfm,
@@ -1497,11 +1498,26 @@
\let\eq@solutionshook\@empty
\let\priorexsectitle\@empty
\let\priorexslinput\@empty
-\def\exerSolnsHeadnToc{\section*{\exsectitle}%
- \addcontentsline{toc}{section}{%
- \@ifundefined{web@latextoc}{}{%
- \ifx\web@latextoc\eq@YES\else
- \protect\numberline{}\fi}\exsectitle}}
+\def\InputExrSolnsLevel{\@ifstar
+ {\def\eq@ExrSolnsStar{*}\InputExrSolnsLevel@i}
+ {\let\eq@ExrSolnsStar\@empty\InputExrSolnsLevel@i}}
+\newcommand{\InputExrSolnsLevel@i}[2][]{%
+ \def\eq@ExrSolnsLabel{#1}\def\eq@ExrSolnsLevel{#2}}
+\InputExrSolnsLevel*{section}
+\def\exerSolnsHeadnToc{%
+ \edef\eq@mkCmd{\expandafter\noexpand
+ \csname\eq@ExrSolnsLevel\endcsname\eq@ExrSolnsStar}%
+ \eq@mkCmd{\exsectitle}\if!\eq@ExrSolnsLabel!\else
+ \label{\eq@ExrSolnsLabel}\fi
+ \if\eq@ExrSolnsStar*%
+ \addcontentsline{toc}{\eq@ExrSolnsLevel}{%
+ \@ifundefined{web@latextoc}{}{%
+ \ifx\web@latextoc\eq@YES\else
+ \protect\numberline{}\fi
+ }\exsectitle
+ }%
+ \fi
+}
\@ifpackageloaded{web}{\def\eq@normallheader{\lheader{\rightmark}}}
{\let\eq@normallheader\relax}
\@ifpackageloaded{web}{\def\eq@defaultlheader{\lheader{\aeb@setmarks}}}
@@ -1853,8 +1869,8 @@
}
\def\eq@promoteNewPageHere#1{\par
\bgroup\@nobreakfalse\addpenalty{-500}%
- \setlength{\@tempdimb}{#1}%
- \@tempdima \pagegoal \advance \@tempdima -\pagetotal
+ \setlength{\@tempdimb}{#1}\@tempdima \pagegoal
+ \advance \@tempdima -\pagetotal
\ifdim \@tempdima<\@tempdimb\ifnum\col@number>\@ne\columnbreak
\else\newpage\penalty1\fi\fi\egroup
}
@@ -1912,11 +1928,27 @@
\let\eqqzsolutionshook\@empty
\let\priorsqslsectitle\@empty
\let\priorsqslinput\@empty
-\def\quizSolnsHeadnToc{\section*{\sqslsectitle}%
- \addcontentsline{toc}{section}{%
- \@ifundefined{web@latextoc}{}{%
- \ifx\web@latextoc\eq@YES\else
- \protect\numberline{}\fi}\sqslsectitle}}
+\def\InputQzSolnsLevel{\@ifstar
+ {\def\eq@QzSolnsStar{*}\InputQzSolnsLevel@i}
+ {\let\eq@QzSolnsStar\@empty\InputQzSolnsLevel@i}}
+\newcommand{\InputQzSolnsLevel@i}[2][]{%
+ \def\eq@QzSolnsLabel{#1}\def\eq@QzSolnsLevel{#2}}
+\InputQzSolnsLevel*{section}
+\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*%
+ \addcontentsline{toc}{\eq@QzSolnsLevel}{%
+ \@ifundefined{web@latextoc}{}{%
+ \ifx\web@latextoc\eq@YES\else
+ \protect\numberline{}\fi
+ }\sqslsectitle
+ }%
+ \fi
+}
\newcommand{\quizSolnInput}
{%
\global\let\webnewpage\relax
@@ -2189,14 +2221,14 @@
\def\eqButtonDefaults{%
\CA{\eq@local@CA}\AC{}\H{P}\W{1}\S{B}
\BC{1 0 0}\BG{.7529 .7529 .7529}}
-\def\@@eqButtonActions{%
- \A{\JS{if (isEndQuizPushed("\eqBaseName")){\jsR\jsT%
- correctQuiz("\eqBaseName",\thequestionno);%
- \ifusesumrytbls\jsR\jsT\else\jsR\fi
- if (typeof correctSumryTbl == "function")\jsR\jsT\jsT
- correctSumryTbl("\eqBaseName",\thequestionno);\jsR
- }}}%
+\begin{defineJS}[\makeesc\@]{\CorrBtnActionsJS}
+if (isEndQuizPushed("@eqBaseName")){
+ correctQuiz("@eqBaseName",@thequestionno);
+ if (typeof correctSumryTbl == "function")
+ correctSumryTbl("@eqBaseName",@thequestionno);
}
+\end{defineJS}
+\def\@@eqButtonActions{\A{\JS{\CorrBtnActionsJS}}}
\newcommand\eqButton[2][]{%
\ifnocorrections\else
\def\eqBaseName{#2}%
@@ -2208,8 +2240,8 @@
}
\def\CorrButton{\eqButton}
\def\rbMarkup@Defaults{%
- \BC{}\F{\FHidden}\Ff{\FfReadOnly}\textSize{12}
- \textColor{0 g}\symbolchoice{check}\W{}}
+ \BC{}\F{\FHidden}\Ff{\FfReadOnly}\textSize{12}
+ \textColor{0 g}\symbolchoice{check}\W{}}
\newcommand\rbMarkup[1][]{%
\ifx\grpquestions\eq@One
\def\Fld@name{%
@@ -2219,7 +2251,7 @@
{rbmarkup.\Fld@name}%
{\RadioFieldSize}{\RadioFieldSize}{Yes}{}%
{\eq@setWidgetProps\eq@Check@driver}%
- {\rbMarkup@Defaults\every@CheckBox\every@rbMarkup}}}%
+ {\rbMarkup@Defaults\every@CheckBox\every@rbMarkup}}}
\newcommand\minQuizResp{lowThreshold}
\newcommand\PTs{\@ifstar{\def\eq@star{*}\@PTs}{\def\eq@star{x}\@PTs}}
\def\@PTs#1{\gdef\eq@PTs{#1}\ifx\eq@PTs\@empty\gdef\eq@PTs{1}\fi
@@ -3780,114 +3812,113 @@ var\eqSP_substValue=getSubstValue(_substVars,event.value);\RorRT
\newcommand\RespBoxTxtNT{\def\rbFlag{0}\@RespBoxTxt}
\newcommand\RespBoxTxt{\def\rbFlag{0}\@RespBoxTxt}
\def\RespBoxTxtOnBlur{OnBlurRespBox(%
- \if\@sqTurnOffAlerts1retn\else null\fi,"\curr@quiz");}
+ \if\@sqTurnOffAlerts1retn\else null\fi,"\curr@quiz");}
\def\eqObjAlert{%
- \ifx\eqQuizType\isQZ\ifx\eq@online\eq@YES\ifeq@noquizsolutions
- \else if (false) \fi\fi\fi}
+ \ifx\eqQuizType\isQZ\ifx\eq@online\eq@YES\ifeq@noquizsolutions
+ \else if (false) \fi\fi\fi}
\begin{defineJS}[%
\catcode`\@=0\relax\catcode`\%=14\relax]{\AAKqRespBoxTxt}
if(event.willCommit){
- RecordPointValue(@eqPTs,@thequestionno@ifx@grpquestions1,%
+ RecordPointValue(@eqPTs,@thequestionno@ifx@grpquestions1,%
@thegrpquestionno,@grpPointValue,@grpTotalWeight,%
"@grpEvalFunction"@fi);
- RecordProblemType("@eqQT",@thequestionno);
- var retn = ProcRespTxt(@rbTxtAlt);
- ProcUserResp(retn,event.value,@thequestionno,%
+ RecordProblemType("@eqQT",@thequestionno);
+ var retn = ProcRespTxt(@rbTxtAlt);
+ ProcUserResp(retn,event.value,@thequestionno,%
0@ifx@grpquestions1,@thegrpquestionno@fi);
}
if (!isQuizInitialized("@currQuiz")) {
- @eqObjAlert@space eqAppAlert(InitMsg("@bqlabelISO"),3);
- event.rc = false;
+ @eqObjAlert@space eqAppAlert(InitMsg("@bqlabelISO"),3);
+ event.rc = false;
}
\end{defineJS}
\def\RespBoxTxtDefaults
{%
- \BC{0 0 0}\W{1}\S{S}\textColor{0 g}\F{\FPrint}%
+ \BC{0 0 0}\W{1}\S{S}\textColor{0 g}\F{\FPrint}%
}
\def\moreRespBoxTxtDefaults
{%
- \edef\@moreRespBoxTxtDefaults{%
- \if\eqQuizType\isQZ\ifx\eq@online\eq@YES
- \ifeq@noquizsolutions\else
- \noexpand\Ff{\FfReadOnly}\fi\fi\fi
- }%
+ \edef\@moreRespBoxTxtDefaults{%
+ \if\eqQuizType\isQZ\ifx\eq@online\eq@YES
+ \ifeq@noquizsolutions\else
+ \noexpand\Ff{\FfReadOnly}\fi\fi\fi
+ }%
}
\def\@@RespBoxTxtActions
{%
- \AA{\if\eqQuizType\isQZ
- \AAKeystroke{\AAKqRespBoxTxt\eqAddAAKeystroke}
- \AAFormat{\eqAddAAFormat}
- \else
- \AAKeystroke{%
- if(event.willCommit) {\r\t
- retn = ProcRespTxt(\rbTxtAlt);\r
-\if\@sqTurnOffAlerts1
- \t\RespBoxTxtOnBlur\r
-\fi
- \eqAddAAKeystroke\r
- }%
- }
- \AAFormat{\eqAddAAFormat}
- \AAOnFocus{\JS{var retn = null;}}
-\if\@sqTurnOffAlerts0
- \AAOnBlur{\JS{\RespBoxTxtOnBlur}}%
-\fi
- \fi
- }
+ \AA{\if\eqQuizType\isQZ
+ \AAKeystroke{\AAKqRespBoxTxt\eqAddAAKeystroke}
+ \AAFormat{\eqAddAAFormat}
+ \else
+ \AAKeystroke{%
+ if(event.willCommit) {\r\t
+ retn = ProcRespTxt(\rbTxtAlt);\r
+ \if\@sqTurnOffAlerts1
+ \t\RespBoxTxtOnBlur\r\fi
+ \eqAddAAKeystroke\r
+ }%
+ }
+ \AAFormat{\eqAddAAFormat}
+ \AAOnFocus{\JS{var retn = null;}}
+ \if\@sqTurnOffAlerts0%
+ \AAOnBlur{\JS{\RespBoxTxtOnBlur}}\fi
+ \fi
+ }
}
\def\annot@subtype@rbt{rbt}
\newcommand\@RespBoxTxt[1][]
{%
- \edef\annot@subtype{\annot@subtype@rbt}%
- \eq@AddProbToQzQuesList
- \ifx\grpquestions\eq@Zero\addtocounter{eqpointvalue}{\eqPTs}\fi
- \if\eqQuizType\isQZ
- \def\rbFlag{1}\global\IsRespBoxtrue
- \ifx\grpquestions\eq@One
- \stepcounter{grpquestionno}%
- \def\Fld@name{%
- grpobj.\curr@quiz.\thequestionno.\thegrpquestionno}%
- \else
- \eq@recordThesePTs\eq@recordProbType
- \edef\eqtmp{\aPointType}%
- \xdef\aPointType{\eqtmp,[\eqPTs,"text"]}%
- \stepcounter{questionno}%
- \def\Fld@name{obj.\curr@quiz.\thequestionno}%
- \fi
+ \edef\annot@subtype{\annot@subtype@rbt}%
+ \eq@AddProbToQzQuesList
+ \ifx\grpquestions\eq@Zero\addtocounter{eqpointvalue}{\eqPTs}\fi
+ \if\eqQuizType\isQZ
+ \def\rbFlag{1}\global\IsRespBoxtrue
+ \ifx\grpquestions\eq@One
+ \stepcounter{grpquestionno}%
+ \def\Fld@name{%
+ grpobj.\curr@quiz.\thequestionno.\thegrpquestionno}%
\else
- \stepcounter{questionno}%
- \def\Fld@name{obj.\oField.\thequestionno}%
+ \eq@recordThesePTs\eq@recordProbType
+ \edef\eqtmp{\aPointType}%
+ \xdef\aPointType{\eqtmp,[\eqPTs,"text"]}%
+ \stepcounter{questionno}%
+ \def\Fld@name{obj.\curr@quiz.\thequestionno}%
\fi
- \moreRespBoxTxtDefaults
- \leavevmode\hbox\bgroup\text@@Field{#1}{\Fld@name}%
- {\RBW}{\DefaultHeightOfWidget}%
- {\eq@protect\AA}{\eq@setWidgetProps\@@RespBoxTxt}%
- {\RespBoxTxtDefaults\@moreRespBoxTxtDefaults
- \@@RespBoxTxtActions\every@eqTextField\every@RespBoxTxt}%
+ \else
+ \stepcounter{questionno}%
+ \def\Fld@name{obj.\oField.\thequestionno}%
+ \fi
+ \moreRespBoxTxtDefaults
+ \leavevmode\hbox\bgroup\text@@Field{#1}{\Fld@name}%
+ {\RBW}{\DefaultHeightOfWidget}%
+ {\eq@protect\AA}{\eq@setWidgetProps\@@RespBoxTxt}%
+ {\RespBoxTxtDefaults\@moreRespBoxTxtDefaults
+ \@@RespBoxTxtActions\every@eqTextField\every@RespBoxTxt}%
}
\def\@@RespBoxTxt#1#2{%
- \@ifnextchar[{\@@@RespBoxTxt{#1}{#2}}
- {\@ifstar{\@@@RespBoxTxt{#1}{#2}[\curr@quiz.\thequestionno]}%
- {\@@@RespBoxTxt{#1}{#2}[]}}}
+ \@ifnextchar[%]
+ {\@@@RespBoxTxt{#1}{#2}}
+ {\@ifstar{\@@@RespBoxTxt{#1}{#2}[\curr@quiz.\thequestionno]}%
+ {\@@@RespBoxTxt{#1}{#2}[]}}}
\def\eq@ZERO{0}\def\eq@ONE{1}\def\eq@TWO{2}
\def\@@@RespBoxTxt#1#2[#3]#4{%
- \xdef\@qzsolndest{#3}%
- \def\eq@argi{#1}\ifx\eq@argi\eq@ZERO\else
- \ifx\eq@argi\eq@ONE\else\ifx\eq@argi\eq@TWO\else
- \def\eq@argi{-1}\fi\fi\fi
- \def\eq@argii{#2}\ifx\eq@argii\eq@ONE\else\def\eq@argii{0}\fi
- \begingroup
- \ifnum\eq@argii=1\relax
- \def\rexpStr##1{\eqbs\eqbs\eqbs\eqbs##1}%
- \def\\##1{\eqbs\eqbs\eqbs\eqbs##1}%
- \def\word##1{\\b##1\\b}\def\any{@any@}\fi
- \xdef\rbTxtAlt{\rbFlag,\eq@argi,\eq@argii}%
- \global\let\txtAltList\@empty
- \count0=#4 \ifnum\count0 > 0 \expandafter\@argRead\else
- \PackageError{exerquiz}{%
- The fourth required parameter of \string\RespBoxTxt\MessageBreak
- is required to be a positive integer. You entered\MessageBreak
- #4\space instead}{Enter a positive integer.}\fi
+ \xdef\@qzsolndest{#3}%
+ \def\eq@argi{#1}\ifx\eq@argi\eq@ZERO\else
+ \ifx\eq@argi\eq@ONE\else\ifx\eq@argi\eq@TWO\else
+ \def\eq@argi{-1}\fi\fi\fi
+ \def\eq@argii{#2}\ifx\eq@argii\eq@ONE\else\def\eq@argii{0}\fi
+ \begingroup
+ \ifnum\eq@argii=1\relax
+ \def\rexpStr##1{\eqbs\eqbs\eqbs\eqbs##1}%
+ \def\\##1{\eqbs\eqbs\eqbs\eqbs##1}%
+ \def\word##1{\\b##1\\b}\def\any{@any@}\fi
+ \xdef\rbTxtAlt{\rbFlag,\eq@argi,\eq@argii}%
+ \global\let\txtAltList\@empty
+ \count0=#4 \ifnum\count0 > 0 \expandafter\@argRead\else
+ \PackageError{exerquiz}{%
+ The fourth required parameter of \string\RespBoxTxt\MessageBreak
+ is required to be a positive integer. You entered\MessageBreak
+ #4\space instead}{Enter a positive integer.}\fi
}
\def\@argRead#1{\xdef\jsTempArgs{\txtAltList}%
\ifx\txtAltList\@empty\xdef\txtAltList{"#1"}\else
@@ -3922,16 +3953,16 @@ if (!isQuizInitialized("@currQuiz")) {
\begin{defineJS}[%
\catcode`\@=0\relax\catcode`\%=14\relax]{\AAKqRespBoxTxtPC}
if(event.willCommit){
- RecordPointValue(@eqPTs,@thequestionno@ifx@grpquestions1,%
+ RecordPointValue(@eqPTs,@thequestionno@ifx@grpquestions1,%
@thegrpquestionno,@grpPointValue,@grpTotalWeight,%
"@grpEvalFunction"@fi);
- RecordProblemType("@eqQT",@thequestionno);
- var retn = ProcRespTxtPC(@rbTxtAlt);
+ RecordProblemType("@eqQT",@thequestionno);
+ var retn = ProcRespTxtPC(@rbTxtAlt);
@ifx@grpquestions1%
- ProbValue[@thequestionno][3+@thegrpquestionno]%
+ProbValue[@thequestionno][3+@thegrpquestionno]%
=ProcRespTxtPC.txtPCpCr;@else%
- ProbValue[@thequestionno]=ProcRespTxtPC.txtPCpCr;@fi
- ProcUserResp(retn,event.value,@thequestionno,0%
+ProbValue[@thequestionno]=ProcRespTxtPC.txtPCpCr;@fi
+ ProcUserResp(retn,event.value,@thequestionno,0%
@ifx@grpquestions1,@thegrpquestionno@fi);
}
if (!isQuizInitialized("@currQuiz")) {
@@ -4067,7 +4098,8 @@ if (!isQuizInitialized("@currQuiz")) {
\stepcounter{questionno}%
\xdef\@qzsolndest{#1}%
\edef\eqtmp{\aPointType}\xdef\aPointType{\eqtmp,[\eqPTs,"essay"]}%
- \expandafter\mbox\expandafter{\expandafter\text@@Field\expandafter{\rbe@rgi}{essay.\curr@quiz.\thequestionno}{#2}{#3}%
+ \expandafter\mbox\expandafter{\expandafter\text@@Field
+ \expandafter{\rbe@rgi}{essay.\curr@quiz.\thequestionno}{#2}{#3}%
{\eq@protect\AA}{\eq@setWidgetProps
\eq@TextField}{\RespBoxEssayDefaults\@@RespBoxEssayActions
\every@eqTextField}}%
@@ -4427,7 +4459,7 @@ if (!isQuizInitialized("@currQuiz")) {
\let\eqQzQuesList\@empty
\def\eq@AddProbToQzQuesList{%
\edef\eq@tmpExp{\noexpand\g@addto@macro%
- \noexpand\eqQzQuesList{\string
+ \noexpand\eqQzQuesList{\noexpand
\@eqListExp{\@currentQues}{\the\c@page}}}%
\ifx\grpquestions\eq@Zero\eq@tmpExp\fi
}
diff --git a/texmf-dist/tex/latex/acrotex/insdljs.sty b/texmf-dist/tex/latex/acrotex/insdljs.sty
index cf7089b5..4e4b61c4 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}
- [2019/08/06 v2.4.6 Insert Document Level JavaScripts (dps)]
+ [2019/10/30 v2.4.8 Insert Document Level JavaScripts (dps)]
\usepackage{xkeyval}
\RequirePackage{ifpdf}[2006/02/20]
\RequirePackage{ifxetex}[2006/08/21]
@@ -38,6 +38,15 @@
\let\dl@YES=y \let\dl@NO=n
\let\dl@One=1 \let\dl@Zero=0
\let\dljs@YES=y \let\dljs@NO=n
+\def\dlpkgInfo{\@nameuse{ver@\@currname.\@currext}}
+\def\dlSetPkgInfo{%
+ \edef\dlpkgInfoExpd{\dlpkgInfo}%
+ \expandafter\dlparsePkgInfo\dlpkgInfoExpd\@nil}
+\def\dlparsePkgInfo#1 #2 #3:#4\@nil{%
+ \def\dlPkgInfoDate{#1}%
+ \def\dlPkgInfoVer{#2}%
+ \def\dlPkgInfoPkg{#3}%
+ \def\dlPkgInfoDesc{#4}}
\def\dvips@marker{\ifx\dljspresent\dl@NO\@OAction\fi}
\let\isOpenAction\dl@NO
\DeclareOptionX{nodljs}{\let\importdljs\dl@NO}
@@ -623,6 +632,7 @@
\def\dlcombine(#1)(#2){#1#2}
\def\escIs#1{\def\Eschr{#1}}
\def\dl@makeesc#1{\catcode`#1=0\relax}
+\def\dlgobToFi#1\fi{\defjsLB}
\newenvironment{defineJS}[2][]{%
\let\makeesc\dl@makeesc
\expandafter\@ifundefined\expandafter{%
diff --git a/texmf-dist/tex/latex/acrotex/template.def b/texmf-dist/tex/latex/acrotex/template.def
index d729a131..d1c19f9d 100644
--- a/texmf-dist/tex/latex/acrotex/template.def
+++ b/texmf-dist/tex/latex/acrotex/template.def
@@ -17,9 +17,9 @@
%% macros/latex/base/lppl.txt; either version 1 of the %%
%% License, or (at your option) any later version. %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\ProvidesFile{template.def}
- [2019/08/13 v8.3 %
- Exerquiz template for language support (dps)]
+\ProvidesFile{template.`def}
+ [2019/12/17 v8.5.5 %
+ Exerquiz template for language support (dps)]
%%------------- Instructions ------------------------------------
%% Make your language localizations to this file and rename it to
%% something like \texttt{eq<mylang>.def}, where \texttt{<mylang>}
diff --git a/texmf-dist/tex/latex/acrotex/web.cfg b/texmf-dist/tex/latex/acrotex/web.cfg
index 8afdc114..cf1ebca2 100644
--- a/texmf-dist/tex/latex/acrotex/web.cfg
+++ b/texmf-dist/tex/latex/acrotex/web.cfg
@@ -7,4 +7,7 @@
% the driver specified here will be used.
%
\ExecuteOptions{dvips}
+\bWebCustomize
+% Insert redefinitions between these two marks
+\eWebCustomize
diff --git a/texmf-dist/tex/latex/acrotex/web.sty b/texmf-dist/tex/latex/acrotex/web.sty
index 15567251..094bff39 100644
--- a/texmf-dist/tex/latex/acrotex/web.sty
+++ b/texmf-dist/tex/latex/acrotex/web.sty
@@ -24,7 +24,7 @@
%%---------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}[1997/12/01]
\ProvidesPackage{web}
- [2017/12/05 v6.1.1 web: A Screen Design Package (dps)]
+ [2019/12/16 v6.1.4 web: A Screen Design Package (dps)]
\RequirePackage{xkeyval}
\RequirePackage{ifpdf}[2006/02/20]
\RequirePackage{ifxetex}[2006/08/21]
@@ -534,15 +534,30 @@
\@onlypreamble\noFinalDot
\def\minPanelWidth#1{\def\web@minpanelwidth{#1}}
\minPanelWidth{1in}
+\let\bWebCustomize\endinput
+\let\eWebCustomize\relax
\ifpdf\ExecuteOptionsX{pdftex}\else
- \ifxetex\ExecuteOptionsX{xetex}\else
- \let\ExecuteOptions@SAVE\ExecuteOptions
- \let\ExecuteOptions\ExecuteOptionsX
- \InputIfFileExists{web.cfg}{}
- {\@ifundefined{l@tex@@@@driver}{\ExecuteOptionsX{dvips}}
- {\ExecuteOptionsX{dvipsone}}}%
- \let\ExecuteOptions\ExecuteOptions@SAVE
- \fi\fi
+ \ifxetex\ExecuteOptionsX{xetex}\else
+ \let\ExecuteOptions@SAVE\ExecuteOptions
+ \let\ExecuteOptions\ExecuteOptionsX
+ \InputIfFileExists{web.cfg}{}
+ {\@ifundefined{l@tex@@@@driver}{\ExecuteOptionsX{dvips}}
+ {\ExecuteOptionsX{dvipsone}}}%
+ \let\ExecuteOptions\ExecuteOptions@SAVE
+ \fi
+\fi
+\providecommand{\inputWebCfg}{%
+ \let\bWebCustomize\relax
+ \let\eWebCustomize\endinput
+ \let\ExecuteOptions@SAVE\ExecuteOptions
+ \let\ExecuteOptions\@gobble
+ \makeatletter
+ \InputIfFileExists{web.cfg}{}{}\makeatother
+ \let\ExecuteOptions\ExecuteOptions@SAVE
+ \let\bWebCustomize\endinput
+ \let\eWebCustomize\relax
+}
+\@onlypreamble\inputWebCfg
\ProcessOptionsX
\ifx\web@Hypdfencoding\@empty\else
\let\aeb@useunicode\@gobble\fi
@@ -1710,8 +1725,25 @@
\def\web@toc@part#1#2#3{\par\noindent
{\bfseries\hyperlink{#3}{#1}}\par\smallskip}
\def\web@toc@chapter#1#2#3{\global\let\isChapter\web@YES
- \par\mbox{}{\bfseries\makebox[0pt][r]{\hyperlink{#3}%
- {\numberline\web@finalDot}\space}\web@title}\par\smallskip
+ \par\mbox{}{\bfseries
+ \ifx\numberline\@empty
+ \@ifundefined{d@DingToc}{\hyperlink{#3}{\web@title}}
+ {%
+ \ifx\d@DingToc\@empty
+ \hyperlink{#3}{\web@title}%
+ \else
+ \if\aeb@use@section@numbers0\relax
+ \makebox[0pt][r]{\color{\d@DingTocColor}%
+ \d@DingToc\space}\hyperlink{#3}{\web@title}%
+ \else
+ \hyperlink{#3}{\web@title}%
+ \fi
+ \fi
+ }%
+ \else
+ \makebox[0pt][r]{\hyperlink{#3}{%
+ \numberline\web@finalDot}\space}\web@title
+ \fi}\par\smallskip
}
\def\web@toc@section#1#2#3{\penalty-500\par
\hspace*{\if\isChapter y\parindent\else0pt\fi}\mbox{}{\bfseries