diff options
author | Norbert Preining <norbert@preining.info> | 2019-12-25 15:31:44 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-12-25 15:40:39 +0900 |
commit | e98d5dc25eeecb2f30d84b21c064e5fe4264ac52 (patch) | |
tree | 95ae6b18f281abd1e10ab35a4fb5d3d4ba701569 | |
parent | c14c208cebda8d3661b39bd83d9ccdfc0309caec (diff) |
acrotex update
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 Binary files differindex 794013af..280a4bc0 100644 --- a/texmf-dist/doc/latex/acrotex/aeb_man.pdf +++ b/texmf-dist/doc/latex/acrotex/aeb_man.pdf 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 Binary files differindex c3532cfb..88525c5b 100644 --- a/texmf-dist/doc/latex/acrotex/eformman.pdf +++ b/texmf-dist/doc/latex/acrotex/eformman.pdf 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 Binary files differindex d000d0dd..9ca2b2ab 100644 --- a/texmf-dist/doc/latex/acrotex/examples/jquiztst.pdf +++ b/texmf-dist/doc/latex/acrotex/examples/jquiztst.pdf diff --git a/texmf-dist/doc/latex/acrotex/examples/jtxttst.pdf b/texmf-dist/doc/latex/acrotex/examples/jtxttst.pdf Binary files differindex 298a75f3..8638f825 100644 --- a/texmf-dist/doc/latex/acrotex/examples/jtxttst.pdf +++ b/texmf-dist/doc/latex/acrotex/examples/jtxttst.pdf diff --git a/texmf-dist/doc/latex/acrotex/examples/webeqtst.pdf b/texmf-dist/doc/latex/acrotex/examples/webeqtst.pdf Binary files differindex 17f62734..98a1033a 100644 --- a/texmf-dist/doc/latex/acrotex/examples/webeqtst.pdf +++ b/texmf-dist/doc/latex/acrotex/examples/webeqtst.pdf diff --git a/texmf-dist/doc/latex/acrotex/install_jsfiles.pdf b/texmf-dist/doc/latex/acrotex/install_jsfiles.pdf Binary files differindex 221ba16f..7b2d3fab 100644 --- a/texmf-dist/doc/latex/acrotex/install_jsfiles.pdf +++ b/texmf-dist/doc/latex/acrotex/install_jsfiles.pdf 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 |