diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-29 21:39:50 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-29 21:59:54 +0900 |
commit | 56cafb279fe43023ee711349757a0e9187c99923 (patch) | |
tree | 0c87a81a7bca7c930f74dc2a953aaf239144bab6 /texmf-dist | |
parent | abca5965c032581103020408b1930cd08ba06f1f (diff) |
acrotex (2019-09-29)
Diffstat (limited to 'texmf-dist')
46 files changed, 1437 insertions, 389 deletions
diff --git a/texmf-dist/doc/latex/acrotex/README.md b/texmf-dist/doc/latex/acrotex/README.md index 0ab4acdb..8e149839 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-05-24 +Dated: 2019-08-13 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-08-13) Use \protect when formatting a enhanced preview value. +Other minor changes and bug fixes. + What's New (2019-05-24) Added the enhanced preview feature. When in effect along with ordinary preview, captions of buttons and initial values of other fields are viewable in non-conforming PDF readers. diff --git a/texmf-dist/doc/latex/acrotex/aeb_man.pdf b/texmf-dist/doc/latex/acrotex/aeb_man.pdf Binary files differindex a9d5a9fc..794013af 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 ecc2638b..679358f2 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/05/24} +\version{2019/08/13} \copyrightyears{1999-\the\year} \nocopyright -\prepared{2019/05/24} +\prepared{2019/08/13} \revisionLabel{Distribution Dated:} \copyrightStatus{True} @@ -1695,7 +1695,7 @@ The syntax \cs{optionalPageMatter} is\dots \begin{dCmd}[commandchars=!()]{\bxSize} \optionalPageMatter[!ameta(vspace)]{!ameta(content)} \end{dCmd} -\eVerb where \ameta{content} content to be displayed in middle title region, and +\smallskip\eVerb where \ameta{content} content to be displayed in middle title region, and \texttt{[\ameta{vspace}]} consists of one (or more) \cs{vspace} commands. The default is \begin{Verbatim}[xleftmargin=\amtIndent] @@ -8087,7 +8087,25 @@ credit of zero, and may as well not be included in the list of words. extensive examples, and discusses techniques of searching using regular expressions. +\subsubsection{\texorpdfstring{\protect\cs{RespBoxEssay}}% + {\textbackslash RespBoxEssay}: Extended Responses}\label{ss:respboxessay} +The \cs{RespBoxEssay} command is used to provide space for the student to +type in an extended response to a question. The student's response is not +evaluated, it must be reviewed by the instructor, who can assign additional +credit. +\aebdimen0pt\bVerb\takeMeasure{\string\RespBoxEssay[\ameta{options}]\ameta{dest}\darg{\ameta{wd}}\darg{\ameta{ht}}}% +\begin{dCmd}[commandchars=!()]{\bxSize} +\RespBoxEssay[!ameta(options)]!ameta(dest){!ameta(wd)}{!ameta(ht)} +\end{dCmd} +\medskip\eVerb The first (optional) parameter (\ameta{options}) is used to pass key-value +pairs to the form field. The second (optional) argument (\ameta{dest}) takes +on one of two forms: (1) a named destination \texttt{[\meta{dest}]} to the +solution (if provided), were \meta{dest} is a string the document author +specifies; or (2) an asterisk (\texttt*), where the named destination is +automatically generated by \pkg{exerquiz}. The third and fourth parameters +are the width and height of the field. The field is, by default, a +multi-line text field. \subsection{Some Enhancements}\label{enhancements} @@ -8110,7 +8128,7 @@ than the default variable of $x$. \begin{oQuestion}{sine2} \redpoint Differentiate\\[1ex] $\dfrac d{dt} \sin^2(t) =$ -\RespBoxMath{2*sin(t)*cos(t)}(t){4}{.0001}{0}{1}\cgBdry\CorrAnsButton{2*sin(t)*cos(t)} +\RespBoxMath{2*sin(t)*cos(t)}(t){4}{.0001}{0}{1}\olBdry\CorrAnsButton{2*sin(t)*cos(t)} \end{oQuestion} \medskip\noindent @@ -8118,14 +8136,14 @@ The listing follows: \begin{Verbatim}[xleftmargin=\amtIndent] \begin{oQuestion}{sine2}\\[1ex] \redpoint Differentiate $\dfrac d{dt} \sin^2(t) =$ -\RespBoxMath{2*sin(t)*cos(t)}(t){4}{.0001}{0}{1}\cgBdry +\RespBoxMath{2*sin(t)*cos(t)}(t){4}{.0001}{0}{1}\olBdry \CorrAnsButton{2*sin(t)*cos(t)} \end{oQuestion} \end{Verbatim} \noindent The \cs{CorrAnsButton} takes one parameter, the correct answer. This answer is (usually) the same as the one given as the second -argument (the optional argument is the first) in the \cs{RespBoxMath} +argument (the optional argument is the first) in the \cs{RespBoxMath}r command. \redpoint The \cs{CorrAnsButton} also controls access to the (optional) solution, see @@ -8196,7 +8214,7 @@ An example of this optional parameter is \redpoint Perform the indicated operation, and enter result into the box.\\[1ex] $ \text{9} + \text{8} =$ -\RespBoxMath{9 + 8}{1}{.0001}{[0,1]}\cgBdry\CorrAnsButton{9 + 8}*{EvalCorrAnsButton}\cgBdry +\RespBoxMath{9 + 8}{1}{.0001}{[0,1]}\olBdry\CorrAnsButton{9 + 8}*{EvalCorrAnsButton}\olBdry \sqTallyBox \end{oQuestion} @@ -8207,8 +8225,8 @@ The listing follows: \redpoint Perform the indicated operation, and enter result into the box.\\[1ex] $ 9 + 8 = $ -\RespBoxMath{9 + 8}{1}{.0001}{[0,1]}\cgBdry - \CorrAnsButton{9 + 8}*{EvalCorrAnsButton}\cgBdry +\RespBoxMath{9 + 8}{1}{.0001}{[0,1]}\olBdry + \CorrAnsButton{9 + 8}*{EvalCorrAnsButton}\olBdry \sqTallyBox \end{oQuestion} \end{Verbatim} @@ -8224,7 +8242,7 @@ For example, \begin{oQuestion}{sine4} \redpoint \hypertarget{exofT}{Differentiate}\\[1ex] $\dfrac d{dx} \sin^2(x) =$ -\RespBoxMath{2*sin(x)*cos(x)}{4}{.0001}{0}{1}\cgBdry\CorrAnsButton{2*sin(x)*cos(x)}\cgBdry +\RespBoxMath{2*sin(x)*cos(x)}{4}{.0001}{0}{1}\olBdry\CorrAnsButton{2*sin(x)*cos(x)}\olBdry \sqTallyBox \end{oQuestion} @@ -8234,8 +8252,8 @@ The listing follows: \begin{oQuestion}{sine4} \redpoint Differentiate\\[1ex] $\dfrac d{dx} \sin^2(x) =$ -\RespBoxMath{2*sin(x)*cos(x)}{4}{.0001}{0}{1}\cgBdry -\CorrAnsButton{2*sin(x)*cos(x)}\cgBdry +\RespBoxMath{2*sin(x)*cos(x)}{4}{.0001}{0}{1}\olBdry +\CorrAnsButton{2*sin(x)*cos(x)}\olBdry \sqTallyBox \end{oQuestion} \end{Verbatim} @@ -8254,8 +8272,8 @@ insert \cs{sqClearButton}. \begin{oQuestion}{sine5} \redpoint Differentiate\\[1ex] $\dfrac d{dx} \sin^2(x) =$ -\RespBoxMath{2*sin(x)*cos(x)}{4}{.0001}{0}{1}\kern1bp\CorrAnsButton{2*sin(x)*cos(x)}\cgBdry -\sqTallyBox\cgBdry\sqClearButton +\RespBoxMath{2*sin(x)*cos(x)}{4}{.0001}{0}{1}\olBdry\CorrAnsButton{2*sin(x)*cos(x)}\olBdry +\sqTallyBox\olBdry\sqClearButton \end{oQuestion} @@ -8266,8 +8284,8 @@ The listing follows: \redpoint Differentiate\\[1ex] $\dfrac d{dx} \sin^2(x) =$ \RespBoxMath{2*sin(x)*cos(x)}{4}{.0001}{0}{1}% -\CorrAnsButton{2*sin(x)*cos(x)}\cgBdry -\sqTallyBox\cgBdry\sqClearButton +\CorrAnsButton{2*sin(x)*cos(x)}\olBdry +\sqTallyBox\olBdry\sqClearButton \end{oQuestion} \end{Verbatim} diff --git a/texmf-dist/doc/latex/acrotex/eformman.pdf b/texmf-dist/doc/latex/acrotex/eformman.pdf Binary files differindex 7bdd9b3f..c3532cfb 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 7538e0a2..ecfbb3d8 100644 --- a/texmf-dist/doc/latex/acrotex/eformman.tex +++ b/texmf-dist/doc/latex/acrotex/eformman.tex @@ -6,8 +6,10 @@ forcolorpaper,latextoc,pro,useui}, exerquiz,aebxmp ]{aeb_pro} +\usepackage{forms16be} \usepackage[dblevel=0]{aeb_mlink} \usepackage[altbullet]{lucidbry} +\usepackage{pifont} %\usepackage{myriadpro} \setlength{\marginparpush}{3pt} @@ -79,7 +81,7 @@ subject={Documentation for the eforms and insdljs packages}, talksite={\url{www.acrotex.net}}, version={2.0}, - prepared={2019/05/24}, + prepared={2019/08/06}, preparedLabel={Distribution Dated:}, keywords={LaTeX, hyperref, PDF, exercises, quizzes}, copyrightStatus=True, @@ -517,13 +519,27 @@ declarative command \cs{pmpvMrk\darg{\ameta{mrk}}} that takes one argument \amet to be used. The package declares \verb|\pmpvMrk{X}|, another good choice is \verb|\pmpvMrk{$\checkmark$}|. +\newtopic\indent\textbf{Finer control over enhanced preview.} When enhanced +preview is on (\cs{previewOn}\allowbreak \cs{pmpvOn}), the caption for {\pbs} +may be turned off with \cs{pmpvCAOff}\FmtMP{\cs{pmpvCAOff}} (and may be +turned back on again with \cs{pmpvCAOn}). Enhanced preview for all other +field types is controlled with \cs{pmpvVOff}\FmtMP{\cs{pmpvVOff}} (and +\cs{pmpvVOn}). Turning off enhanced preview may be become an issue when the +preview text is too wide for the preview rectangle +{\previewOn\pmpvOn\textField[\autoCenter{y}\BC{}\Ff{\FfReadOnly}\V{We initialize this field}\DV{We +initialize this field}]{V2Big}{1in}{11bp}}. We can turn off enhanced preview +for this field only by passing \cs{cmd\darg{\cs{pmpvVOff}}} in the optional +argument of the field, or turn it off globally by expanding \cs{pmpvVOff} +prior to expanding the \cs{textField} command. + \newtopic\textbf{\textcolor{red}{Final Preparation.}} In the modern era of {\LaTeX}, it is customary by some to use \app{sumatraPDF} or some other non-conforming {\PDF} reader during development; however, you should always open your final {\PDF} (which was built with \cs{previewOff}\cs{pmpvOff}) in \app{Adobe Reader DC} (or in \app{Acrobat}), save it to obtain the correct appearances of the fields -placed in the document. +placed in the document. Other suggestions can be found in the +\href{\urlAcroTeXBlog}{\AcroBlog} article cited below. %http://www.acrotex.net/blog/?p=1404 \exAeBBlogPDF{p=1404} Refer to the article titled \textit{\href{\urlAcroTeXBlog/?p=1404}{eforms: Enhanced Previews}} for more technical @@ -2841,7 +2857,7 @@ The \hypertarget{\pkg{insdljs}}{insdljsPkg} package provides support to {\LaTeX} for inserting \app{Acrobat} JavaScript into a PDF file created from a \LaTeX{} source. This package works correctly for users of \textsf{pdftex} (and \app{luatex}), \textsf{dvipdfm}, \textsf{dvipdfmx}, and \texttt{xetex}. -For\marginpar{\small\raggedleft\app{Acrobat} required for +For\FmtMP{\app{Acrobat} required for \app{dvips}} those who use either \app{dvips} or \app{dvipsone} to produce a postscript file, which is then distilled, you are required to have \app{Acrobat}~5.0 (or later). @@ -2862,12 +2878,20 @@ of the JavaScripts. JavaScript. This might be useful, for creating a paper document that is not interactive. For a non-interactive paper document, no JS is needed. -\item\NH\texttt{execJS} is a very useful option/feature if you know how to use - it. Any JavaScript that is written in an \env{execJS} environment is - executed once when the document is first opened in \app{Acrobat}, then - discarded. AeB uses this for post-distillation document processing. The - default is that the JavaScript in an \texttt{execJS} environment is not - executed; using this option turns on this feature. +\item\NH\texttt{execJS} is a very useful option/feature if you know how to + use it. Any JavaScript that is written in an \env{execJS} environment + is executed once when the document is first opened in \app{Acrobat}, + then discarded. AeB uses this for post-creation document processing. + The default is that the JavaScript in an \texttt{execJS} environment is + not executed; using this option turns on this feature. Two convenience + commands are also defined: \FmtMP{\cs{execJSOn}} \cs{execJSOn} (the + equivalent of passing the \opt{execJS} option to the \pkg{insdljs} + package) and \FmtMP{\cs{execJSOff}}\cs{execJSOff} (for turning off + JavaScript execution within an \env{execJS} environment). Both have no + effect outside the preamble of the document. + + For information on the \env{execJS} environment, read + Section~\ref{s:execJS} on page~\pageref{s:execJS}. \end{description} \section{The \texttt{insDLJS} and \texttt{insDLJS*} Environments} @@ -3235,8 +3259,20 @@ When \cs{thisPageAction} is executed in the preamble, the \texttt{<open\_action>} argument gets passed to the \cs{OpenAction} command. -\section{The \textsf{execJS} Environment} +\section{The \textsf{execJS} Environment}\label{s:execJS} + +\textbf{Purpose.} The\FmtMP{`\texttt{\eqbs}' and `\texttt{\%}' characters available} \env{execJS} takes JavaScript as content. This +JavaScript is executed the first time the newly created PDF is opened in +\app{Acrobat}. This environment is a variation on \env{insDLJS}; +consequently, +the escape character is `\texttt{\eqbs}' and the comment character is +`\texttt{\%}'. +\newtopic +\textbf{Requirements.} For the script to be executed, the document must be compiled under +the \opt{execJS} option of \pkg{eforms}. + +\newtopic This is an environment useful to PDF developers who want to tap into the power of JavaScript. To use this environment, the developer needs \app{Acrobat}~5.0 or higher. \textsf{pdftex} or \textsf{dvipdfm} can @@ -3244,8 +3280,8 @@ be used to produce the PDF document, but the developer needs the \app{Acrobat} product for this environment to do anything. The \texttt{execJS} is used primarily for post-distillation -processing (post-creation processing, in the case of \textsf{pdftex} -and \textsf{dvipdfm}). The \texttt{execJS} environment can be used, +processing (post-creation processing, in the case of \textsf{pdflatex} +and \textsf{xelatex}). The \texttt{execJS} environment can be used, for example, to automatically import named icons into the document, which can, in turn, be used for an animation. @@ -3259,18 +3295,22 @@ by the \textsf{execJS} environment is imported, and the JavaScript executed. This JavaScript is \emph{not} saved with the document. The syntax of this environment is\dots -\settowidth{\aebdimen}{\ttfamily\string\begin\darg{execJS}\darg{\meta{name}}} +\settowidth{\aebdimen}{\ttfamily\string\begin\darg{execJS}[\ameta{\cs{cmd}}]\darg{\meta{name}}} \begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule} -\begin{execJS}{!meta(name)} +\begin{execJS}[!ameta(\cmd)]{!meta(name)} .... -!anglemeta(JavaScript code) +!ameta(JavaScript code) .... \end{execJS} \end{dCmd} -\PD The environment takes one required argument, the base name of the -auxiliary files to be generated. +\PD The environment takes one required argument (\meta{name}), the base name +of the auxiliary files to be generated. The \env{execJS} environment now has +an optional argument, the optional argument must be a command +\ameta{\cs{cmd}}. The purpose of \ameta{\cs{cmd}} is to make special +definitions at the time the script is expanded. +\newtopic\indent Many of the more useful JavaScript methods have security restrictions, the developer must create folder JavaScript that can be used to \emph{raise the privilege} of the methods. @@ -3331,6 +3371,31 @@ app.endPriv(); \end{Verbatim} \newtopic AeB Pro, the {Acro\!\TeX} Presentation Bundle and @EASE use these execJS techniques. +\Example In this example, we give a simple example of the use of the optional argument (\ameta{\cs{cmd}}). +We define a command \cs{myDefns} which gives a special meaning to \cs{oct}. This definition +are made within a group so it has no effect outside the environment. +\begin{Verbatim}[xleftmargin=\amtIndent,commandchars={!~@}] +... +\execJSOn +!textbf~\def\myDefns{\let\oct\eqbs}@ +\begin{execJS}[!textbf~\myDefns@]{tst} +var str="Hello J!textbf~\oct@374rgen! \u263A"; // \u already defined +console.show(); +console.println(str); +\end{execJS} +\begin{document} +... +\end{document} +\end{Verbatim} +\defUniStr{myInitValue}{Hello J\u00FCrgen! \u263A}% +%\previewOn\pmpvOn +When the document is first opened, the console window appears and the message, \ding{172} +\begin{quote} +\textField[\cmd{\let\pmpvFmt\footnotesize}\Ff\FfReadOnly\BC{}\V{\tops{Hello J\"{u}rgen! \protect\ding{172}}{\unicodeStr(myInitValue)}} +\DV{\unicodeStr(myInitValue)}]{HJSmiley}{67.68bp}{11bp} +\end{quote} +is written to the console window. + \section{The \textsf{defineJS} Environment}\label{defineJS} When you create a form element (button, text field, etc.), you diff --git a/texmf-dist/doc/latex/acrotex/examples/jquiztst.pdf b/texmf-dist/doc/latex/acrotex/examples/jquiztst.pdf Binary files differindex 30175b4f..d000d0dd 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/jquiztst.tex b/texmf-dist/doc/latex/acrotex/examples/jquiztst.tex index 7bb46805..e6d3a0aa 100644 --- a/texmf-dist/doc/latex/acrotex/examples/jquiztst.tex +++ b/texmf-dist/doc/latex/acrotex/examples/jquiztst.tex @@ -247,7 +247,7 @@ buttons that have a green boundary to get a solution. \NoPeeking % or put in preamble -\begin{quiz}{mathquiz} Answer each of the following. Passing +\begin{quiz*}{mathquiz} Answer each of the following. Passing is 100\%. \begin{questions} @@ -280,7 +280,7 @@ the power rule: In the syntax of this document, \js{2*x*e^(x^2)}. \end{solution} \end{questions} -\end{quiz}\quad\ScoreField\currQuiz\olBdry\CorrButton\currQuiz +\end{quiz*}\quad\ScoreField\currQuiz\olBdry\CorrButton\currQuiz \noindent Answers: \AnswerField\currQuiz diff --git a/texmf-dist/doc/latex/acrotex/examples/jtxttst.pdf b/texmf-dist/doc/latex/acrotex/examples/jtxttst.pdf Binary files differindex 8638f825..298a75f3 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/jtxttst.tex b/texmf-dist/doc/latex/acrotex/examples/jtxttst.tex index 2311e217..ed7b937f 100644 --- a/texmf-dist/doc/latex/acrotex/examples/jtxttst.tex +++ b/texmf-dist/doc/latex/acrotex/examples/jtxttst.tex @@ -37,11 +37,11 @@ Department of Mathematics} \section{Text Fill-in Questions} -\textsf{Exerquiz} can now create text fill-in questions, questions -in which the response is text (as opposed to a mathematical -expression). The underlying JavaScript compares the user's -response against acceptable alternatives, as supplied by the -author of the question. If there is a match, the response is +\textsf{Exerquiz} can now create text fill-in questions, +questions in which the response is text (as opposed to a +mathematical expression). The underlying JavaScript compares the +user's response against acceptable alternatives, as supplied by +the author of the question. If there is a match, the response is deemed correct. For example: \redpoint\begin{oQuestion}{ex1}% @@ -51,52 +51,59 @@ Who was the first President\footnote{of the United States}?\ \end{oQuestion} \medskip\noindent -The command \cs{RespBoxTxt} is the one that creates a text fill-in question. Its -syntax is +The command \cs{RespBoxTxt} is the one that creates a text +fill-in question. Its syntax is \begin{verbatim} \RespBoxTxt[#1]#2#3[#4]#5<plus listing of alternatives> \end{verbatim} \noindent\textbf{\hypertarget{paraRespBoxTxt}{Parameters:}} \begin{enumerate} -\item[\ttfamily\#1:]Optional parameter used to modify the appearance of the - text field. -\item[\ttfamily\#2:]This required parameter is a number that indicates -the filtering method to be used. Permissible values of this parameter are +\item[\ttfamily\#1:]Optional parameter used to modify the + appearance of the text field. +\item[\ttfamily\#2:]This required parameter is a number that + indicates the filtering method to be used. Permissible + values of this parameter are \begin{enumerate} - \item[\ttfamily-1:] (The default) The author's and user's answers are not filtered - in any way. (Spaces, case, and punctuation are preserved.) - \item[\ttfamily0:] The author's and user's answers are converted to - lower case, any white space and non-word characters are removed. - \item[\ttfamily1:] The author's and user's answers are converted to - lower case, any white space is removed. - \item[\ttfamily2:] The author's and user's answers are stripped of - white space. + \item[\ttfamily-1:] (The default) The author's and + user's answers are not filtered in any way. (Spaces, + case, and punctuation are preserved.) + \item[\ttfamily0:] The author's and user's answers are + converted to lower case, any white space and + non-word characters are removed. + \item[\ttfamily1:] The author's and user's answers are + converted to lower case, any white space is removed. + \item[\ttfamily2:] The author's and user's answers are + stripped of white space. \end{enumerate} -See the JavaScript function \texttt{eqFilter} in \texttt{exerquiz.dtx} for -program code details. Additional filtering options may be added. +See the JavaScript function \texttt{eqFilter} in +\texttt{exerquiz.dtx} for program code details. Additional +filtering options may be added. -\item[\ttfamily\#3:] This parameter is a number that indicates the compare -method to be used. Permissible values of this parameter are +\item[\ttfamily\#3:] This parameter is a number that indicates + the compare method to be used. Permissible values of this + parameter are \begin{enumerate} - \item[\ttfamily0:] (The default) The author's and user's answers are - compared for an exact match. (These answers are filtered before they are - compared.) - \item[\ttfamily1:] The user's response is searched in an attempt to - get a substring match with the author's alternatives. Additional comparison - methods may be added. + \item[\ttfamily0:] (The default) The author's and user's + answers are compared for an exact match. (These + answers are filtered before they are compared.) + \item[\ttfamily1:] The user's response is searched in an + attempt to get a substring match with the author's + alternatives. Additional comparison methods may be + added. \end{enumerate} See the JavaScript function \texttt{compareTxt} in \texttt{exerquiz.dtx} for the program code details. \item[\ttfamily\#4:] Optional, a named destination to the -solution to the question. If this parameter appears, then a -solution must follow the question, enclosed in a \texttt{solution} -environment. If the forth parameter is a `\texttt*', then an automatic -naming scheme is used instead. -\item[\ttfamily\#5:] This required parameter is the -number of alternative answers that are acceptable. The alternative -answers are listed immediately after this parameter. (The example -above specified that $4$ alternatives follow.) + solution to the question. If this parameter appears, then + a solution must follow the question, enclosed in a + \texttt{solution} environment. If the forth parameter is + a `\texttt*', then an automatic naming scheme is used + instead. +\item[\ttfamily\#5:] This required parameter is the number of + alternative answers that are acceptable. The alternative + answers are listed immediately after this parameter. (The + example above specified that $4$ alternatives follow.) \end{enumerate} \makeatletter diff --git a/texmf-dist/doc/latex/acrotex/examples/webeqtst.pdf b/texmf-dist/doc/latex/acrotex/examples/webeqtst.pdf Binary files differindex c3cd4090..17f62734 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 7b2d3fab..221ba16f 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 99459c8a..3afd02ab 100644 --- a/texmf-dist/source/latex/acrotex/acrotex.ins +++ b/texmf-dist/source/latex/acrotex/acrotex.ins @@ -55,29 +55,29 @@ % Install the Exerquiz Package % \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{aebrandom.def}{\from{exerquiz.dtx}{copyright,randomize}} - \file{aebsumrytbls.def}{\from{exerquiz.dtx}{copyright,sumrytbls}} - \file{usemcfi.def}{\from{exerquiz.dtx}{copyright,mcfi}} - \file{eqcolor.def}{\from{exerquiz.dtx}{copyright,eqcolor}} - \file{template.def}{\from{exerquiz.dtx}{copyright,template}} - \file{eqfr.def}{\from{exerquiz.dtx}{copyright,eqfr}} - \file{eqde.def}{\from{exerquiz.dtx}{copyright,eqde}} - \file{eqno.def}{\from{exerquiz.dtx}{copyright,eqno}} - \file{eqnl.def}{\from{exerquiz.dtx}{copyright,eqnl}} - \file{eqes.def}{\from{exerquiz.dtx}{copyright,eqes}} - \file{eqit.def}{\from{exerquiz.dtx}{copyright,eqit}} - \file{eqru.def}{\from{exerquiz.dtx}{copyright,eqru}} - \file{eqda.def}{\from{exerquiz.dtx}{copyright,eqda}} - \file{eqpo.def}{\from{exerquiz.dtx}{copyright,eqpo}} - \file{eqfin.def}{\from{exerquiz.dtx}{copyright,eqfin}} - \file{eqcat.def}{\from{exerquiz.dtx}{copyright,eqcat}} - \file{eqcz.def}{\from{exerquiz.dtx}{copyright,eqcz}} - \file{eqbr.def}{\from{exerquiz.dtx}{copyright,eqbr}} - \file{eqtr.def}{\from{exerquiz.dtx}{copyright,eqtr}} -% \file{exerquiz.drv}{\from{exerquiz.dtx}{copyright,driver}} + \file{exerquiz.sty}{\from{exerquiz.dtx}{copyright,package}} + \file{aebjs.def}{\from{exerquiz.dtx}{copyright,aebjs}} +% \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}} + \file{eqcolor.def}{\from{exerquiz.dtx}{copyright,eqcolor}} + \file{template.def}{\from{exerquiz.dtx}{copyright,template}} + \file{eqfr.def}{\from{exerquiz.dtx}{copyright,eqfr}} + \file{eqde.def}{\from{exerquiz.dtx}{copyright,eqde}} + \file{eqno.def}{\from{exerquiz.dtx}{copyright,eqno}} + \file{eqnl.def}{\from{exerquiz.dtx}{copyright,eqnl}} + \file{eqes.def}{\from{exerquiz.dtx}{copyright,eqes}} + \file{eqit.def}{\from{exerquiz.dtx}{copyright,eqit}} + \file{eqru.def}{\from{exerquiz.dtx}{copyright,eqru}} + \file{eqda.def}{\from{exerquiz.dtx}{copyright,eqda}} + \file{eqpo.def}{\from{exerquiz.dtx}{copyright,eqpo}} + \file{eqfin.def}{\from{exerquiz.dtx}{copyright,eqfin}} + \file{eqcat.def}{\from{exerquiz.dtx}{copyright,eqcat}} + \file{eqcz.def}{\from{exerquiz.dtx}{copyright,eqcz}} + \file{eqbr.def}{\from{exerquiz.dtx}{copyright,eqbr}} + \file{eqtr.def}{\from{exerquiz.dtx}{copyright,eqtr}} +% \file{exerquiz.drv}{\from{exerquiz.dtx}{copyright,driver}} } % % Install eForms Package @@ -89,6 +89,7 @@ \file{edvipdfm.def}{\from{eforms.dtx}{copyright,edvipdfm}} \file{uieforms.def}{\from{eforms.dtx}{copyright,userinterface}} \file{setcorder.def}{\from{eforms.dtx}{copyright,setcorder}} + \file{pdfdochex.def}{\from{eforms.dtx}{copyright,hexoctcodes}} } % % Install the Insdljs Package diff --git a/texmf-dist/source/latex/acrotex/eforms.dtx b/texmf-dist/source/latex/acrotex/eforms.dtx index dcfcbd78..d3e63f29 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/05/24 v2.11 Provides general eforms support (dps)] +%<package> [2019/06/14 v2.3 Provides general eforms support (dps)] %<*driver> \documentclass{ltxdoc} \usepackage[colorlinks,hyperindex=false]{hyperref}[2012/10/12] @@ -89,6 +89,9 @@ % \textsf{web}; in this case, the options below must explicitly included. % Set the driver dependent code for the |quiz| environments. % +% \changes{v2.2v2.2}{2019/06/12}{Added fields to fields dict, conforming to hyperref} +% \changes{v2.13}{2019/06/10}{Added various fields to the fields dictionary so they +% can get appearances in non-conforming PDF viewers.} % \changes{v2.5o}{2012/06/18}{Added required package \string\textsf{ifpdf}} % \changes{v2.9m}{2017/09/03}{Added the ifluatex package} % \begin{macrocode} @@ -96,6 +99,7 @@ \RequirePackage{ifxetex}[2006/08/21] \RequirePackage{ifluatex} % \end{macrocode} +% The \pkg{calc} package is now required (2014/02/18). % \changes{v2.6c}{2014/02/18}{Added the \string\textsf{calc} package as required package.} % \begin{macrocode} \RequirePackage{calc} @@ -251,6 +255,8 @@ \MessageBreak in the option list of the eforms package.}% }{} \fi +\edef\ef@CatChngs{\the\catcode`\$} +\@makeother\$\relax \newlength\eflength \@ifundefined{ifpdfmarkup}{\newif\ifpdfmarkup}{}\pdfmarkupfalse \ifpdf\else\ifxetex\else\pdfmarkuptrue\fi\fi @@ -308,6 +314,7 @@ % around the \textit{inner} bounding rectangle. % \begin{macrocode} %<*package> +\def\csarg#1#2{\expandafter#1\csname#2\endcsname} \@ifundefined{eq@tmpbox}{\newsavebox{\eq@tmpbox}}{} \@ifundefined{eq@tmpdima}{\newdimen\eq@tmpdima}{} \@ifundefined{eq@tmpdimb}{\newdimen\eq@tmpdimb}{} @@ -362,6 +369,7 @@ \hb@xt@\noexpand\z@{\hss#1\hss}}\fi} \let\@PMPV\@empty \let\pmpvFmt\@empty +\let\pmpvFmtCtrl\relax % \end{macrocode} % The preview bounding box, visible when \cs{previewOn} is expanded. Incorporated into the center % of the box is \cs{pmpvFmt\darg{\cs{@PMPV}}}. \cs{pmpvFmt} can be used to format its argument (\cs{@PMPV}); @@ -376,7 +384,7 @@ \ifdim\@tempdimb<2\fboxrule\else \advance\@tempdimb by-2\fboxrule\fi \ckbox@Color\fbox{\parbox[b][\@tempdimb][c]{\@tempdima}% - {\vfil\hfil\pmpvFmt{\@PMPV}\hfil\vfil}}\else + {\vfil\hfil\pmpvFmtCtrl\pmpvFmt{\@PMPV}\hfil\vfil}}\else \parbox[b][#2][c]{#1}{\vfil\hfil\hfil\vfil}\fi}% } % \end{macrocode} @@ -481,6 +489,9 @@ \@tempcnta=\eq@FfValue \def\eq@arg{#2}% \ifx\eq@arg\@empty\else + \def\x{\FfRadiosInUnison}% + \ifx\eq@arg\x\let\isRadiosInUnison\ef@YES + \else\let\isRadiosInUnison\ef@NO\fi \advance\@tempcnta by#2\fi \edef\eq@Ff{/Ff \the\@tempcnta}% \def\ef@next{\processAppArgs}% @@ -502,7 +513,7 @@ % (has a flag of 2 or 32), if yes we \cs{let} \DescribeMacro\ef@isHidden\cs{ef@isHidden} to \cs{ef@YES}, otherwise % it is \cs{let} to \cs{ef@NO}. % \begin{macrocode} - \ifnum#2=2\relax % dpstoday + \ifnum#2=2\relax \let\ef@isHidden\ef@YES\else \ifnum#2=32\relax \let\ef@isHidden\ef@YES\else @@ -1127,11 +1138,26 @@ % \begin{macrocode} \let\pmpvV\@empty \let\eq@VSAVE\@empty +% \end{macrocode} +% Finer control over enhanced preview: for the \cs{V} entry, we can turn the enhanced +% preview on with \DescribeMacro\pmpvVOn\cmd{\pmpvVOn} and off again with +% \DescribeMacro\pmpvVOff\cmd\pmpvVOff. +% \changes{v2.12}{2019/06/07}{Added finer control: \string\cs{pmpvVOff} and +% \string\cs{pmpvVOn}} +% \begin{macrocode} +\let\ef@Vpv\ef@YES +\def\pmpvVOff{\let\ef@Vpv\ef@NO\let\pmpvFmtCtrl\@gobble} +\def\pmpvVOn{\let\ef@Vpv\ef@YES\let\pmpvFmtCtrl\relax} +\def\noexpand@iii{\noexpand\noexpand\noexpand} \def\@eqV#1{\Hy@pdfstringfalse % \end{macrocode} % We define \DescribeMacro\pmpvV\cmd{\pmpvV} to hold the preview value of the field. +% \changes{v2.3}{2019/06/14}{Special definition of \string\cs{protect} to suppress +% expansion within first argument of \string\cs{tops} within \string\cs{@eqV}} % \begin{macrocode} - \edef\pmpvV{#1}% + \let\x\protect + \let\protect\noexpand@iii\edef\pmpvV{#1}% + \edef\pmpvV{#1}\let\protect\x % \end{macrocode} % There is a problem with detecting unicode, if the author wants to use unicode, % he should use \cs{unicodeStr}, which we try to detect, but we not allow @@ -1278,6 +1304,18 @@ % enhanced preview, described above in the definition of \cs{@eqV}. % \changes{v2.11}{2019/05/24}{Modified \string\cs{@eqCA} to enhance preview} % \begin{macrocode} +% \end{macrocode} +% Finer control over enhanced preview: for the \cs{CA} entry, we can turn the enhanced +% preview on with \DescribeMacro\pmpvCAOn\cmd{\pmpvCAOn} and off again with +% \DescribeMacro\pmpvCAOff\cmd\pmpvCAOff. +% \changes{v2.12}{2019/06/07}{Added finer control: \string\cs{pmpvCAOff} and +% \string\cs{pmpvCAOn}} +% \changes{v2.3}{2019/06/14}{Special definition of \string\cs{protect} to suppress +% expansion within first argument of \string\cs{tops} within \string\cs{@eqCA}} +% \begin{macrocode} +\let\ef@CApv\ef@YES +\def\pmpvCAOff{\let\ef@CApv\ef@NO\let\pmpvFmtCtrl\@gobble} +\def\pmpvCAOn{\let\ef@CApv\ef@YES\let\pmpvFmtCtrl\relax} \def\@eqCA#1{\let\unicodeStrSAVE\unicodeStr \Hy@pdfstringtrue\let\unicodeStr\relax \edef\x{#1}\let\unicodeStr\unicodeStrSAVE @@ -1292,7 +1330,8 @@ % the caption. It should be something that can be typeset, if not use % \cs{tops} to offer an alternative. % \begin{macrocode} - \edef\pmpvCA{#1}\def\eq@CA{#1}% + \let\x\protect\let\protect\noexpand@iii + \edef\pmpvCA{#1}\def\eq@CA{#1}\let\protect\x \edef\ef@kvCA{/CA(\ef@uni@temp)}% \makespecialJS \fi @@ -1711,6 +1750,14 @@ % the parsing mechanism. \cs{protectedKeys} is used in the \pkg{bargraph-js} package. % \changes{v2.10}{2019/03/16}{Added \string\cs{protectedKeys}} % \begin{macrocode} +% \end{macrocode} +% \DescribeMacro{\multigroupradios} Declares whether there are multiple sets of radio button groups +% with the same names and values, +% \begin{macrocode} +\def\@eqmultigroupradios#1{\let\ef@multigroupradios\ef@YES} +\let\ef@multigroupradios\ef@NO +% \end{macrocode} +% \begin{macrocode} \def\ef@stop{\relax} %\def\ef@relax{\relax} \def\protectedKeys#1#2{\ef@scratchtoks={}% \@ifundefined{#1}{}{\PackageWarning{eforms} @@ -2558,7 +2605,7 @@ % \begin{macrocode} \ifx\ef@isBGtransparent\ef@YES \let\ef@kvCA\@empty\fi - \PMPV{\eq@CA}\fi + \ifx\ef@CApv\ef@YES\PMPV{\eq@CA}\fi\fi \ef@djXPD#1% } % \end{macrocode} @@ -2587,6 +2634,7 @@ % \end{macrocode} % (2016/12/22) \cs{ef@djXPD} adjusts the size of the field dimensions, if \cs{makeXasPD} is true. % \begin{macrocode} + \ef@lateWidgetOpts \ifefpmpv\Hy@pdfstringfalse % \end{macrocode} % Having an enhanced preview generates several problems. Text fields are sometimes hidden and their values @@ -2600,8 +2648,9 @@ % value now that we know this field is hidden. % \begin{macrocode} \let\eq@V\eq@VSAVE\else - \PMPV{\pmpvV}\fi + \ifx\ef@Vpv\ef@YES\PMPV{\pmpvV}\fi\fi \fi + \global\let\ef@lateWidgetOpts\relax \ef@djXPD#1% } % \end{macrocode} @@ -2968,7 +3017,52 @@ % \end{macrocode} % Here is the field template for check boxes and radio button fields fields. % \begin{macrocode} -\def\common@RadioCheckCode{% +\def\radio@parent{% + /DA (\eq@DA)% + /FT/Btn% + \eq@Ff% + \eq@TU% + \eq@DV% +\expandafter\ifx\csname kids@\Fld@name\endcsname\relax\else + /Kids [\@nameuse{kids@\Fld@name}]% +\fi +\ifx\ef@multigroupradios\ef@YES +\expandafter\ifx\csname radio@\Fld@name\endcsname\relax\else + /Opt[\@nameuse{radio@\Fld@name}]\fi\fi + /T(\Fld@name)% + \eq@V +} +% \end{macrocode} +% \begin{macrocode} +\def\common@RadioCode{% + /Subtype/Widget +\ifuseNewRadios + \expandafter\ifx\csname radio@\Fld@name\endcsname\relax\else + /Parent \@nameuse{parent@\Fld@name}\fi +\else + /T (\Fld@name) + /FT/Btn + \eq@Ff + \eq@F + \eq@TU + \eq@DV\eq@V + /DA (\eq@DA) +\fi + /BS <<\eq@W\eq@S>> +\ifx\eq@AP\@empty + /AP<< /N <<\eq@On<<>>>> >> + \eq@MK +\else + \eq@AP +\fi + \eq@AS +% \eq@DV\eq@V + \eq@A\eq@AA + \eq@rawPDF +} +% \end{macrocode} +% \begin{macrocode} +\def\common@CheckCode{% /Subtype/Widget /T (\Fld@name) /FT/Btn @@ -3089,8 +3183,8 @@ \def\checkBoxDefaults{\F{\FPrint}\W{1}\S{S}\BC{0 0 0}} % \end{macrocode} % \begin{macrocode} -\bgroup\obeyspaces -\gdef\checkBox{\begingroup\global\let =\pdfSP +\bgroup\obeyspaces% +\gdef\checkBox{\begingroup\global\let =\pdfSP% \ef@sanitize@toks\ef@checkbox}\egroup % \end{macrocode} % End the sanitizing group, and get the argument, pass them on to @@ -3098,30 +3192,204 @@ % \begin{macrocode} \newcommand{\ef@checkbox}[5][]{\endgroup \mbox{\check@@Box{#1}{#2}{#3}{#4}{#5}{}{\eq@setWidgetProps - \eq@RadioCheck@driver}{\checkBoxDefaults\every@CheckBox}}} + \eq@Check@driver}{\checkBoxDefaults\every@CheckBox}}} % \end{macrocode} % \end{macro} % \subsubsection{Radio Button}\label{radiobutton} -% The basic command for creating radio button fields. -% \begin{macrocode} +% 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 +% 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. +% As a result, you need t\emph{hree compiles} to bring the AUX files up to date. The AUX files now +% contain PDF object references to radio buttons. Because this new scheme degrades the experience +% of creating radio buttons (heavy I/O usage), use this option if you and the consumers of your PDF\emph{ do not use} +% Adobe PDF viewers (on a desktop/laptop). +% +% Use the default setting (\cmd{\useNewRadiosOff}) when you will view the PDF in AA/AR and save it; otherwise, if the PDF is to be viewed in non-conforming +% PDF readers, never having been saved using AA/AR, use the \cmd{\useNewRadiosOn} setting. +% \changes{v2.3}{2019/06/14}{Rewrote radio buttons so they work in non-conforming PDF readers} +% +% \medskip\noindent\textbf{Discussion.} The default scheme is to create the radio buttons \begin{quote}\footnotesize +% \cs{radioButton\darg{\ameta{name}}\darg{\ameta{width}}\darg{\ameta{height}}} ...\\ +% ... \cs{radioButton\darg{\ameta{name}}\darg{\ameta{width}}\darg{\ameta{height}}}\end{quote} as separate widgets. +% When loaded by AA/AR, these viewers do some internal arranging automatically; they build appearances, among other things. Saving +% the PDF from AA/AR save this appearances within the PDF file, so that those using non-conforming PDF viewers will see +% a correct representation of the fields. (The fields themselves may not be functional, depending on the PDF viewer.) +% +% \def\Odict{<<}\def\Cdict{>>} +% +% When \cs{useNewRadiosOn} is expanded, instead of creating separate widgets, we create a radio button field, +%\begin{quote}\offinterlineskip\ttfamily\obeyspaces\obeylines +%14 0 obj +%\Odict\space/DA (/ZaDb 9 Tf 0 g)/FT/Btn/Ff 32768/DV/Three +%/Kids [15 0 R 16 0 R 17 0 R ]/T(Group1)/V/Two \Cdict +%endobj +%\end{quote} +% \texttt{/FT} and \texttt{Ff} entries declare this field to be a radio button field. Note that +% the object has a \texttt{/Kids} entry that references the individual widgets. The field contains +% the default value (\texttt{/DV}), if any, and the initial value (\texttt{/V}), if any. +% A typical widget referenced by the \texttt{/Kids} entry is, +%\begin{quote}\offinterlineskip\ttfamily\obeyspaces\obeylines +%15 0 obj +%\Odict +%/Type /Annot +%/Rect [172.716 654.735 185.716 667.735] +%/Subtype/Widget /Parent 14 0 R/BS \Odict\space/W 1/S/S\Cdict +%/AP\Odict\space/N\Odict/One\Odict\Cdict\space\Cdict\space\Cdict /MK \Odict\space/BC [0 0 0]/CA(l) \Cdict +%/AS/Off +%\Cdict +%endobj +%\end{quote} +%This is a widget annotation with \texttt{/Rect} entry, as well as other entries. The \cs{/AS} key determines +%whether this widget is `on' or not. This one is off. Some of the non-conforming PDF viewers parse this +%structure better than the old scheme. +% +%The next six lines are new (2019/06/14), to support the new radio button structure. +% \begin{macrocode} +\newif\ifuseNewRadios \useNewRadiosfalse +\def\useNewRadiosOn{\useNewRadiostrue} +\def\useNewRadiosOff{\useNewRadiosfalse} +\let\ef@OptArray\@empty +\let\ef@KidsArray\@empty +\let\ef@lateWidgetOpts\relax \def\annot@type@radio{radiobtn} +% \end{macrocode} +% You can create one or more copies of a group of radio buttons, whether more copies of a +% group is not known until the end of the document, so we must set some properties at +% the end of the document. This command stores information as a function of the field name +% for later use at the end of the document. +% \begin{macrocode} +\def\ef@NewRadiosLateOpts{% +% \end{macrocode} +% We do nothing if the new scheme is not being used. +% \begin{macrocode} + \ifuseNewRadios +% \end{macrocode} +% If this is a multi-group radio button field that work independently, we adjust the `on' value, as in this case, +% the `on' value is referenced by an index, 0, 1, 2,... +% \begin{macrocode} + \@nameuse{multigroup@\Fld@name}% + \ifx\ef@multigroupradios\ef@YES + \ifpdfmarkup + \def\eq@On{(\@nameuse{radioindex@\Fld@name}) cvn }\else + \def\eq@On{/\@nameuse{radioindex@\Fld@name}}\fi + \expandafter\ifx\csname OnVal@\Fld@name\endcsname\relax + \@eqAS{Off}\else % today + \ifnum\@nameuse{OnVal@\Fld@name}=% + \@nameuse{radioindex@\Fld@name}\relax + \@eqAS{\@nameuse{radioindex@\Fld@name}}\else\@eqAS{Off}\fi\fi + \else + \edef\x{\@nameuse{OnVal@\Fld@name}}% + \ifx\x\ef@thisChoice\@eqAS{\@nameuse{OnVal@\Fld@name}}\else + \@eqAS{Off}\fi + \fi +% \end{macrocode} +% If these are groups of radio button fields that light up in unison, we +% take to get the \cs{/AS} entry right. +% \begin{macrocode} + \@nameuse{uniradios@\Fld@name}% + \ifx\isRadiosInUnison\ef@YES + \edef\x{\@nameuse{value@\Fld@name}}% + \ifx\x\ef@thisChoice\expandafter\@eqAS + \expandafter{\ef@thisChoice}\else\@eqAS{Off}\fi + \fi + \fi +} +% \end{macrocode} +% We track the widget belonging to a given field name (\cs{Fld@name}), these radio +% indices are used when we have multiple groups if independent radios. +% \begin{macrocode} +\def\ef@advanceRadioIndex#1{\bgroup + \@tempcnta\@nameuse{radioindex@#1}\relax + \advance\@tempcnta\@ne + \csarg\xdef{radioindex@#1}{\the\@tempcnta}\egroup} +% \end{macrocode} +% Some utility commands that are written to the AUX file. +% \begin{macrocode} +\def\radioChoices#1{\csarg\xdef{radio@#1}} +\def\radioKids#1{\csarg\xdef{kids@#1}} +% \end{macrocode} +% A warning message when not all the PDF objects have +% been resolved. We try to emit only one message per +% compile. +% \begin{macrocode} +\def\ef@radioWarning{\PackageWarningNoLine{eforms} + {Not all PDF object references have\MessageBreak + been resolved, keep compiling}} +% \end{macrocode} +% The command that detects whether any object reference is not defined. +% \begin{macrocode} +\def\ef@@radioWarning{% + \ifx\ef@radioWarning\relax\else + \@ifundefined{kids@\Fld@name} + {\ef@radioWarning\global\let\ef@radioWarning\relax}{}\fi + \ifx\ef@radioWarning\relax\else + \@ifundefined{radio@\Fld@name} + {\ef@radioWarning\global\let\ef@radioWarning\relax}{}\fi + \ifx\ef@radioWarning\relax\else + \@ifundefined{parent@\Fld@name} + {\ef@radioWarning\global\let\ef@radioWarning\relax}{}\fi +} +% \end{macrocode} +% Finally, we arrive at the low-level radio button command, where +% changes for the 2019/06/14 version have been made. +% \begin{macrocode} \newcommand\radio@@Button[8]{\begingroup\let\#\ef@Hx \let\nameuse\@nameuse\let\tops\texorpdfstring \edef\annot@type{\annot@type@radio}% - \pdfstringdef\Fld@name{#2}\@eqAS{Off}\dl@paramlocal + \pdfstringdef\Fld@name{#2}% +% \end{macrocode} +% Additional code for the new scheme. +% \begin{macrocode} + \ifuseNewRadios + \ef@@radioWarning + \@ifundefined{rad@\Fld@name}{\let\isRadioParent\ef@YES + \global\let\ef@OptArray\@empty + \global\let\ef@KidsArray\@empty + \csarg\gdef{radioindex@\Fld@name}{-1}\expandafter + \global\csarg\let{rad@\Fld@name}\@empty}% + {\let\isRadioParent\ef@NO}% + \edef\ef@OptArray{\@nameuse{rad@\Fld@name}}% + \g@addto@macro\ef@OptArray{(#5)}% opt + \csarg\xdef{rad@\Fld@name}{\ef@OptArray}% + \ifx\isRadioParent\ef@YES + \def\y{\expandafter\string\noexpand}% + \edef\x{\noexpand\immediate\noexpand\write\noexpand\@auxout + {\y\radioChoices{\Fld@name}{\noexpand + \@nameuse{rad@\Fld@name}}}}% + \def\z{\expandafter\AtEndDocument\expandafter{\x}}\z + \edef\x{\noexpand\immediate\noexpand\write\noexpand\@auxout + {\y\radioKids{\Fld@name}{\noexpand + \@nameuse{kid@\Fld@name}}}}% + \def\z{\expandafter\AtEndDocument\expandafter{\x}}\z + \fi + \ef@advanceRadioIndex{\Fld@name}% + \@nameuse{multigroup@\Fld@name}% + \fi + \@eqAS{Off}\dl@paramlocal \def\@eqDV##1{\def\eq@arg{##1}\ifx\eq@arg\@empty\let\eq@DV\@empty \else\ifpdfmarkup\def\eq@DV{/DV(##1) cvn }\else \def\eq@DV{/DV/##1}\fi\fi}% - \def\@eqV##1{\def\eq@arg{##1}\ifx\eq@arg\@empty -% \end{macrocode} -% Provide enhanced preview for radio buttons -% \begin{macrocode} - \let\eq@V\@empty\else\def\pmpvV{\pmpv@mrk}\ifpdfmarkup - \def\eq@V{/V(##1) cvn }\else - \def\eq@V{/V/##1}\fi\@eqAS{##1}\fi - \ifefpmpv\let\eq@V\@empty\fi}% + \def\@eqV##1{\Hy@pdfstringfalse\edef\pmpvV{##1}% + \Hy@pdfstringtrue + \edef\eq@arg{##1}% + \if$\eq@arg$\else + \ifpdfmarkup + \edef\eq@V{/V(##1) cvn }\else + \edef\eq@V{/V/##1}\fi + \@eqAS{##1}\fi + \if$\eq@arg$% + \else + \csarg\xdef{OnVal@\Fld@name}{##1}\fi + \ifefpmpv + \gdef\ef@lateWidgetOpts{\if$\pmpvV$\else\def\pmpvV{\pmpv@mrk}\fi}% + \let\eq@V\@empty\else\global\let\ef@lateWidgetOpts\relax\fi + }% \eqf@setDimens{#3}{#4}% \ifpdfmarkup\def\eq@On{(#5) cvn }\else\def\eq@On{/#5}\fi + \def\ef@thisChoice{#5}% \def\eq@Ff{/Ff \FfRadio}\@eqtextFont{ZaDb}% \def\eq@DA{\eq@textFont\space\eq@textSize\space Tf \eq@textColor}% \@eqMK{\eq@R\eq@BC\eq@BG/CA(\symbol@choice)\eq@mkIns}% @@ -3150,7 +3418,7 @@ % \begin{macrocode} \newcommand{\ef@radiobutton}[5][]{\endgroup \mbox{\radio@@Button{#1}{#2}{#3}{#4}{#5}{}{\eq@setWidgetProps - \eq@RadioCheck@driver}{\radioButtonDefaults\every@RadioButton}}} + \eq@Radio@driver}{\radioButtonDefaults\every@RadioButton}}} % \end{macrocode} % \end{macro} % @@ -4355,6 +4623,18 @@ \def\noPeek#1#2{\literalps@out{% \AEB@psMrk{ThisPage} << \noPeekAction{#1}{#2} >> /PUT pdfmark}} % \end{macrocode} +% We create an object definition for each field, there is an option for +% the author to specify a objdef name, and for a calculation field, this +% is done automatically. +% \begin{macrocode} +\def\ef@getobjdef{% + \HyField@AdvanceAnnotCount + \ifisCalculate\edef\eq@objdefName{\Fld@name}\else + \ifx\eq@objdef\@empty + \edef\eq@objdefName{\annot@type\HyField@TheAnnotCount}\fi\fi + \edef\eq@objdef{/_objdef \string{\eq@objdefName\string}}% +} +% \end{macrocode} % Driver dependent code (distiller) for choice fields, list and combo. % \begin{macrocode} \def\eq@choice@driver @@ -4364,13 +4644,14 @@ \let\W@temp\eq@rectW\edef\eq@rectW{\eq@rectH}% \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi + \ef@getobjdef \pdf@rect{\lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}}% \literalps@out{\AEB@psMrk - \ifisCalculate/_objdef {\Fld@name}\else\eq@objdef\fi - /Rect [pdf@llx pdf@lly pdf@urx pdf@ury] - \common@choiceCode - /ANN pdfmark - \ifisCalculate\AEB@psMrk{corder} {\Fld@name} /APPEND pdfmark\fi + \eq@objdef/Rect [pdf@llx pdf@lly pdf@urx pdf@ury] + \common@choiceCode + /ANN pdfmark + \AEB@psMrk{afields} {\eq@objdefName} /APPEND pdfmark + \ifisCalculate\AEB@psMrk{corder} {\Fld@name} /APPEND pdfmark\fi }\to@insertStrucTabOrder{Form}\endgroup \dl@restorespcs } @@ -4384,38 +4665,113 @@ \ifx\@vertRotate\ef@One\let\W@temp\eq@rectW\edef\eq@rectW{\eq@rectH}% \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi + \ef@getobjdef \pdf@rect{\lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}}% \literalps@out{\AEB@psMrk \eq@objdef/Rect [pdf@llx pdf@lly pdf@urx pdf@ury] - \common@pushButtonCode - /ANN pdfmark}\to@insertStrucTabOrder{Form}\endgroup + \common@pushButtonCode + /ANN pdfmark + \AEB@psMrk{afields} {\eq@objdefName} /APPEND pdfmark + }\to@insertStrucTabOrder{Form}\endgroup \dl@restorespcs } % \end{macrocode} % Driver dependent code (distiller) for radio and button fields. % \begin{macrocode} -\def\eq@RadioCheck@driver +\def\parentRef#1#2{\csarg\gdef{parent@#1}{#2}} +\def\ef@radioData#1#2{\immediate + \write\@mainaux{\string\parentRef{#1}{#2}}} +\def\eq@Radio@driver {% \Hy@pdfstringtrue \ifx\@vertRotate\ef@One \let\W@temp\eq@rectW\edef\eq@rectW{\eq@rectH}% \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi + \ef@getobjdef +% \end{macrocode} +% Additional code version dated 2019/06/14 or later. +% \begin{macrocode} + \ifuseNewRadios + \ifx\isRadioParent\ef@YES\expandafter + \ifx\csname radio@\Fld@name\endcsname\relax\else + \literalps@out{\AEB@psMrk + /_objdef{parent@rad\HyField@TheAnnotCount} + /type/dict/OBJ pdfmark + \AEB@psMrk{parent@rad\HyField@TheAnnotCount} + << \radio@parent\space >>/PUT pdfmark + }\ef@radioData{\Fld@name}{{parent@rad\HyField@TheAnnotCount}}% + \ifx\eq@V\@empty\else + \csarg\xdef{value@\Fld@name}% + {\@nameuse{OnVal@\Fld@name}}% + \fi + \fi + \ifx\ef@multigroupradios\ef@YES + \csarg\gdef{multigroup@\Fld@name}% + {\let\ef@multigroupradios\ef@YES}% + \else + \csarg\gdef{multigroup@\Fld@name}% + {\let\ef@multigroupradios\ef@NO}% + \fi + \ifx\isRadiosInUnison\ef@YES + \csarg\gdef{uniradios@\Fld@name}% + {\let\isRadiosInUnison\ef@YES}% + \else + \csarg\gdef{uniradios@\Fld@name}% + {\let\isRadiosInUnison\ef@NO}% + \fi + \fi + \fi + \ef@NewRadiosLateOpts \ifx\eq@rectW\@empty\def\eq@rectW{\wd\eq@tmpbox}\fi \pdf@rect{\lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}}% \literalps@out{\AEB@psMrk \eq@objdef/Rect [pdf@llx pdf@lly pdf@urx pdf@ury] - \common@RadioCheckCode - /ANN pdfmark}\to@insertStrucTabOrder{Form}\endgroup + \common@RadioCode + /ANN pdfmark + \ifuseNewRadios\else + \AEB@psMrk{afields} {\eq@objdefName} /APPEND pdfmark + \fi + }\to@insertStrucTabOrder{Form}% +% \end{macrocode} +% Save the object reference to this kid +% \begin{macrocode} + \ifuseNewRadios + \edef\x{\noexpand\g@addto@macro\noexpand + \ef@KidsArray{{\eq@objdefName}\space}}\x + \csarg\xdef{kid@\Fld@name}{\ef@KidsArray}% + \fi + \endgroup + \dl@restorespcs +} +\def\eq@Check@driver +{% + \Hy@pdfstringtrue + \ifx\@vertRotate\ef@One + \let\W@temp\eq@rectW\edef\eq@rectW{\eq@rectH}% + \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH + \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi + \ef@getobjdef + \ifx\eq@rectW\@empty\def\eq@rectW{\wd\eq@tmpbox}\fi + \pdf@rect{\lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}}% + \literalps@out{\AEB@psMrk + \eq@objdef/Rect [pdf@llx pdf@lly pdf@urx pdf@ury] + \common@CheckCode + /ANN pdfmark + \AEB@psMrk{afields} {\eq@objdefName} /APPEND pdfmark + }\to@insertStrucTabOrder{Form}\endgroup \dl@restorespcs } \def\eq@l@check@driver {% + \ef@getobjdef \pdf@rect{\makebox[\eq@tmpdima]{\phantom{\link@@Content}}}% \literalps@out{\AEB@psMrk \eq@objdef/Rect [pdf@llx pdf@lly pdf@urx pdf@ury] - \common@RadioCheckCode - /ANN pdfmark}\endgroup + \common@CheckCode + /ANN pdfmark + \AEB@psMrk{afields} {\eq@objdefName} /APPEND pdfmark + }\endgroup \dl@restorespcs } % \end{macrocode} @@ -4426,13 +4782,14 @@ \let\W@temp\eq@rectW\edef\eq@rectW{\eq@rectH}% \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi + \ef@getobjdef \pdf@rect{\lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}}% \literalps@out{\AEB@psMrk - \ifisCalculate/_objdef {\Fld@name}\else\eq@objdef\fi - /Rect [pdf@llx pdf@lly pdf@urx pdf@ury] - \common@TextFieldCode - /ANN pdfmark - \ifisCalculate\AEB@psMrk{corder} {\Fld@name} /APPEND pdfmark\fi + \eq@objdef/Rect [pdf@llx pdf@lly pdf@urx pdf@ury] + \common@TextFieldCode + /ANN pdfmark + \AEB@psMrk{afields} {\eq@objdefName} /APPEND pdfmark + \ifisCalculate\AEB@psMrk{corder} {\Fld@name} /APPEND pdfmark\fi }\to@insertStrucTabOrder{Form}\endgroup \dl@restorespcs } @@ -4445,11 +4802,13 @@ \let\W@temp\eq@rectW\edef\eq@rectW{\eq@rectH}% \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi + \ef@getobjdef \pdf@rect{\lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}}% \literalps@out{\AEB@psMrk \eq@objdef/Rect [pdf@llx pdf@lly pdf@urx pdf@ury] - \common@SigFieldCode - /ANN pdfmark + \common@SigFieldCode + /ANN pdfmark + \AEB@psMrk{afields} {\eq@objdefName} /APPEND pdfmark }\to@insertStrucTabOrder{Form}\endgroup \dl@restorespcs } @@ -4561,10 +4920,68 @@ \ifx\eq@rectW\@empty\def\eq@rectW{\wd\eq@tmpbox}\fi \hbox{\pdfstartlink user{\common@pushButtonCode}% \lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}\pdfendlink}% + \HyField@AddToFields \endgroup \dl@restorespcs } -\def\eq@RadioCheck@driver +% \end{macrocode} +% \begin{macrocode} +\def\parentRef#1#2{\csarg\gdef{parent@#1}{#2 0 R}} +\def\ef@radioData#1#2{\expandafter + \HyField@@AddToFields\expandafter{#2}% + \immediate\write\@mainaux{\string\parentRef{#1}{#2}}} +\def\eq@Radio@driver{\Hy@pdfstringtrue + \ifx\@vertRotate\ef@One + \let\W@temp\eq@rectW\edef\eq@rectW{\eq@rectH}% + \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH + \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi +% \end{macrocode} +% Additional code version dated 2019/06/14 or later. +% \begin{macrocode} + \ifuseNewRadios + \ifx\isRadioParent\ef@YES\expandafter + \ifx\csname radio@\Fld@name\endcsname\relax\else + \immediate\pdfobj{<< \radio@parent\space >>}% + \ef@radioData{\Fld@name}{\the\pdflastobj}% + \ifx\eq@V\@empty\else + \csarg\xdef{value@\Fld@name}% + {\@nameuse{OnVal@\Fld@name}}% + \fi + \fi + \ifx\ef@multigroupradios\ef@YES + \csarg\gdef{multigroup@\Fld@name}% + {\let\ef@multigroupradios\ef@YES}% + \else + \csarg\gdef{multigroup@\Fld@name}% + {\let\ef@multigroupradios\ef@NO}% + \fi + \ifx\isRadiosInUnison\ef@YES + \csarg\gdef{uniradios@\Fld@name}% + {\let\isRadiosInUnison\ef@YES}% + \else + \csarg\gdef{uniradios@\Fld@name}% + {\let\isRadiosInUnison\ef@NO}% + \fi + \fi + \fi + \ef@NewRadiosLateOpts + \ifx\eq@rectW\@empty\def\eq@rectW{\wd\eq@tmpbox}\fi + \hbox{\pdfstartlink user{\common@RadioCode}% + \lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}\pdfendlink}% +% \end{macrocode} +% Save the object reference to this kid +% \begin{macrocode} + \ifuseNewRadios + \edef\x{\noexpand\g@addto@macro\noexpand + \ef@KidsArray{\the\pdflastlink\space 0 R\space}}\x + \csarg\xdef{kid@\Fld@name}{\ef@KidsArray}% + \else + \HyField@AddToFields + \fi + \endgroup + \dl@restorespcs +} +\def\eq@Check@driver {% \Hy@pdfstringtrue \ifx\@vertRotate\ef@One @@ -4572,16 +4989,17 @@ \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi \ifx\eq@rectW\@empty\def\eq@rectW{\wd\eq@tmpbox}\fi - \hbox{\pdfstartlink user{\common@RadioCheckCode}% + \hbox{\pdfstartlink user{\common@CheckCode}% \lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}\pdfendlink}% + \HyField@AddToFields \endgroup \dl@restorespcs } \def\eq@l@check@driver {% - \pdfstartlink user{\common@RadioCheckCode}% + \pdfstartlink user{\common@CheckCode}% \makebox[\eq@tmpdima]{\phantom{\link@@Content}}% - \pdfendlink\endgroup + \pdfendlink\HyField@AddToFields\endgroup \dl@restorespcs } \def\eq@TextField{\Hy@pdfstringtrue @@ -4603,6 +5021,7 @@ \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi \leavevmode\hbox{\pdfstartlink user{\common@SigFieldCode}% \lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}\pdfendlink}% + \HyField@AddToFields \endgroup \dl@restorespcs } @@ -4673,24 +5092,99 @@ \endgroup \dl@restorespcs } -\def\eq@RadioCheck@driver{\ef@adjHWxetex\Hy@pdfstringtrue +% \end{macrocode} +% \begin{macrocode} +\def\parentRef#1#2{\csarg\gdef{parent@#1}{#2}} +\def\ef@radioData#1#2{%\expandafter +% \HyField@@AddToFields\expandafter{#2}% + \immediate\write\@mainaux{\string\parentRef{#1}{#2}}} +% \end{macrocode} +% \begin{macrocode} +\def\eq@Radio@driver{\ef@adjHWxetex\Hy@pdfstringtrue + \ifx\@vertRotate\ef@One + \let\W@temp\eq@rectW\edef\eq@rectW{\eq@rectH}% + \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH + \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi +% \end{macrocode} +% Additional code version dated 2019/06/14 or later. +% \begin{macrocode} + \ifuseNewRadios + \ifx\isRadioParent\ef@YES\expandafter + \ifx\csname radio@\Fld@name\endcsname\relax\else + \immediate\@pdfm@mark{obj @parentobj\HyField@TheAnnotCount + << \radio@parent\space >>}% + \ef@radioData{\Fld@name}{@parentobj\HyField@TheAnnotCount}% + \ifx\eq@V\@empty\else + \csarg\xdef{value@\Fld@name}% + {\@nameuse{OnVal@\Fld@name}}% + \fi + \fi + \ifx\ef@multigroupradios\ef@YES + \csarg\gdef{multigroup@\Fld@name}% + {\let\ef@multigroupradios\ef@YES}% + \else + \csarg\gdef{multigroup@\Fld@name}% + {\let\ef@multigroupradios\ef@NO}% + \fi + \ifx\isRadiosInUnison\ef@YES + \csarg\gdef{uniradios@\Fld@name}% + {\let\isRadiosInUnison\ef@YES}% + \else + \csarg\gdef{uniradios@\Fld@name}% + {\let\isRadiosInUnison\ef@NO}% + \fi + \fi + \fi + \ef@NewRadiosLateOpts + \ifx\eq@rectW\@empty\def\eq@rectW{\wd\eq@tmpbox}\fi + \HyField@AdvanceAnnotCount + \setbox\pdfm@box=% + \hbox{\lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}}% + \ifx\annot@type\annot@type@checkbox\def\btn@type{check}\else + \def\btn@type{radio}\fi + \@pdfm@mark{ann @\btn@type\HyField@TheAnnotCount\space\dvipdfm@setdim + <<\common@RadioCode>>}\unhbox\pdfm@box\relax% +% \end{macrocode} +% Save the object reference to this kid +% \begin{macrocode} + \ifuseNewRadios + \edef\x{\noexpand\g@addto@macro\noexpand + \ef@KidsArray{@parentobj\HyField@TheAnnotCount\space}}\x + \csarg\xdef{kid@\Fld@name}{\ef@KidsArray}% + \else + \@pdfm@mark{put @afields @\btn@type\HyField@TheAnnotCount}% + \fi + \endgroup + \dl@restorespcs +} +% \end{macrocode} +% \begin{macrocode} +\def\eq@Check@driver{\ef@adjHWxetex\Hy@pdfstringtrue \ifx\@vertRotate\ef@One \let\W@temp\eq@rectW\edef\eq@rectW{\eq@rectH}% \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi \ifx\eq@rectW\@empty\def\eq@rectW{\wd\eq@tmpbox}\fi + \HyField@AdvanceAnnotCount \setbox\pdfm@box=% \hbox{\lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}}% - \@pdfm@mark{ann \dvipdfm@setdim - <<\common@RadioCheckCode>>}\unhbox\pdfm@box\relax% + \ifx\annot@type\annot@type@checkbox\def\btn@type{check}\else + \def\btn@type{radio}\fi + \@pdfm@mark{ann @\btn@type\HyField@TheAnnotCount\space\dvipdfm@setdim + <<\common@CheckCode>>}\unhbox\pdfm@box\relax% + \@pdfm@mark{put @afields @\btn@type\HyField@TheAnnotCount}% \endgroup \dl@restorespcs } \def\eq@l@check@driver{% - \setbox\pdfm@box=% - \hbox{\makebox[\eq@tmpdima]{\phantom{\link@@Content}}}% - \@pdfm@mark{ann \dvipdfm@setdim<<\common@RadioCheckCode>>}% - \unhbox\pdfm@box\relax\endgroup + \HyField@AdvanceAnnotCount + \setbox\pdfm@box=% + \hbox{\makebox[\eq@tmpdima]{\phantom{\link@@Content}}}% + \@pdfm@mark{ann @check\HyField@TheAnnotCount\space + \dvipdfm@setdim<<\common@CheckCode>>}% + \unhbox\pdfm@box\relax + \@pdfm@mark{put @afields @check\HyField@TheAnnotCount}% + \endgroup } \def\eq@TextField{\ef@adjHWxetex\Hy@pdfstringtrue \ifx\@vertRotate\ef@One @@ -4715,6 +5209,7 @@ \hbox{\lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}}% \@pdfm@mark{ann @\Fld@name\space\dvipdfm@setdim << \common@SigFieldCode >>}\unhbox\pdfm@box\relax% + \@pdfm@mark{put @afields @\Fld@name}% record in @afields array \endgroup \dl@restorespcs } @@ -4788,6 +5283,7 @@ ef_setCalcOrder(_EfCalcOrder); % \begin{macrocode} %<*package> \inputCalcOrderJS +\catcode`\$=\ef@CatChngs %</package> % \end{macrocode} % \Finale diff --git a/texmf-dist/source/latex/acrotex/exerquiz.dtx b/texmf-dist/source/latex/acrotex/exerquiz.dtx index 5f7dc930..b2f61b78 100644 --- a/texmf-dist/source/latex/acrotex/exerquiz.dtx +++ b/texmf-dist/source/latex/acrotex/exerquiz.dtx @@ -4,7 +4,7 @@ %<*copyright> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% @@ -22,7 +22,7 @@ %<randomize>\ProvidesFile{aebrandom.def} %<sumrytbls>\ProvidesFile{aebsumrytbls.def} %<template>\ProvidesFile{template.def} -%<package|driver|aebjs|eqexam|randomize|sumrytbls|template> [2019/02/11 v8.2.9 % +%<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)] @@ -2415,7 +2415,7 @@ % yet to be determined, there are problems when using the \texttt{fortextbook} % option when hiding solutions. %} -%\changes{v8.2.9}{2019/02/11}{\string\let\eqSavedComment\string\dlcomment, \string\dlcomment\space +%\changes{v8.2.9}{2019/02/11}{\string\cs{eqSavedComment}\string\cs{dlcomment}, \string\cs{dlcomment}\space %is not defined in \string\pkg{insdljs}} % \begin{macrocode} \let\eqSavedComment\dlcomment @@ -3927,27 +3927,35 @@ %</package|eqexam> %<*package> \def\sq@IDTxtField{\makebox[0pt][l]{\textField[\autoCenter{n}\BC{}\BG{} - \S{S}\textSize{0}\Ff{\FfReadOnly} - \AA{\AAFormat{% - var \oField=new Object;\r - \oField.Grp={}; - \ifx\defaultColorJSLoc\@empty\else\r - \oField.DefaultColorJSLoc=\defaultColorJSLoc;\fi - \ifx\rghtColorJSLoc\@empty\else\r - \oField.RightColorJSLoc=\rghtColorJSLoc;\fi - \ifx\wrngColorJSLoc\@empty\else\r - \oField.WrongColorJSLoc=\wrngColorJSLoc;\fi - \ifx\rghtAnsSymbJSLoc\@empty\else\r - \oField.RightAnsSymbJSLoc=\rghtAnsSymbJSLoc;\fi - \ifx\wrngAnsSymbJSLoc\@empty\else\r - \oField.WrongAnsSymbJSLoc=\wrngAnsSymbJSLoc;\fi - }}]{sqID\oField}{2bp}{2bp}}% + \S{S}\textSize{0}\Ff{\FfReadOnly} + \AA{\AAFormat{% + if (typeof \oField=="undefined")\r\t + var \oField=new Object;\r + \oField.Grp={}; + \ifx\defaultColorJSLoc\@empty\else\r + \oField.DefaultColorJSLoc=\defaultColorJSLoc;\fi + \ifx\rghtColorJSLoc\@empty\else\r + \oField.RightColorJSLoc=\rghtColorJSLoc;\fi + \ifx\wrngColorJSLoc\@empty\else\r + \oField.WrongColorJSLoc=\wrngColorJSLoc;\fi + \ifx\rghtAnsSymbJSLoc\@empty\else\r + \oField.RightAnsSymbJSLoc=\rghtAnsSymbJSLoc;\fi + \ifx\wrngAnsSymbJSLoc\@empty\else\r + \oField.WrongAnsSymbJSLoc=\wrngAnsSymbJSLoc;\fi +}}]{sqID\oField}{2bp}{2bp}}% } \def\qz@IDTxtField{\makebox[0pt][l]{\textField[\autoCenter{n}\BC{}\BG{} \S{S}\textSize{0}\Ff{\FfReadOnly} \AA{\AAFormat{if(typeof aQuizzesInDoc=="undefined")\r\t var aQuizzesInDoc=new Array();\r - if (aQuizzesInDoc.indexOf("\oField")) aQuizzesInDoc.push("\oField"); + if (aQuizzesInDoc.indexOf("\oField")) + aQuizzesInDoc.push("\oField");\r +% \end{macrocode} +% (2019/06/22) Added in declaration of quiz object. +%\changes{v8.2.12}{2019/06/22}{Added declaration of quiz object} +% \begin{macrocode} + if (typeof \oField=="undefined")\r\t + var \oField=new Object;\r }}]{qzID\oField}{2bp}{2bp}}} %</package> %<*package|eqexam> @@ -4955,7 +4963,7 @@ \mbox{\check@@Box{#1\V{Yes}\DV{Yes}}% {rbmarkup.\Fld@name}% {\RadioFieldSize}{\RadioFieldSize}{Yes}{}% - {\eq@setWidgetProps\eq@RadioCheck@driver}% + {\eq@setWidgetProps\eq@Check@driver}% {\rbMarkup@Defaults\every@CheckBox\every@rbMarkup}}}% % \end{macrocode} % \end{macro} @@ -5193,7 +5201,7 @@ % \begin{macrocode} \def\DeclareQuiz#1{\edef\oField{#1}% \edef\thisQuiz{#1}\edef\curr@quiz{#1}% - \edef\currQuiz{#1}\edef\curr@quiz{#1}} + \edef\currQuiz{#1}} \let\Quiz\DeclareQuiz % \end{macrocode} % \end{macro} @@ -5957,7 +5965,8 @@ \def\@@Ans@sq@f@Defaults {% \BC{0 0 0}\Ff{\FfNoToggleToOff}\W{1} - \F{\FPrint}\textSize{12}\textColor{0 g} +% \F{\FPrint} + \textSize{12}\textColor{0 g} } % \end{macrocode} % For short quizzes, refine the type of responses: turn off the alert @@ -6072,16 +6081,13 @@ \Ans@sq@f@driver %</eqexam> %<*package> -% \end{macrocode} -%\changes{v6.7d}{2013/05/27}{new \cs{rbf@Opts} option.} -% \begin{macrocode} \mbox{\expandafter\radio@@Button\expandafter{\rbf@Opts}% - {mc.\oField.\thequestionno}% - {\RadioFieldSize}% 11/16/05 changed from \oField to mc.\oField - {\RadioFieldSize}{\Ans@choice\alph{quizno}}{\eq@protect\A}% - {\eq@setWidgetProps\eq@RadioCheck@driver}% - {\@@Ans@sq@f@Defaults\Ans@sq@f@Actions\every@RadioButton - \every@sqRadioButton}}% + {mc.\oField.\thequestionno}% + {\RadioFieldSize}{\RadioFieldSize}% + {\Ans@choice\alph{quizno}}{\eq@protect\A}% + {\eq@setWidgetProps\eq@Radio@driver}% + {\@@Ans@sq@f@Defaults\Ans@sq@f@Actions\every@RadioButton + \every@sqRadioButton}}% \Ans@proofing{\RadioFieldSize}% %</package> %<*package|eqexam> @@ -6170,7 +6176,7 @@ {mc.\oField.\thequestionno.\arabic{quizno}}% {\RadioFieldSize}{\RadioFieldSize} {\Ans@choice\alph{quizno}}{\eq@protect\A}% - {\eq@setWidgetProps\eq@RadioCheck@driver}% + {\eq@setWidgetProps\eq@Check@driver}% {\@@Ans@ck@sq@f@Defaults\Ans@ck@sq@f@Actions\every@CheckBox \every@sqCheckBox}}% \Ans@proofing{\RadioFieldSize}% @@ -6607,7 +6613,7 @@ if (_bOK) {\jsR\jsT \mbox{\expandafter\radio@@Button\expandafter{\rbf@Opts}% {mc.\curr@quiz.\thequestionno}% {\RadioFieldSize}{\RadioFieldSize}{\Ans@choice\alph{quizno}}% - {\eq@protect\A}{\eq@setWidgetProps\eq@RadioCheck@driver}% + {\eq@protect\A}{\eq@setWidgetProps\eq@Radio@driver}% {\Ans@r@f@Defaults\Ans@r@f@Actions\every@RadioButton \every@qRadioButton\insert@circlesymbol}}% \let\late@options\@empty @@ -6642,7 +6648,7 @@ if (_bOK) {\jsR\jsT \makebox[0pt][r]{\check@@Box{}% {mcq.\curr@quiz.\thequestionno.\arabic{quizno}}% {\RadioFieldSize}{\RadioFieldSize}{Yes}{}% - {\eq@setWidgetProps\eq@RadioCheck@driver}% + {\eq@setWidgetProps\eq@Check@driver}% {\Ans@c@f@Defaults\Ans@c@f@Choice\every@CheckBox \every@qCheckBox\late@options}}% \fi @@ -6719,7 +6725,7 @@ if (_bOK) {\jsR\jsT \mbox{\expandafter\check@@Box\expandafter{\cbf@Opts}% {mck.\curr@quiz.\thequestionno.\arabic{quizno}}% {\RadioFieldSize}{\RadioFieldSize}{\Ans@choice\alph{quizno}}% - {\eq@protect\A}{\eq@setWidgetProps\eq@RadioCheck@driver}% + {\eq@protect\A}{\eq@setWidgetProps\eq@Check@driver}% {\Ans@ck@f@Defaults\Ans@ck@f@Actions\every@RadioButton \every@qckCheckbox}}% \ifnocorrections\else @@ -6751,7 +6757,7 @@ if (_bOK) {\jsR\jsT \makebox[0pt][r]{\check@@Box{}% {mcq.\curr@quiz.\thequestionno.\arabic{quizno}}% {\RadioFieldSize}{\RadioFieldSize}{Yes}{}% - {\eq@setWidgetProps\eq@RadioCheck@driver}% + {\eq@setWidgetProps\eq@Check@driver}% {\Ans@c@f@Defaults\Ans@c@f@Choice\every@CheckBox % \end{macrocode} % (2012/12/22) Replace \cs{every@qRadioButton} with \cs{every@qCheckBox}. @@ -8482,7 +8488,7 @@ if (!isQuizInitialized("@currQuiz")) { % \par\medskip % \noindent Usage: %\begin{verbatim} -% \RespBoxTxt[#1]#2[#3]#4[<num1>]{<word1>}...[<num_n>]{<word_n>} +% \RespBoxTxtPC[#1]#2[#3]#4[<num1>]{<word1>}...[<num_n>]{<word_n>} %\end{verbatim} % \begin{description} % \item[\ttfamily\#1 :] Optional parameter used to modify the appearance of the @@ -8644,7 +8650,17 @@ if (!isQuizInitialized("@currQuiz")) { % essay-type questions. This question will not be graded by JavaScript, % of course; ideally, the response will be submitted to a CGI for storage % in a database. The instructor can later bring up the student's response -% and assign a grade. +% and assign a grade. Syntax: +%\begin{quote}\ttfamily +% \string\RespBoxEssay[\ameta{opts}][\ameta{dest}]\darg{\ameta{wd}}\darg{\ameta{ht}}\\[3pt] +% \string\RespBoxEssay[\ameta{opts}]*\darg{\ameta{wd}}\darg{\ameta{ht}} +% \end{quote} +% The second argument declares the problem has a \env{solution} file; we define the target +% of the solution twh ways: an explicite \ameta{dest} string, or an star (\texttt*), where +% the destination is automatically named. If you use \ameta{dest}, you must have +% a frist optional, even if its only \texttt{[]}, to correctly parse this construction. +% \changes{v8.3}{2019/08/13}{\string\env{solution} environment now defined for +% \string\cs{RespBoxEssay}} % \begin{macrocode} \def\RespBoxEssayDefaults {% @@ -8656,10 +8672,10 @@ if (!isQuizInitialized("@currQuiz")) { \AAKeystroke{% if(event.willCommit){\jsR\jsT RecordPointValue(\eqPTs,\thequestionno);\jsR\jsT - RecordProblemType("\eqQT",\thequestionno);\jsR\jsT + RecordProblemType("\eqQT",\thequestionno);\jsR %\jsT }\jsR if (!isQuizInitialized("\curr@quiz")) {\jsR\jsT - @eqObjAlert\space eqAppAlert(% + \eqObjAlert\space eqAppAlert(% InitMsg("\bqlabelISO"),3);\jsR\jsT event.rc = false;\jsR }% @@ -8667,14 +8683,29 @@ if (!isQuizInitialized("@currQuiz")) { \fi } } -\newcommand\RespBoxEssay[3][] +% \RespBoxEssay[opt][dest]|*{wd}{ht} +\newcommand\RespBoxEssay[1][]{\def\rbe@rgi{#1}\RespBoxEssay@i} +\def\RespBoxEssay@i{\@ifnextchar[%] + {\RespBoxEssay@ii} + {\@ifstar{\RespBoxEssay@ii[\curr@quiz.\thequestionno]}}% + {\RespBoxEssay@ii[]}% +} +% \RespBoxEssay#1[dest]{wd}{ht} +\newcommand\RespBoxEssay@ii[3][] {% \smallskip\addtocounter{eqpointvalue}{\eqPTs}% +% \end{macrocode} +% (2019/06/26) Added \cs{eq@AddProbToQzQuesList} for \cs{RespBoxEssay} +% \changes{v8.2.13}{2019/06/26}{Added \string\cs{eq@AddProbToQzQuesList} for \string\cs{RespBoxEssay}} +% \begin{macrocode} + \eq@AddProbToQzQuesList \stepcounter{questionno}% - \mbox{\text@@Field{#1}{essay.\curr@quiz.\thequestionno}{#2}{#3}% + \xdef\@qzsolndest{#1}% \edef\eqtmp{\aPointType}\xdef\aPointType{\eqtmp,[\eqPTs,"essay"]}% - {\eq@protect\AA}{\eq@setWidgetProps\@@RespBoxEssayActions - \eq@TextField}{\RespBoxEssayDefaults\every@eqTextField}}% + \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}}% } % \end{macrocode} % \end{macro} @@ -9192,8 +9223,13 @@ if (!isQuizInitialized("@currQuiz")) { \let\eqQzQuesList\@empty \def\eq@AddProbToQzQuesList{% \edef\eq@tmpExp{\noexpand\g@addto@macro% - \noexpand\eqQzQuesList{% - \noexpand\@eqListExp{\@currentQues}{\thepage}}}% +% \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}} +% \begin{macrocode} + \noexpand\eqQzQuesList{\string + \@eqListExp{\@currentQues}{\the\c@page}}}% +% \@eqListExp{\@currentQues}{\thepage}}}% % \end{macrocode} % We add to the list only if we are not within a \texttt{mathGrp} environment. % \begin{macrocode} @@ -9346,22 +9382,22 @@ if (!isQuizInitialized("@currQuiz")) { \edef\eq@p{\the\@tempcnta}% \@tempcnta=\eq@n \advance\@tempcnta-\eq@p\relax - \ifnum\@tempcnta=0 - \@tempcntb=\eq@q \advance\@tempcntb1 + \ifnum\@tempcnta=\z@ + \@tempcntb=\eq@q \advance\@tempcntb\@ne \xdef\@beginSecCol{\the\@tempcntb}% \advance\@tempcntb\eq@q\relax \xdef\@beginThrdCol{\the\@tempcntb}% - \else\ifnum\@tempcnta=1 - \@tempcntb=\eq@q \advance\@tempcntb1 + \else\ifnum\@tempcnta=\@ne + \@tempcntb=\eq@q \advance\@tempcntb\@ne \edef\nB@lCols{\the\@tempcntb}% - \advance\@tempcntb1\relax + \advance\@tempcntb\@ne \xdef\@beginSecCol{\the\@tempcntb}% \advance\@tempcntb\eq@q\relax \xdef\@beginThrdCol{\the\@tempcntb}% - \else\ifnum\@tempcnta=2 + \else\ifnum\@tempcnta=2\relax \@tempcntb=\eq@q \advance\@tempcntb1 \edef\nB@lCols{\the\@tempcntb}% - \advance\@tempcntb1 + \advance\@tempcntb\@ne \xdef\@beginSecCol{\the\@tempcntb}% \advance\@tempcntb\nB@lCols \xdef\@beginThrdCol{\the\@tempcntb}% @@ -9397,8 +9433,7 @@ if (!isQuizInitialized("@currQuiz")) { % \begin{macrocode} \def\eq@begintab{% \begin{tabular}[t]{lcc}\sumryTblQ&\sumryTblR&\sumryTblP\\\sthline - {\Large\strut}% -} + {\Large\strut}} % \end{macrocode} % \DescribeMacro{\sthline}\cmd{\sthline} % is a user hook to change the appearance of the horizontal line, such @@ -9512,12 +9547,10 @@ if (!isQuizInitialized("@currQuiz")) { % total number of questions. % \begin{macrocode} \def\writeProListAux{% - \eq@IWAuxOut{\string\expandafter\string\gdef - \string\csname\space\currQuiz QzQuesList\string\endcsname - {\eqQzQuesList}}% - \eq@IWAuxOut{\string\expandafter\string\gdef - \string\csname\space\currQuiz nQuestions\string\endcsname - {\thequestionno}}% + \eq@IWAuxOut{\string + \csarg\string\gdef{\currQuiz QzQuesList}{\eqQzQuesList}}% + \eq@IWAuxOut{\string + \csarg\string\gdef{\currQuiz nQuestions}{\thequestionno}}% } % \end{macrocode} % \end{macro} @@ -12633,6 +12666,11 @@ partialColor:wrongColor; // find the next non-null field var g=this.getField(qtfield+"SanityCheckPts."+i); var qpts=(ProbDist[i]==undefined) ? 0 : ProbDist[i]; +% \end{macrocode} +% (2019/06/30) if negative points are not allowed, make qpts zero if necessary +% \changes{v8.2.14}{2019/06/30}{Added a condition if negPointsAllowed} +% \begin{macrocode} + if ( !negPointsAllowed && (qpts < 0) ) qpts=0; var thesePts= qpts + (( qpts == 1 )?% " \eqptLabel":" \eqptsLabel"); g.value = thesePts; @@ -12648,6 +12686,7 @@ partialColor:wrongColor; // find the next non-null field var g=this.getField(qtfield+"SanityCheckOOPts."+i); var qpts=(ProbDist[i]==undefined) ? 0 : ProbDist[i]; + if ( !negPointsAllowed && (qpts < 0) ) qpts=0; var ptValue = oQName.PtValues[i]; var probPts = ptValue + (( ptValue == 1 )?% " \eqptLabel":" \eqptsLabel"); diff --git a/texmf-dist/source/latex/acrotex/insdljs.dtx b/texmf-dist/source/latex/acrotex/insdljs.dtx index 204a4b28..d6bc80b5 100644 --- a/texmf-dist/source/latex/acrotex/insdljs.dtx +++ b/texmf-dist/source/latex/acrotex/insdljs.dtx @@ -4,7 +4,7 @@ %<*copyright> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% insdljs.sty package, %% -%% Copyright (C) 2001-2018 D. P. Story %% +%% Copyright (C) 2001-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% @@ -16,7 +16,7 @@ %</copyright> %<package>\NeedsTeXFormat{LaTeX2e} %<package>\ProvidesPackage{insdljs} -%<package> [2019/03/16 v2.4.2 Insert Document Level JavaScripts (dps)] +%<package> [2019/08/06 v2.4.6 Insert Document Level JavaScripts (dps)] %<*driver> \documentclass{ltxdoc} \usepackage[colorlinks,hyperindex=false]{hyperref} @@ -475,14 +475,22 @@ \DeclareOptionX{debug}{\let\dljs@debug\dl@YES} \let\dljs@debug\dl@NO % \end{macrocode} -% \IndexOpt{execJS} -% If the execution of JavaScript code is permitted following distillation. The default is no. -% \begin{macrocode} -\DeclareOptionX{execJS}{\let\execjs\dl@YES} -\let\execjs\dl@NO +% If the option \IndexOpt{execJS}\opt{execJS} is taken, then the JavaScript code for any \env{execJS} environment +% will be executed following PDF creation (\app{Acrobat} required). The default is no. +% More recently (2019/08/06) \DescribeMacro\execJSOn\cs{execJSOn} and \DescribeMacro\execJSOff\cs{execJSOff} +% were added to turn on (or off) execution of JS in this way. Useful when \pkg{insdljs} is loaded by other +% packages and you cannot access the optional arguments of \cs{usepackage}. These commands are only effective +% in the preamble. +% \changes{v2.4.6}{2019/08/06}{Added \string\cs{execJSOn} and \string\cs{execJSOff}} +% \begin{macrocode} +\DeclareOptionX{execJS}{\execJSOn} +\def\execJSOn{\let\execjs\dl@YES} +\def\execJSOff{\let\execjs\dl@NO} +\execJSOff \DeclareOptionX{nopro}{\let\dl@gopro\dl@NO} \let\dl@gopro\dl@YES % \end{macrocode} +% We set the driver, according to the following algorithm. % \begin{macrocode} \@ifpackageloaded{web}{% \ExecuteOptionsX{\eq@driver@name}% @@ -497,7 +505,7 @@ }% } % \end{macrocode} -% \IndexOpt{reqjs} +% \leavevmode\IndexOpt{reqjs} % Beginning with PDF 1.7, a document can specify requirements, here we declare % the document uses JavaScripts. The option \texttt{reqjs} is taken by default, % that is, JavaScripts are required for this document @@ -519,14 +527,18 @@ % function is the same, but begins with `\texttt{EF}'. For example, the keystroke function % \texttt{AFNumber\_Keystroke} is also known under the name of \texttt{EFNumber\_Keystroke}. % See \hyperref[s:AltAdbFncs]{Section~\ref*{s:AltAdbFncs}} for the list of functions. +% \changes{v2.4.6}{2019/08/06}{Added switch \string\cs{usedAdbFuncs} to help detect +% the usealtadobe option} % \begin{macrocode} -\DeclareOptionX{usealtadobe}{\def\inputAltAdbFncs{% - \InputIfFileExists{altadbfncs.def}% - {\PackageInfo{insdljs}{Inputting code for usealtadobe option}}% +\DeclareOptionX{usealtadobe}{\let\usedAdbFuncs\dl@YES + \def\inputAltAdbFncs{\InputIfFileExists{altadbfncs.def} + {\PackageInfo{insdljs}{Inputting code for usealtadobe option}} {\PackageWarning{insdljs}{Cannot find altadbfncs.def.\MessageBreak Reinstall or refresh your file name database.}}}} +\let\usedAdbFuncs\dl@NO \let\inputAltAdbFncs\relax -% \paragraph*{Process the package options} +% \end{macrocode} +% \textbf{Process the package options} % \begin{macrocode} \ProcessOptionsX % \end{macrocode} @@ -634,7 +646,8 @@ % do not. The \textbf{\textsf{Requirements}} dictionary goes in the document \textbf{\textsf{Catalog}}. % \changes{v2.2d}{2016/04/06}{Code to support \texttt{reqjs} and \texttt{{\string\EXPT}reqjs} options.} % \begin{macrocode} -\def\AEB@psMrk{[\space} +\def\AEB@psMrk{[%] + \space} \ifx\dl@reqJS\dl@YES \def\dl@@reqJS{/Type/Requirement/S/EnableJavaScripts} \ifpdf\pdfcatalog{\dl@@reqJS}\else @@ -1201,9 +1214,9 @@ \global\let\aebpFA\dl@YES \let\@pdfstartview\@empty \else - \edef\aebp@dljstmp{\aebp@rightDelimiters}% - \xdef\aebp@rightDelimiters{\aebp@dljstmp >> }% - \g@addto@macro\aebpopentoks{/Next << #1 }% + \edef\aebp@dljstmp{\aebp@rightDelimiters}% + \xdef\aebp@rightDelimiters{\aebp@dljstmp >> }% + \g@addto@macro\aebpopentoks{/Next << #1 }% \fi } \def\dljs@OpenActions{/OpenAction \addActionObj} @@ -1680,10 +1693,9 @@ % \textsf{aeb\_pro}. % \begin{macrocode} \let\DLspecialDefs\@empty -\def\fdfAfterheader -{% +\def\fdfAfterheader#1{% \iwvo{\string\begingroup\string\efdlspecials} - \iwvo{\string\DLspecialDefs} + \iwvo{\string\DLspecialDefs\string#1} \iwvo{\string\isdljstrue} \iwvo{\string\makeatletter} \iwvo{\string\immediate\string\openout\string @@ -1710,13 +1722,25 @@ } % \end{macrocode} % \begin{environment}{execJS} -% The parameter \texttt{\#1} is the base name for this environment. -% The base name will be used to create -% a filename to save the \texttt{.fdf} file under. -% \begin{macrocode} -\newenvironment{execJS}[1] +% \hskip-\marginparsep\texttt{[\ameta{\cs{cmd}}]\darg{\ameta{base-name}}} +% The parameter \texttt{\#2} (\ameta{base-name}) is the base name for this environment. +% The base name will be used to create a filename to save the \texttt{.fdf} file under. +% \begin{macrocode} +% \end{macrocode} +% Added \DescribeMacro\restoreDLspecialsDefs\cs{restoreDLspecialsDefs} to restore +% \DescribeMacro\DLspecialDefs\cs{DLspecialDefs} to its default of \cs{@empty}. +% \changes{v2.4.4}{2019/07/14}{Added \string\cs{restoreDLspecialsDefs}} +% The \env{execJS} environment now has an optional argument, the optional argument must be +% a command (\ameta{\cs{cmd}}) that is then passed on to \cs{fdfAfterheader}, which then writes it to +% \cs{dljsBase.djs}. The purpose is to make special definitions at the time the script +% is expanded. +% \changes{v2.4.5}{2019/07/15}{\string\env{execJS} now has an optional argument} +% \begin{macrocode} +\def\restoreDLspecialDefs{\let\DLspecialDefs\@empty} +\newenvironment{execJS}[2][\relax] {% - \gdef\detectdljs{\string_#1}\gdef\dljsBase{#1}% + \def\x{#1}\ifx\x\@empty\def\x{\relax}\fi + \gdef\detectdljs{\string_#2}\gdef\dljsBase{#2}% \global\dljsobjtoks={}% \expandafter\gdef\csname dljs\dljsBase\endcsname{}% \ifx\importdljs\dl@YES\ifx\execjs\dl@YES @@ -1728,12 +1752,17 @@ \fi\fi \fi\fi \immediate\openout \js@verbatim@out \js@Path\dljsBase.djs - \fdfAfterheader + \expandafter\fdfAfterheader\expandafter{\x}% \js@verbatimwrite }{% \fdfendstreamobj \endjs@verbatimwrite \fdftrailer +% \end{macrocode} +% Added \cs{restoreDLspecialsDefs} to restore \cs{DLspecialDefs} to its default of \cs{@empty}. +% \changes{v2.4.4}{2019/07/14}{Added \string\cs{restoreDLspecialsDefs}} +% \begin{macrocode} + \iwvo{\string\restoreDLspecialDefs}% \closejs@verbatim@out \expandafter\xdef\csname\dljsBase OBJ\endcsname{\the\dljsobjtoks}% \edef\@dljstmp{\noexpand\AtBeginDocument{% @@ -1840,7 +1869,7 @@ \edef\csname\p@r@m\the\c@dljs@cnt\endcsname{\the\JStoks}}} % \end{macrocode} % Beginning with \pkg{insdljs} dated 2019/03/16, we solve an age-old problem with \app{dvips}: This problem -% is that is wraps code around to th next line, according to some unknown algorithm. Normally this is not +% is that is wraps code around to the next line, according to some unknown algorithm. Normally this is not % a problem, but occassionally it will wrap some JavaScript code that breaks the code. Solve this problem, % we make the space character active, and replace it with \cs{pdfSP} (\cs{040}), which is octal for the space % character. Now there are no free spaces for \app{dvips} to break the line at in the PS file. The feature @@ -1850,10 +1879,21 @@ \def\pdfSpacesOn{\let\pdfSP\pdfSPDef} \def\pdfSpacesOff{\let\pdfSP\dl@sp@ce} % \end{macrocode} +% \DescribeMacro{\dlcombine}\hskip-\marginparsep\texttt{(\#1)(\#2)} +% Within the \env{defineJS} environment, spaces are obeyed, at time, we want to says +% \verb*|@currQuiz MyField|, for example. which within \env{defineJS} gets expanded to +% \verb*|q1 MyField|, not \texttt{q1MyField} as it should be. To solve this and other +% problems like it, use \verb|@dlcombine(@currQuiz)(MyField)| which does expand +% to the intended expression. (In this discussion, it is assumed \texttt{@} is the escape character +% within \env{defineJS}.) +% \changes{v2.4.3}{2019/06/27}{Added \string\cs{dlcombine}} +% \begin{macrocode} +\def\dlcombine(#1)(#2){#1#2} +% \end{macrocode} % When you declare a character to be an escape within the optional argument of \env{defineJS}, % that character may be needed in the code; for example if we say |\catcode`\!=0\relax|, and % within the JavaScript code you have \texttt{if (x != 0 ) ...}, there is a problem: the JavaScript -% code is broken. As a fix for this problem, you can declare \DescribeMacro\escIs|\escIS{!}|, +% code is broken. As a fix for this problem, you can declare \DescribeMacro\escIs|\escIs{!}|, % which in turn defines \DescribeMacro\Eschr\cs{Eschr}. the above code % should then be written as \texttt{if (x !Eschr= 0 ) ...}; messy, but it works. The lines % below is the recommended method of declaring \cs{escIs}: @@ -1865,9 +1905,18 @@ % \begin{macrocode} \def\escIs#1{\def\Eschr{#1}} % \end{macrocode} +% \DescribeMacro\makeesc\hskip-\marginparsep\texttt{\cs{\ameta{char}}} +% \cs{dl@makeesc} is a helper command that sets the escape character, +% Within the \env{defineJS} environments, it is \cs{let} to \DescribeMacro\makeesc\cs{makeesc}; +% eg, |\makeesc\@| +% \changes{v2.4.3}{2019/06/27}{Added \string\cs{dl@makeesc}} +% \begin{macrocode} +\def\dl@makeesc#1{\catcode`#1=0\relax} +% \end{macrocode} % Finally, we get to the definition of \env{defineJS}, and its compatriates. % \begin{macrocode} \newenvironment{defineJS}[2][]{% + \let\makeesc\dl@makeesc \expandafter\@ifundefined\expandafter{% \expandafter\@gobble\string#2}{}{% \PackageWarning{insdljs}{The command @@ -1894,6 +1943,7 @@ % \begin{macrocode} \newenvironment{@defineJS}[2][] {% + \let\makeesc\dl@makeesc \gdef\defineJSArg{#2}\JStoks={}% \def\verbatim@processline{% \xdef\JS@temp{\the\JStoks\the\verbatim@line\defineJSjsR}% diff --git a/texmf-dist/source/latex/acrotex/web.dtx b/texmf-dist/source/latex/acrotex/web.dtx index 605c2f52..de0477d5 100644 --- a/texmf-dist/source/latex/acrotex/web.dtx +++ b/texmf-dist/source/latex/acrotex/web.dtx @@ -2951,8 +2951,10 @@ % \end{macrocode} % \begin{macrocode} \def\aebwritelastpage{% - \immediate\write\@auxout{\string\expandafter\string\gdef - \string\csname\space aebLastPage\string\endcsname{\arabic{page}}}% + \immediate\write\@auxout{% +% \string\expandafter\string\gdef +% \string\csname\space aebLastPage\string\endcsname{\arabic{page}}}% + \string\w@csarg\string\gdef{aebLastPage}{\arabic{page}}}% } % \end{macrocode} % \begin{macrocode} diff --git a/texmf-dist/tex/latex/acrotex/aebjs.def b/texmf-dist/tex/latex/acrotex/aebjs.def index ec071992..8c75a6f0 100644 --- a/texmf-dist/tex/latex/acrotex/aebjs.def +++ b/texmf-dist/tex/latex/acrotex/aebjs.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% @@ -18,7 +18,7 @@ %% License, or (at your option) any later version. %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ProvidesFile{aebjs.def} - [2019/02/11 v8.2.9 % + [2019/08/13 v8.3 % Exerquiz document level JavaScript (dps)] \def\aeb@array{new Array} \def\refac#1{\\(#1\\)}\def\regrp#1{(#1)}\def\rechrclass#1{[#1]} diff --git a/texmf-dist/tex/latex/acrotex/aebrandom.def b/texmf-dist/tex/latex/acrotex/aebrandom.def index 66271ebd..10dbce06 100644 --- a/texmf-dist/tex/latex/acrotex/aebrandom.def +++ b/texmf-dist/tex/latex/acrotex/aebrandom.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% @@ -18,7 +18,7 @@ %% License, or (at your option) any later version. %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ProvidesFile{aebrandom.def} - [2019/02/11 v8.2.9 % + [2019/08/13 v8.3 % 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 64eac218..ce8636cd 100644 --- a/texmf-dist/tex/latex/acrotex/aebsumrytbls.def +++ b/texmf-dist/tex/latex/acrotex/aebsumrytbls.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% @@ -18,7 +18,7 @@ %% License, or (at your option) any later version. %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ProvidesFile{aebsumrytbls.def} - [2019/02/11 v8.2.9 % + [2019/08/13 v8.3 % Exerquiz support for summary tables (dps)] \def\ccatCurrQzWith(#1){\currQuiz#1} \def\pbPopulateSumTable{\pushButton[\W0\BG{}\BC{}\S{S}\autoCenter{n} @@ -78,22 +78,22 @@ \edef\eq@p{\the\@tempcnta}% \@tempcnta=\eq@n \advance\@tempcnta-\eq@p\relax - \ifnum\@tempcnta=0 - \@tempcntb=\eq@q \advance\@tempcntb1 + \ifnum\@tempcnta=\z@ + \@tempcntb=\eq@q \advance\@tempcntb\@ne \xdef\@beginSecCol{\the\@tempcntb}% \advance\@tempcntb\eq@q\relax \xdef\@beginThrdCol{\the\@tempcntb}% - \else\ifnum\@tempcnta=1 - \@tempcntb=\eq@q \advance\@tempcntb1 + \else\ifnum\@tempcnta=\@ne + \@tempcntb=\eq@q \advance\@tempcntb\@ne \edef\nB@lCols{\the\@tempcntb}% - \advance\@tempcntb1\relax + \advance\@tempcntb\@ne \xdef\@beginSecCol{\the\@tempcntb}% \advance\@tempcntb\eq@q\relax \xdef\@beginThrdCol{\the\@tempcntb}% - \else\ifnum\@tempcnta=2 + \else\ifnum\@tempcnta=2\relax \@tempcntb=\eq@q \advance\@tempcntb1 \edef\nB@lCols{\the\@tempcntb}% - \advance\@tempcntb1 + \advance\@tempcntb\@ne \xdef\@beginSecCol{\the\@tempcntb}% \advance\@tempcntb\nB@lCols \xdef\@beginThrdCol{\the\@tempcntb}% @@ -106,8 +106,7 @@ } \def\eq@begintab{% \begin{tabular}[t]{lcc}\sumryTblQ&\sumryTblR&\sumryTblP\\\sthline - {\Large\strut}% -} + {\Large\strut}} \def\sthline{\hline} \def\eq@endtab{\end{tabular}} \def\sumrytblCkMUsep{\kern3bp} @@ -142,12 +141,10 @@ \ifnum\eq@rowcnt=\thequestionno\relax\expandafter\eq@endtab\fi } \def\writeProListAux{% - \eq@IWAuxOut{\string\expandafter\string\gdef - \string\csname\space\currQuiz QzQuesList\string\endcsname - {\eqQzQuesList}}% - \eq@IWAuxOut{\string\expandafter\string\gdef - \string\csname\space\currQuiz nQuestions\string\endcsname - {\thequestionno}}% + \eq@IWAuxOut{\string + \csarg\string\gdef{\currQuiz QzQuesList}{\eqQzQuesList}}% + \eq@IWAuxOut{\string + \csarg\string\gdef{\currQuiz nQuestions}{\thequestionno}}% } \def\setParamSumryTblAux{% \edef\eqQzQuesList{\@nameuse{\currQuiz QzQuesList}}% @@ -214,6 +211,7 @@ partialColor:wrongColor; // find the next non-null field var g=this.getField(qtfield+"SanityCheckPts."+i); var qpts=(ProbDist[i]==undefined) ? 0 : ProbDist[i]; + if ( !negPointsAllowed && (qpts < 0) ) qpts=0; var thesePts= qpts + (( qpts == 1 )?% " \eqptLabel":" \eqptsLabel"); g.value = thesePts; @@ -225,6 +223,7 @@ partialColor:wrongColor; // find the next non-null field var g=this.getField(qtfield+"SanityCheckOOPts."+i); var qpts=(ProbDist[i]==undefined) ? 0 : ProbDist[i]; + if ( !negPointsAllowed && (qpts < 0) ) qpts=0; var ptValue = oQName.PtValues[i]; var probPts = ptValue + (( ptValue == 1 )?% " \eqptLabel":" \eqptsLabel"); diff --git a/texmf-dist/tex/latex/acrotex/altadbfncs.def b/texmf-dist/tex/latex/acrotex/altadbfncs.def index 5c087517..b852cdfa 100644 --- a/texmf-dist/tex/latex/acrotex/altadbfncs.def +++ b/texmf-dist/tex/latex/acrotex/altadbfncs.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% insdljs.sty package, %% -%% Copyright (C) 2001-2018 D. P. Story %% +%% Copyright (C) 2001-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% diff --git a/texmf-dist/tex/latex/acrotex/dljscc.def b/texmf-dist/tex/latex/acrotex/dljscc.def index 55f0b491..96e5de80 100644 --- a/texmf-dist/tex/latex/acrotex/dljscc.def +++ b/texmf-dist/tex/latex/acrotex/dljscc.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% insdljs.sty package, %% -%% Copyright (C) 2001-2018 D. P. Story %% +%% Copyright (C) 2001-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% diff --git a/texmf-dist/tex/latex/acrotex/edvipdfm.def b/texmf-dist/tex/latex/acrotex/edvipdfm.def index 8f013a62..16c21749 100644 --- a/texmf-dist/tex/latex/acrotex/edvipdfm.def +++ b/texmf-dist/tex/latex/acrotex/edvipdfm.def @@ -48,24 +48,86 @@ \endgroup \dl@restorespcs } -\def\eq@RadioCheck@driver{\ef@adjHWxetex\Hy@pdfstringtrue +\def\parentRef#1#2{\csarg\gdef{parent@#1}{#2}} +\def\ef@radioData#1#2{%\expandafter + \immediate\write\@mainaux{\string\parentRef{#1}{#2}}} +\def\eq@Radio@driver{\ef@adjHWxetex\Hy@pdfstringtrue \ifx\@vertRotate\ef@One \let\W@temp\eq@rectW\edef\eq@rectW{\eq@rectH}% \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi + \ifuseNewRadios + \ifx\isRadioParent\ef@YES\expandafter + \ifx\csname radio@\Fld@name\endcsname\relax\else + \immediate\@pdfm@mark{obj @parentobj\HyField@TheAnnotCount + << \radio@parent\space >>}% + \ef@radioData{\Fld@name}{@parentobj\HyField@TheAnnotCount}% + \ifx\eq@V\@empty\else + \csarg\xdef{value@\Fld@name}% + {\@nameuse{OnVal@\Fld@name}}% + \fi + \fi + \ifx\ef@multigroupradios\ef@YES + \csarg\gdef{multigroup@\Fld@name}% + {\let\ef@multigroupradios\ef@YES}% + \else + \csarg\gdef{multigroup@\Fld@name}% + {\let\ef@multigroupradios\ef@NO}% + \fi + \ifx\isRadiosInUnison\ef@YES + \csarg\gdef{uniradios@\Fld@name}% + {\let\isRadiosInUnison\ef@YES}% + \else + \csarg\gdef{uniradios@\Fld@name}% + {\let\isRadiosInUnison\ef@NO}% + \fi + \fi + \fi + \ef@NewRadiosLateOpts \ifx\eq@rectW\@empty\def\eq@rectW{\wd\eq@tmpbox}\fi + \HyField@AdvanceAnnotCount \setbox\pdfm@box=% \hbox{\lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}}% - \@pdfm@mark{ann \dvipdfm@setdim - <<\common@RadioCheckCode>>}\unhbox\pdfm@box\relax% + \ifx\annot@type\annot@type@checkbox\def\btn@type{check}\else + \def\btn@type{radio}\fi + \@pdfm@mark{ann @\btn@type\HyField@TheAnnotCount\space\dvipdfm@setdim + <<\common@RadioCode>>}\unhbox\pdfm@box\relax% + \ifuseNewRadios + \edef\x{\noexpand\g@addto@macro\noexpand + \ef@KidsArray{@parentobj\HyField@TheAnnotCount\space}}\x + \csarg\xdef{kid@\Fld@name}{\ef@KidsArray}% + \else + \@pdfm@mark{put @afields @\btn@type\HyField@TheAnnotCount}% + \fi + \endgroup + \dl@restorespcs +} +\def\eq@Check@driver{\ef@adjHWxetex\Hy@pdfstringtrue + \ifx\@vertRotate\ef@One + \let\W@temp\eq@rectW\edef\eq@rectW{\eq@rectH}% + \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH + \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi + \ifx\eq@rectW\@empty\def\eq@rectW{\wd\eq@tmpbox}\fi + \HyField@AdvanceAnnotCount + \setbox\pdfm@box=% + \hbox{\lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}}% + \ifx\annot@type\annot@type@checkbox\def\btn@type{check}\else + \def\btn@type{radio}\fi + \@pdfm@mark{ann @\btn@type\HyField@TheAnnotCount\space\dvipdfm@setdim + <<\common@CheckCode>>}\unhbox\pdfm@box\relax% + \@pdfm@mark{put @afields @\btn@type\HyField@TheAnnotCount}% \endgroup \dl@restorespcs } \def\eq@l@check@driver{% - \setbox\pdfm@box=% - \hbox{\makebox[\eq@tmpdima]{\phantom{\link@@Content}}}% - \@pdfm@mark{ann \dvipdfm@setdim<<\common@RadioCheckCode>>}% - \unhbox\pdfm@box\relax\endgroup + \HyField@AdvanceAnnotCount + \setbox\pdfm@box=% + \hbox{\makebox[\eq@tmpdima]{\phantom{\link@@Content}}}% + \@pdfm@mark{ann @check\HyField@TheAnnotCount\space + \dvipdfm@setdim<<\common@CheckCode>>}% + \unhbox\pdfm@box\relax + \@pdfm@mark{put @afields @check\HyField@TheAnnotCount}% + \endgroup } \def\eq@TextField{\ef@adjHWxetex\Hy@pdfstringtrue \ifx\@vertRotate\ef@One @@ -90,6 +152,7 @@ \hbox{\lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}}% \@pdfm@mark{ann @\Fld@name\space\dvipdfm@setdim << \common@SigFieldCode >>}\unhbox\pdfm@box\relax% + \@pdfm@mark{put @afields @\Fld@name}% record in @afields array \endgroup \dl@restorespcs } diff --git a/texmf-dist/tex/latex/acrotex/eforms.sty b/texmf-dist/tex/latex/acrotex/eforms.sty index 3184371f..d29485b8 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/05/24 v2.11 Provides general eforms support (dps)] + [2019/06/14 v2.3 Provides general eforms support (dps)] \RequirePackage{ifpdf}[2006/02/20] \RequirePackage{ifxetex}[2006/08/21] \RequirePackage{ifluatex} @@ -111,6 +111,8 @@ \MessageBreak in the option list of the eforms package.}% }{} \fi +\edef\ef@CatChngs{\the\catcode`\$} +\@makeother\$\relax \newlength\eflength \@ifundefined{ifpdfmarkup}{\newif\ifpdfmarkup}{}\pdfmarkupfalse \ifpdf\else\ifxetex\else\pdfmarkuptrue\fi\fi @@ -139,6 +141,7 @@ \let\to@usepdfmark\ef@Zero \RequirePackage{taborder} \fi +\def\csarg#1#2{\expandafter#1\csname#2\endcsname} \@ifundefined{eq@tmpbox}{\newsavebox{\eq@tmpbox}}{} \@ifundefined{eq@tmpdima}{\newdimen\eq@tmpdima}{} \@ifundefined{eq@tmpdimb}{\newdimen\eq@tmpdimb}{} @@ -159,6 +162,7 @@ \hb@xt@\noexpand\z@{\hss#1\hss}}\fi} \let\@PMPV\@empty \let\pmpvFmt\@empty +\let\pmpvFmtCtrl\relax \def\ef@Bbox#1#2{\hbox{\ifpreview \setlength\fboxrule{\efPreviewOnRule}\setlength\fboxsep{0pt}% \@tempdima=#1\relax @@ -168,7 +172,7 @@ \ifdim\@tempdimb<2\fboxrule\else \advance\@tempdimb by-2\fboxrule\fi \ckbox@Color\fbox{\parbox[b][\@tempdimb][c]{\@tempdima}% - {\vfil\hfil\pmpvFmt{\@PMPV}\hfil\vfil}}\else + {\vfil\hfil\pmpvFmtCtrl\pmpvFmt{\@PMPV}\hfil\vfil}}\else \parbox[b][#2][c]{#1}{\vfil\hfil\hfil\vfil}\fi}% } \let\Bbox\ef@Bbox @@ -199,6 +203,9 @@ \@tempcnta=\eq@FfValue \def\eq@arg{#2}% \ifx\eq@arg\@empty\else + \def\x{\FfRadiosInUnison}% + \ifx\eq@arg\x\let\isRadiosInUnison\ef@YES + \else\let\isRadiosInUnison\ef@NO\fi \advance\@tempcnta by#2\fi \edef\eq@Ff{/Ff \the\@tempcnta}% \def\ef@next{\processAppArgs}% @@ -211,7 +218,7 @@ \@tempcnta=\eq@FValue \def\eq@arg{#2}% \ifx\eq@arg\@empty\else - \ifnum#2=2\relax % dpstoday + \ifnum#2=2\relax \let\ef@isHidden\ef@YES\else \ifnum#2=32\relax \let\ef@isHidden\ef@YES\else @@ -506,8 +513,14 @@ \let\eq@DV\@empty\else\def\eq@DV{/DV<#1>}\fi} \let\pmpvV\@empty \let\eq@VSAVE\@empty +\let\ef@Vpv\ef@YES +\def\pmpvVOff{\let\ef@Vpv\ef@NO\let\pmpvFmtCtrl\@gobble} +\def\pmpvVOn{\let\ef@Vpv\ef@YES\let\pmpvFmtCtrl\relax} +\def\noexpand@iii{\noexpand\noexpand\noexpand} \def\@eqV#1{\Hy@pdfstringfalse - \edef\pmpvV{#1}% + \let\x\protect + \let\protect\noexpand@iii\edef\pmpvV{#1}% + \edef\pmpvV{#1}\let\protect\x \let\unicodeStrSAVE\unicodeStr \Hy@pdfstringtrue\let\unicodeStr\relax \edef\x{#1}\let\unicodeStr\unicodeStrSAVE @@ -582,6 +595,9 @@ \fi }\def\eq@BG{} \let\pmpvCA\@empty +\let\ef@CApv\ef@YES +\def\pmpvCAOff{\let\ef@CApv\ef@NO\let\pmpvFmtCtrl\@gobble} +\def\pmpvCAOn{\let\ef@CApv\ef@YES\let\pmpvFmtCtrl\relax} \def\@eqCA#1{\let\unicodeStrSAVE\unicodeStr \Hy@pdfstringtrue\let\unicodeStr\relax \edef\x{#1}\let\unicodeStr\unicodeStrSAVE @@ -591,7 +607,8 @@ \let\eq@CA\@empty\let\ef@kvCA\@empty \else\ef@pdfCRLFTABDefns \pdfstringdef\ef@uni@temp{#1}\Hy@pdfstringfalse - \edef\pmpvCA{#1}\def\eq@CA{#1}% + \let\x\protect\let\protect\noexpand@iii + \edef\pmpvCA{#1}\def\eq@CA{#1}\let\protect\x \edef\ef@kvCA{/CA(\ef@uni@temp)}% \makespecialJS \fi @@ -791,6 +808,8 @@ \let\eq@mlcrackinsat\@empty \def\@eqprotect#1{\eq@protect{#1}} \def\eq@protect#1{\let#1\@empty} +\def\@eqmultigroupradios#1{\let\ef@multigroupradios\ef@YES} +\let\ef@multigroupradios\ef@NO \def\ef@stop{\relax} %\def\ef@relax{\relax} \def\protectedKeys#1#2{\ef@scratchtoks={}% \@ifundefined{#1}{}{\PackageWarning{eforms} @@ -1035,7 +1054,7 @@ \ifefpmpv\Hy@pdfstringfalse \ifx\ef@isBGtransparent\ef@YES \let\ef@kvCA\@empty\fi - \PMPV{\eq@CA}\fi + \ifx\ef@CApv\ef@YES\PMPV{\eq@CA}\fi\fi \ef@djXPD#1% } \def\eq@setWidgetProps#1#2{\makeJSspecials @@ -1044,11 +1063,13 @@ \ifx\eq@BC\@empty\@eqW{}\else \if\eq@W@value0\let\eq@BC\@empty\fi\fi \fi + \ef@lateWidgetOpts \ifefpmpv\Hy@pdfstringfalse \ifx\ef@isHidden\ef@YES \let\eq@V\eq@VSAVE\else - \PMPV{\pmpvV}\fi + \ifx\ef@Vpv\ef@YES\PMPV{\pmpvV}\fi\fi \fi + \global\let\ef@lateWidgetOpts\relax \ef@djXPD#1% } \def\ef@sanitize@toks{\@makeother\~\@makeother\#\@makeother\&% @@ -1182,7 +1203,47 @@ \eq@A\eq@AA \eq@rawPDF } -\def\common@RadioCheckCode{% +\def\radio@parent{% + /DA (\eq@DA)% + /FT/Btn% + \eq@Ff% + \eq@TU% + \eq@DV% +\expandafter\ifx\csname kids@\Fld@name\endcsname\relax\else + /Kids [\@nameuse{kids@\Fld@name}]% +\fi +\ifx\ef@multigroupradios\ef@YES +\expandafter\ifx\csname radio@\Fld@name\endcsname\relax\else + /Opt[\@nameuse{radio@\Fld@name}]\fi\fi + /T(\Fld@name)% + \eq@V +} +\def\common@RadioCode{% + /Subtype/Widget +\ifuseNewRadios + \expandafter\ifx\csname radio@\Fld@name\endcsname\relax\else + /Parent \@nameuse{parent@\Fld@name}\fi +\else + /T (\Fld@name) + /FT/Btn + \eq@Ff + \eq@F + \eq@TU + \eq@DV\eq@V + /DA (\eq@DA) +\fi + /BS <<\eq@W\eq@S>> +\ifx\eq@AP\@empty + /AP<< /N <<\eq@On<<>>>> >> + \eq@MK +\else + \eq@AP +\fi + \eq@AS + \eq@A\eq@AA + \eq@rawPDF +} +\def\common@CheckCode{% /Subtype/Widget /T (\Fld@name) /FT/Btn @@ -1244,27 +1305,115 @@ \@eqMK{\eq@R\eq@BC\eq@BG/CA(\symbol@choice)\eq@mkIns}% \@processEvery#8\end\noindent#6#7{#1}} \def\checkBoxDefaults{\F{\FPrint}\W{1}\S{S}\BC{0 0 0}} -\bgroup\obeyspaces -\gdef\checkBox{\begingroup\global\let =\pdfSP +\bgroup\obeyspaces% +\gdef\checkBox{\begingroup\global\let =\pdfSP% \ef@sanitize@toks\ef@checkbox}\egroup \newcommand{\ef@checkbox}[5][]{\endgroup \mbox{\check@@Box{#1}{#2}{#3}{#4}{#5}{}{\eq@setWidgetProps - \eq@RadioCheck@driver}{\checkBoxDefaults\every@CheckBox}}} + \eq@Check@driver}{\checkBoxDefaults\every@CheckBox}}} +\newif\ifuseNewRadios \useNewRadiosfalse +\def\useNewRadiosOn{\useNewRadiostrue} +\def\useNewRadiosOff{\useNewRadiosfalse} +\let\ef@OptArray\@empty +\let\ef@KidsArray\@empty +\let\ef@lateWidgetOpts\relax \def\annot@type@radio{radiobtn} +\def\ef@NewRadiosLateOpts{% + \ifuseNewRadios + \@nameuse{multigroup@\Fld@name}% + \ifx\ef@multigroupradios\ef@YES + \ifpdfmarkup + \def\eq@On{(\@nameuse{radioindex@\Fld@name}) cvn }\else + \def\eq@On{/\@nameuse{radioindex@\Fld@name}}\fi + \expandafter\ifx\csname OnVal@\Fld@name\endcsname\relax + \@eqAS{Off}\else % today + \ifnum\@nameuse{OnVal@\Fld@name}=% + \@nameuse{radioindex@\Fld@name}\relax + \@eqAS{\@nameuse{radioindex@\Fld@name}}\else\@eqAS{Off}\fi\fi + \else + \edef\x{\@nameuse{OnVal@\Fld@name}}% + \ifx\x\ef@thisChoice\@eqAS{\@nameuse{OnVal@\Fld@name}}\else + \@eqAS{Off}\fi + \fi + \@nameuse{uniradios@\Fld@name}% + \ifx\isRadiosInUnison\ef@YES + \edef\x{\@nameuse{value@\Fld@name}}% + \ifx\x\ef@thisChoice\expandafter\@eqAS + \expandafter{\ef@thisChoice}\else\@eqAS{Off}\fi + \fi + \fi +} +\def\ef@advanceRadioIndex#1{\bgroup + \@tempcnta\@nameuse{radioindex@#1}\relax + \advance\@tempcnta\@ne + \csarg\xdef{radioindex@#1}{\the\@tempcnta}\egroup} +\def\radioChoices#1{\csarg\xdef{radio@#1}} +\def\radioKids#1{\csarg\xdef{kids@#1}} +\def\ef@radioWarning{\PackageWarningNoLine{eforms} + {Not all PDF object references have\MessageBreak + been resolved, keep compiling}} +\def\ef@@radioWarning{% + \ifx\ef@radioWarning\relax\else + \@ifundefined{kids@\Fld@name} + {\ef@radioWarning\global\let\ef@radioWarning\relax}{}\fi + \ifx\ef@radioWarning\relax\else + \@ifundefined{radio@\Fld@name} + {\ef@radioWarning\global\let\ef@radioWarning\relax}{}\fi + \ifx\ef@radioWarning\relax\else + \@ifundefined{parent@\Fld@name} + {\ef@radioWarning\global\let\ef@radioWarning\relax}{}\fi +} \newcommand\radio@@Button[8]{\begingroup\let\#\ef@Hx \let\nameuse\@nameuse\let\tops\texorpdfstring \edef\annot@type{\annot@type@radio}% - \pdfstringdef\Fld@name{#2}\@eqAS{Off}\dl@paramlocal + \pdfstringdef\Fld@name{#2}% + \ifuseNewRadios + \ef@@radioWarning + \@ifundefined{rad@\Fld@name}{\let\isRadioParent\ef@YES + \global\let\ef@OptArray\@empty + \global\let\ef@KidsArray\@empty + \csarg\gdef{radioindex@\Fld@name}{-1}\expandafter + \global\csarg\let{rad@\Fld@name}\@empty}% + {\let\isRadioParent\ef@NO}% + \edef\ef@OptArray{\@nameuse{rad@\Fld@name}}% + \g@addto@macro\ef@OptArray{(#5)}% opt + \csarg\xdef{rad@\Fld@name}{\ef@OptArray}% + \ifx\isRadioParent\ef@YES + \def\y{\expandafter\string\noexpand}% + \edef\x{\noexpand\immediate\noexpand\write\noexpand\@auxout + {\y\radioChoices{\Fld@name}{\noexpand + \@nameuse{rad@\Fld@name}}}}% + \def\z{\expandafter\AtEndDocument\expandafter{\x}}\z + \edef\x{\noexpand\immediate\noexpand\write\noexpand\@auxout + {\y\radioKids{\Fld@name}{\noexpand + \@nameuse{kid@\Fld@name}}}}% + \def\z{\expandafter\AtEndDocument\expandafter{\x}}\z + \fi + \ef@advanceRadioIndex{\Fld@name}% + \@nameuse{multigroup@\Fld@name}% + \fi + \@eqAS{Off}\dl@paramlocal \def\@eqDV##1{\def\eq@arg{##1}\ifx\eq@arg\@empty\let\eq@DV\@empty \else\ifpdfmarkup\def\eq@DV{/DV(##1) cvn }\else \def\eq@DV{/DV/##1}\fi\fi}% - \def\@eqV##1{\def\eq@arg{##1}\ifx\eq@arg\@empty - \let\eq@V\@empty\else\def\pmpvV{\pmpv@mrk}\ifpdfmarkup - \def\eq@V{/V(##1) cvn }\else - \def\eq@V{/V/##1}\fi\@eqAS{##1}\fi - \ifefpmpv\let\eq@V\@empty\fi}% + \def\@eqV##1{\Hy@pdfstringfalse\edef\pmpvV{##1}% + \Hy@pdfstringtrue + \edef\eq@arg{##1}% + \if$\eq@arg$\else + \ifpdfmarkup + \edef\eq@V{/V(##1) cvn }\else + \edef\eq@V{/V/##1}\fi + \@eqAS{##1}\fi + \if$\eq@arg$% + \else + \csarg\xdef{OnVal@\Fld@name}{##1}\fi + \ifefpmpv + \gdef\ef@lateWidgetOpts{\if$\pmpvV$\else\def\pmpvV{\pmpv@mrk}\fi}% + \let\eq@V\@empty\else\global\let\ef@lateWidgetOpts\relax\fi + }% \eqf@setDimens{#3}{#4}% \ifpdfmarkup\def\eq@On{(#5) cvn }\else\def\eq@On{/#5}\fi + \def\ef@thisChoice{#5}% \def\eq@Ff{/Ff \FfRadio}\@eqtextFont{ZaDb}% \def\eq@DA{\eq@textFont\space\eq@textSize\space Tf \eq@textColor}% \@eqMK{\eq@R\eq@BC\eq@BG/CA(\symbol@choice)\eq@mkIns}% @@ -1275,7 +1424,7 @@ \ef@sanitize@toks\ef@radiobutton}\egroup \newcommand{\ef@radiobutton}[5][]{\endgroup \mbox{\radio@@Button{#1}{#2}{#3}{#4}{#5}{}{\eq@setWidgetProps - \eq@RadioCheck@driver}{\radioButtonDefaults\every@RadioButton}}} + \eq@Radio@driver}{\radioButtonDefaults\every@RadioButton}}} \def\common@TextFieldCode {% /Subtype/Widget @@ -1433,6 +1582,7 @@ {}{\set@LinkPboxDefaults\every@Link}} \input{\eq@drivercode} \inputCalcOrderJS +\catcode`\$=\ef@CatChngs \endinput %% %% End of file `eforms.sty'. diff --git a/texmf-dist/tex/latex/acrotex/epdfmark.def b/texmf-dist/tex/latex/acrotex/epdfmark.def index 7e5a8068..1f1e04ad 100644 --- a/texmf-dist/tex/latex/acrotex/epdfmark.def +++ b/texmf-dist/tex/latex/acrotex/epdfmark.def @@ -20,6 +20,13 @@ \def\Rect#1{\pdf@rect{\textcolor{\@linkcolor}{#1}}} \def\noPeek#1#2{\literalps@out{% \AEB@psMrk{ThisPage} << \noPeekAction{#1}{#2} >> /PUT pdfmark}} +\def\ef@getobjdef{% + \HyField@AdvanceAnnotCount + \ifisCalculate\edef\eq@objdefName{\Fld@name}\else + \ifx\eq@objdef\@empty + \edef\eq@objdefName{\annot@type\HyField@TheAnnotCount}\fi\fi + \edef\eq@objdef{/_objdef \string{\eq@objdefName\string}}% +} \def\eq@choice@driver {% \Hy@pdfstringtrue @@ -27,13 +34,14 @@ \let\W@temp\eq@rectW\edef\eq@rectW{\eq@rectH}% \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi + \ef@getobjdef \pdf@rect{\lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}}% \literalps@out{\AEB@psMrk - \ifisCalculate/_objdef {\Fld@name}\else\eq@objdef\fi - /Rect [pdf@llx pdf@lly pdf@urx pdf@ury] - \common@choiceCode - /ANN pdfmark - \ifisCalculate\AEB@psMrk{corder} {\Fld@name} /APPEND pdfmark\fi + \eq@objdef/Rect [pdf@llx pdf@lly pdf@urx pdf@ury] + \common@choiceCode + /ANN pdfmark + \AEB@psMrk{afields} {\eq@objdefName} /APPEND pdfmark + \ifisCalculate\AEB@psMrk{corder} {\Fld@name} /APPEND pdfmark\fi }\to@insertStrucTabOrder{Form}\endgroup \dl@restorespcs } @@ -44,35 +52,104 @@ \ifx\@vertRotate\ef@One\let\W@temp\eq@rectW\edef\eq@rectW{\eq@rectH}% \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi + \ef@getobjdef \pdf@rect{\lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}}% \literalps@out{\AEB@psMrk \eq@objdef/Rect [pdf@llx pdf@lly pdf@urx pdf@ury] - \common@pushButtonCode - /ANN pdfmark}\to@insertStrucTabOrder{Form}\endgroup + \common@pushButtonCode + /ANN pdfmark + \AEB@psMrk{afields} {\eq@objdefName} /APPEND pdfmark + }\to@insertStrucTabOrder{Form}\endgroup \dl@restorespcs } -\def\eq@RadioCheck@driver +\def\parentRef#1#2{\csarg\gdef{parent@#1}{#2}} +\def\ef@radioData#1#2{\immediate + \write\@mainaux{\string\parentRef{#1}{#2}}} +\def\eq@Radio@driver {% \Hy@pdfstringtrue \ifx\@vertRotate\ef@One \let\W@temp\eq@rectW\edef\eq@rectW{\eq@rectH}% \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi + \ef@getobjdef + \ifuseNewRadios + \ifx\isRadioParent\ef@YES\expandafter + \ifx\csname radio@\Fld@name\endcsname\relax\else + \literalps@out{\AEB@psMrk + /_objdef{parent@rad\HyField@TheAnnotCount} + /type/dict/OBJ pdfmark + \AEB@psMrk{parent@rad\HyField@TheAnnotCount} + << \radio@parent\space >>/PUT pdfmark + }\ef@radioData{\Fld@name}{{parent@rad\HyField@TheAnnotCount}}% + \ifx\eq@V\@empty\else + \csarg\xdef{value@\Fld@name}% + {\@nameuse{OnVal@\Fld@name}}% + \fi + \fi + \ifx\ef@multigroupradios\ef@YES + \csarg\gdef{multigroup@\Fld@name}% + {\let\ef@multigroupradios\ef@YES}% + \else + \csarg\gdef{multigroup@\Fld@name}% + {\let\ef@multigroupradios\ef@NO}% + \fi + \ifx\isRadiosInUnison\ef@YES + \csarg\gdef{uniradios@\Fld@name}% + {\let\isRadiosInUnison\ef@YES}% + \else + \csarg\gdef{uniradios@\Fld@name}% + {\let\isRadiosInUnison\ef@NO}% + \fi + \fi + \fi + \ef@NewRadiosLateOpts \ifx\eq@rectW\@empty\def\eq@rectW{\wd\eq@tmpbox}\fi \pdf@rect{\lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}}% \literalps@out{\AEB@psMrk \eq@objdef/Rect [pdf@llx pdf@lly pdf@urx pdf@ury] - \common@RadioCheckCode - /ANN pdfmark}\to@insertStrucTabOrder{Form}\endgroup + \common@RadioCode + /ANN pdfmark + \ifuseNewRadios\else + \AEB@psMrk{afields} {\eq@objdefName} /APPEND pdfmark + \fi + }\to@insertStrucTabOrder{Form}% + \ifuseNewRadios + \edef\x{\noexpand\g@addto@macro\noexpand + \ef@KidsArray{{\eq@objdefName}\space}}\x + \csarg\xdef{kid@\Fld@name}{\ef@KidsArray}% + \fi + \endgroup + \dl@restorespcs +} +\def\eq@Check@driver +{% + \Hy@pdfstringtrue + \ifx\@vertRotate\ef@One + \let\W@temp\eq@rectW\edef\eq@rectW{\eq@rectH}% + \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH + \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi + \ef@getobjdef + \ifx\eq@rectW\@empty\def\eq@rectW{\wd\eq@tmpbox}\fi + \pdf@rect{\lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}}% + \literalps@out{\AEB@psMrk + \eq@objdef/Rect [pdf@llx pdf@lly pdf@urx pdf@ury] + \common@CheckCode + /ANN pdfmark + \AEB@psMrk{afields} {\eq@objdefName} /APPEND pdfmark + }\to@insertStrucTabOrder{Form}\endgroup \dl@restorespcs } \def\eq@l@check@driver {% + \ef@getobjdef \pdf@rect{\makebox[\eq@tmpdima]{\phantom{\link@@Content}}}% \literalps@out{\AEB@psMrk \eq@objdef/Rect [pdf@llx pdf@lly pdf@urx pdf@ury] - \common@RadioCheckCode - /ANN pdfmark}\endgroup + \common@CheckCode + /ANN pdfmark + \AEB@psMrk{afields} {\eq@objdefName} /APPEND pdfmark + }\endgroup \dl@restorespcs } \def\eq@TextField{\Hy@pdfstringtrue @@ -80,13 +157,14 @@ \let\W@temp\eq@rectW\edef\eq@rectW{\eq@rectH}% \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi + \ef@getobjdef \pdf@rect{\lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}}% \literalps@out{\AEB@psMrk - \ifisCalculate/_objdef {\Fld@name}\else\eq@objdef\fi - /Rect [pdf@llx pdf@lly pdf@urx pdf@ury] - \common@TextFieldCode - /ANN pdfmark - \ifisCalculate\AEB@psMrk{corder} {\Fld@name} /APPEND pdfmark\fi + \eq@objdef/Rect [pdf@llx pdf@lly pdf@urx pdf@ury] + \common@TextFieldCode + /ANN pdfmark + \AEB@psMrk{afields} {\eq@objdefName} /APPEND pdfmark + \ifisCalculate\AEB@psMrk{corder} {\Fld@name} /APPEND pdfmark\fi }\to@insertStrucTabOrder{Form}\endgroup \dl@restorespcs } @@ -95,11 +173,13 @@ \let\W@temp\eq@rectW\edef\eq@rectW{\eq@rectH}% \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi + \ef@getobjdef \pdf@rect{\lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}}% \literalps@out{\AEB@psMrk \eq@objdef/Rect [pdf@llx pdf@lly pdf@urx pdf@ury] - \common@SigFieldCode - /ANN pdfmark + \common@SigFieldCode + /ANN pdfmark + \AEB@psMrk{afields} {\eq@objdefName} /APPEND pdfmark }\to@insertStrucTabOrder{Form}\endgroup \dl@restorespcs } diff --git a/texmf-dist/tex/latex/acrotex/epdftex.def b/texmf-dist/tex/latex/acrotex/epdftex.def index d235584d..7022a519 100644 --- a/texmf-dist/tex/latex/acrotex/epdftex.def +++ b/texmf-dist/tex/latex/acrotex/epdftex.def @@ -52,10 +52,60 @@ \ifx\eq@rectW\@empty\def\eq@rectW{\wd\eq@tmpbox}\fi \hbox{\pdfstartlink user{\common@pushButtonCode}% \lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}\pdfendlink}% + \HyField@AddToFields \endgroup \dl@restorespcs } -\def\eq@RadioCheck@driver +\def\parentRef#1#2{\csarg\gdef{parent@#1}{#2 0 R}} +\def\ef@radioData#1#2{\expandafter + \HyField@@AddToFields\expandafter{#2}% + \immediate\write\@mainaux{\string\parentRef{#1}{#2}}} +\def\eq@Radio@driver{\Hy@pdfstringtrue + \ifx\@vertRotate\ef@One + \let\W@temp\eq@rectW\edef\eq@rectW{\eq@rectH}% + \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH + \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi + \ifuseNewRadios + \ifx\isRadioParent\ef@YES\expandafter + \ifx\csname radio@\Fld@name\endcsname\relax\else + \immediate\pdfobj{<< \radio@parent\space >>}% + \ef@radioData{\Fld@name}{\the\pdflastobj}% + \ifx\eq@V\@empty\else + \csarg\xdef{value@\Fld@name}% + {\@nameuse{OnVal@\Fld@name}}% + \fi + \fi + \ifx\ef@multigroupradios\ef@YES + \csarg\gdef{multigroup@\Fld@name}% + {\let\ef@multigroupradios\ef@YES}% + \else + \csarg\gdef{multigroup@\Fld@name}% + {\let\ef@multigroupradios\ef@NO}% + \fi + \ifx\isRadiosInUnison\ef@YES + \csarg\gdef{uniradios@\Fld@name}% + {\let\isRadiosInUnison\ef@YES}% + \else + \csarg\gdef{uniradios@\Fld@name}% + {\let\isRadiosInUnison\ef@NO}% + \fi + \fi + \fi + \ef@NewRadiosLateOpts + \ifx\eq@rectW\@empty\def\eq@rectW{\wd\eq@tmpbox}\fi + \hbox{\pdfstartlink user{\common@RadioCode}% + \lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}\pdfendlink}% + \ifuseNewRadios + \edef\x{\noexpand\g@addto@macro\noexpand + \ef@KidsArray{\the\pdflastlink\space 0 R\space}}\x + \csarg\xdef{kid@\Fld@name}{\ef@KidsArray}% + \else + \HyField@AddToFields + \fi + \endgroup + \dl@restorespcs +} +\def\eq@Check@driver {% \Hy@pdfstringtrue \ifx\@vertRotate\ef@One @@ -63,16 +113,17 @@ \edef\eq@rectH{\W@temp}\fi\centerWidget\eq@rectH \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi \ifx\eq@rectW\@empty\def\eq@rectW{\wd\eq@tmpbox}\fi - \hbox{\pdfstartlink user{\common@RadioCheckCode}% + \hbox{\pdfstartlink user{\common@CheckCode}% \lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}\pdfendlink}% + \HyField@AddToFields \endgroup \dl@restorespcs } \def\eq@l@check@driver {% - \pdfstartlink user{\common@RadioCheckCode}% + \pdfstartlink user{\common@CheckCode}% \makebox[\eq@tmpdima]{\phantom{\link@@Content}}% - \pdfendlink\endgroup + \pdfendlink\HyField@AddToFields\endgroup \dl@restorespcs } \def\eq@TextField{\Hy@pdfstringtrue @@ -94,6 +145,7 @@ \ifx\autoCenter\ef@n\eqcenterWidget=0pt\fi \leavevmode\hbox{\pdfstartlink user{\common@SigFieldCode}% \lower\eqcenterWidget\ef@Bbox{\eq@rectW}{\eq@rectH}\pdfendlink}% + \HyField@AddToFields \endgroup \dl@restorespcs } diff --git a/texmf-dist/tex/latex/acrotex/eqbr.def b/texmf-dist/tex/latex/acrotex/eqbr.def index 4eac309c..0005db49 100644 --- a/texmf-dist/tex/latex/acrotex/eqbr.def +++ b/texmf-dist/tex/latex/acrotex/eqbr.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% diff --git a/texmf-dist/tex/latex/acrotex/eqcat.def b/texmf-dist/tex/latex/acrotex/eqcat.def index 833a2e4a..fcb19511 100644 --- a/texmf-dist/tex/latex/acrotex/eqcat.def +++ b/texmf-dist/tex/latex/acrotex/eqcat.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% diff --git a/texmf-dist/tex/latex/acrotex/eqcolor.def b/texmf-dist/tex/latex/acrotex/eqcolor.def index 08548987..4fcc59ef 100644 --- a/texmf-dist/tex/latex/acrotex/eqcolor.def +++ b/texmf-dist/tex/latex/acrotex/eqcolor.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% diff --git a/texmf-dist/tex/latex/acrotex/eqcz.def b/texmf-dist/tex/latex/acrotex/eqcz.def index 60100616..d17dfdc6 100644 --- a/texmf-dist/tex/latex/acrotex/eqcz.def +++ b/texmf-dist/tex/latex/acrotex/eqcz.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% diff --git a/texmf-dist/tex/latex/acrotex/eqda.def b/texmf-dist/tex/latex/acrotex/eqda.def index 516dbb0a..f756884f 100644 --- a/texmf-dist/tex/latex/acrotex/eqda.def +++ b/texmf-dist/tex/latex/acrotex/eqda.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% diff --git a/texmf-dist/tex/latex/acrotex/eqde.def b/texmf-dist/tex/latex/acrotex/eqde.def index 58c58620..7d71b8bd 100644 --- a/texmf-dist/tex/latex/acrotex/eqde.def +++ b/texmf-dist/tex/latex/acrotex/eqde.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% diff --git a/texmf-dist/tex/latex/acrotex/eqes.def b/texmf-dist/tex/latex/acrotex/eqes.def index eee11979..5b228600 100644 --- a/texmf-dist/tex/latex/acrotex/eqes.def +++ b/texmf-dist/tex/latex/acrotex/eqes.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% diff --git a/texmf-dist/tex/latex/acrotex/eqexam.def b/texmf-dist/tex/latex/acrotex/eqexam.def index 1cdf0433..505fba81 100644 --- a/texmf-dist/tex/latex/acrotex/eqexam.def +++ b/texmf-dist/tex/latex/acrotex/eqexam.def @@ -7,7 +7,7 @@ %% exerquiz.dtx (with options: `eqexam') %% \ProvidesFile{eqexam.def} - [2019/02/11 v8.2.9 % + [2019/08/13 v8.3 % Exerquiz support file for eqexam (dps)] \let\eq@YES=y \let\eq@NO=n \let\eq@One=1 \let\eq@Zero=0 diff --git a/texmf-dist/tex/latex/acrotex/eqfin.def b/texmf-dist/tex/latex/acrotex/eqfin.def index 0b30e6a9..3c5f874c 100644 --- a/texmf-dist/tex/latex/acrotex/eqfin.def +++ b/texmf-dist/tex/latex/acrotex/eqfin.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% diff --git a/texmf-dist/tex/latex/acrotex/eqfr.def b/texmf-dist/tex/latex/acrotex/eqfr.def index fc4dbd96..94a24e8b 100644 --- a/texmf-dist/tex/latex/acrotex/eqfr.def +++ b/texmf-dist/tex/latex/acrotex/eqfr.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% diff --git a/texmf-dist/tex/latex/acrotex/eqit.def b/texmf-dist/tex/latex/acrotex/eqit.def index 779dc46a..7de47010 100644 --- a/texmf-dist/tex/latex/acrotex/eqit.def +++ b/texmf-dist/tex/latex/acrotex/eqit.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% diff --git a/texmf-dist/tex/latex/acrotex/eqnl.def b/texmf-dist/tex/latex/acrotex/eqnl.def index d9a69c2b..dc09dc2a 100644 --- a/texmf-dist/tex/latex/acrotex/eqnl.def +++ b/texmf-dist/tex/latex/acrotex/eqnl.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% diff --git a/texmf-dist/tex/latex/acrotex/eqno.def b/texmf-dist/tex/latex/acrotex/eqno.def index ec415737..db617a72 100644 --- a/texmf-dist/tex/latex/acrotex/eqno.def +++ b/texmf-dist/tex/latex/acrotex/eqno.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% diff --git a/texmf-dist/tex/latex/acrotex/eqpo.def b/texmf-dist/tex/latex/acrotex/eqpo.def index 8e323a98..e71a7fc5 100644 --- a/texmf-dist/tex/latex/acrotex/eqpo.def +++ b/texmf-dist/tex/latex/acrotex/eqpo.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% diff --git a/texmf-dist/tex/latex/acrotex/eqru.def b/texmf-dist/tex/latex/acrotex/eqru.def index 094b31e4..944eeb4c 100644 --- a/texmf-dist/tex/latex/acrotex/eqru.def +++ b/texmf-dist/tex/latex/acrotex/eqru.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% diff --git a/texmf-dist/tex/latex/acrotex/eqtr.def b/texmf-dist/tex/latex/acrotex/eqtr.def index 7dc32f92..b2cfd4ec 100644 --- a/texmf-dist/tex/latex/acrotex/eqtr.def +++ b/texmf-dist/tex/latex/acrotex/eqtr.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% diff --git a/texmf-dist/tex/latex/acrotex/exerquiz.sty b/texmf-dist/tex/latex/acrotex/exerquiz.sty index c25de9ca..a9c14748 100644 --- a/texmf-dist/tex/latex/acrotex/exerquiz.sty +++ b/texmf-dist/tex/latex/acrotex/exerquiz.sty @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% @@ -19,7 +19,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{exerquiz} - [2019/02/11 v8.2.9 % + [2019/08/13 v8.3 % Exerquiz: Exercises and Quizzes for LaTeX/PDF package (dps)] \usepackage{keyval} \RequirePackage{ifpdf}[2006/02/20] @@ -1702,27 +1702,31 @@ } \let\isQZ=q \let\isSQZ=s \def\sq@IDTxtField{\makebox[0pt][l]{\textField[\autoCenter{n}\BC{}\BG{} - \S{S}\textSize{0}\Ff{\FfReadOnly} - \AA{\AAFormat{% - var \oField=new Object;\r - \oField.Grp={}; - \ifx\defaultColorJSLoc\@empty\else\r - \oField.DefaultColorJSLoc=\defaultColorJSLoc;\fi - \ifx\rghtColorJSLoc\@empty\else\r - \oField.RightColorJSLoc=\rghtColorJSLoc;\fi - \ifx\wrngColorJSLoc\@empty\else\r - \oField.WrongColorJSLoc=\wrngColorJSLoc;\fi - \ifx\rghtAnsSymbJSLoc\@empty\else\r - \oField.RightAnsSymbJSLoc=\rghtAnsSymbJSLoc;\fi - \ifx\wrngAnsSymbJSLoc\@empty\else\r - \oField.WrongAnsSymbJSLoc=\wrngAnsSymbJSLoc;\fi - }}]{sqID\oField}{2bp}{2bp}}% + \S{S}\textSize{0}\Ff{\FfReadOnly} + \AA{\AAFormat{% + if (typeof \oField=="undefined")\r\t + var \oField=new Object;\r + \oField.Grp={}; + \ifx\defaultColorJSLoc\@empty\else\r + \oField.DefaultColorJSLoc=\defaultColorJSLoc;\fi + \ifx\rghtColorJSLoc\@empty\else\r + \oField.RightColorJSLoc=\rghtColorJSLoc;\fi + \ifx\wrngColorJSLoc\@empty\else\r + \oField.WrongColorJSLoc=\wrngColorJSLoc;\fi + \ifx\rghtAnsSymbJSLoc\@empty\else\r + \oField.RightAnsSymbJSLoc=\rghtAnsSymbJSLoc;\fi + \ifx\wrngAnsSymbJSLoc\@empty\else\r + \oField.WrongAnsSymbJSLoc=\wrngAnsSymbJSLoc;\fi +}}]{sqID\oField}{2bp}{2bp}}% } \def\qz@IDTxtField{\makebox[0pt][l]{\textField[\autoCenter{n}\BC{}\BG{} \S{S}\textSize{0}\Ff{\FfReadOnly} \AA{\AAFormat{if(typeof aQuizzesInDoc=="undefined")\r\t var aQuizzesInDoc=new Array();\r - if (aQuizzesInDoc.indexOf("\oField")) aQuizzesInDoc.push("\oField"); + if (aQuizzesInDoc.indexOf("\oField")) + aQuizzesInDoc.push("\oField");\r + if (typeof \oField=="undefined")\r\t + var \oField=new Object;\r }}]{qzID\oField}{2bp}{2bp}}} \let\eqQuizType\relax \def\@@shortquiz[#1]{%\begingroup @@ -2214,7 +2218,7 @@ \mbox{\check@@Box{#1\V{Yes}\DV{Yes}}% {rbmarkup.\Fld@name}% {\RadioFieldSize}{\RadioFieldSize}{Yes}{}% - {\eq@setWidgetProps\eq@RadioCheck@driver}% + {\eq@setWidgetProps\eq@Check@driver}% {\rbMarkup@Defaults\every@CheckBox\every@rbMarkup}}}% \newcommand\minQuizResp{lowThreshold} \newcommand\PTs{\@ifstar{\def\eq@star{*}\@PTs}{\def\eq@star{x}\@PTs}} @@ -2316,7 +2320,7 @@ \global\let\eqOutOf\eq@OutOf} \def\DeclareQuiz#1{\edef\oField{#1}% \edef\thisQuiz{#1}\edef\curr@quiz{#1}% - \edef\currQuiz{#1}\edef\curr@quiz{#1}} + \edef\currQuiz{#1}} \let\Quiz\DeclareQuiz \def\aeb@noindgobble{\noindent\@gobbletwo} \let\startQuizHere\relax @@ -2632,7 +2636,7 @@ \def\@@Ans@sq@f@Defaults {% \BC{0 0 0}\Ff{\FfNoToggleToOff}\W{1} - \F{\FPrint}\textSize{12}\textColor{0 g} + \textSize{12}\textColor{0 g} } \def\sqTurnOffAlerts{\let\@sqTurnOffAlerts\eq@Zero} \def\sqTurnOnAlerts{\let\@sqTurnOffAlerts\eq@One} @@ -2712,12 +2716,12 @@ \hangindent=\eq@tmplength\hangafter=1\relax \insertGrayLetters % 6.3d \mbox{\expandafter\radio@@Button\expandafter{\rbf@Opts}% - {mc.\oField.\thequestionno}% - {\RadioFieldSize}% 11/16/05 changed from \oField to mc.\oField - {\RadioFieldSize}{\Ans@choice\alph{quizno}}{\eq@protect\A}% - {\eq@setWidgetProps\eq@RadioCheck@driver}% - {\@@Ans@sq@f@Defaults\Ans@sq@f@Actions\every@RadioButton - \every@sqRadioButton}}% + {mc.\oField.\thequestionno}% + {\RadioFieldSize}{\RadioFieldSize}% + {\Ans@choice\alph{quizno}}{\eq@protect\A}% + {\eq@setWidgetProps\eq@Radio@driver}% + {\@@Ans@sq@f@Defaults\Ans@sq@f@Actions\every@RadioButton + \every@sqRadioButton}}% \Ans@proofing{\RadioFieldSize}% \eq@hspanner\ignorespaces} \def\@@Ans@ck@sq@f@Defaults @@ -2789,7 +2793,7 @@ {mc.\oField.\thequestionno.\arabic{quizno}}% {\RadioFieldSize}{\RadioFieldSize} {\Ans@choice\alph{quizno}}{\eq@protect\A}% - {\eq@setWidgetProps\eq@RadioCheck@driver}% + {\eq@setWidgetProps\eq@Check@driver}% {\@@Ans@ck@sq@f@Defaults\Ans@ck@sq@f@Actions\every@CheckBox \every@sqCheckBox}}% \Ans@proofing{\RadioFieldSize}% @@ -3094,7 +3098,7 @@ if (_bOK) {\jsR\jsT \mbox{\expandafter\radio@@Button\expandafter{\rbf@Opts}% {mc.\curr@quiz.\thequestionno}% {\RadioFieldSize}{\RadioFieldSize}{\Ans@choice\alph{quizno}}% - {\eq@protect\A}{\eq@setWidgetProps\eq@RadioCheck@driver}% + {\eq@protect\A}{\eq@setWidgetProps\eq@Radio@driver}% {\Ans@r@f@Defaults\Ans@r@f@Actions\every@RadioButton \every@qRadioButton\insert@circlesymbol}}% \let\late@options\@empty @@ -3124,7 +3128,7 @@ if (_bOK) {\jsR\jsT \makebox[0pt][r]{\check@@Box{}% {mcq.\curr@quiz.\thequestionno.\arabic{quizno}}% {\RadioFieldSize}{\RadioFieldSize}{Yes}{}% - {\eq@setWidgetProps\eq@RadioCheck@driver}% + {\eq@setWidgetProps\eq@Check@driver}% {\Ans@c@f@Defaults\Ans@c@f@Choice\every@CheckBox \every@qCheckBox\late@options}}% \fi @@ -3172,7 +3176,7 @@ if (_bOK) {\jsR\jsT \mbox{\expandafter\check@@Box\expandafter{\cbf@Opts}% {mck.\curr@quiz.\thequestionno.\arabic{quizno}}% {\RadioFieldSize}{\RadioFieldSize}{\Ans@choice\alph{quizno}}% - {\eq@protect\A}{\eq@setWidgetProps\eq@RadioCheck@driver}% + {\eq@protect\A}{\eq@setWidgetProps\eq@Check@driver}% {\Ans@ck@f@Defaults\Ans@ck@f@Actions\every@RadioButton \every@qckCheckbox}}% \ifnocorrections\else @@ -3201,7 +3205,7 @@ if (_bOK) {\jsR\jsT \makebox[0pt][r]{\check@@Box{}% {mcq.\curr@quiz.\thequestionno.\arabic{quizno}}% {\RadioFieldSize}{\RadioFieldSize}{Yes}{}% - {\eq@setWidgetProps\eq@RadioCheck@driver}% + {\eq@setWidgetProps\eq@Check@driver}% {\Ans@c@f@Defaults\Ans@c@f@Choice\every@CheckBox \every@qCheckBox\late@options}}% \fi @@ -4039,10 +4043,10 @@ if (!isQuizInitialized("@currQuiz")) { \AAKeystroke{% if(event.willCommit){\jsR\jsT RecordPointValue(\eqPTs,\thequestionno);\jsR\jsT - RecordProblemType("\eqQT",\thequestionno);\jsR\jsT + RecordProblemType("\eqQT",\thequestionno);\jsR %\jsT }\jsR if (!isQuizInitialized("\curr@quiz")) {\jsR\jsT - @eqObjAlert\space eqAppAlert(% + \eqObjAlert\space eqAppAlert(% InitMsg("\bqlabelISO"),3);\jsR\jsT event.rc = false;\jsR }% @@ -4050,14 +4054,23 @@ if (!isQuizInitialized("@currQuiz")) { \fi } } -\newcommand\RespBoxEssay[3][] +\newcommand\RespBoxEssay[1][]{\def\rbe@rgi{#1}\RespBoxEssay@i} +\def\RespBoxEssay@i{\@ifnextchar[%] + {\RespBoxEssay@ii} + {\@ifstar{\RespBoxEssay@ii[\curr@quiz.\thequestionno]}}% + {\RespBoxEssay@ii[]}% +} +\newcommand\RespBoxEssay@ii[3][] {% \smallskip\addtocounter{eqpointvalue}{\eqPTs}% + \eq@AddProbToQzQuesList \stepcounter{questionno}% - \mbox{\text@@Field{#1}{essay.\curr@quiz.\thequestionno}{#2}{#3}% + \xdef\@qzsolndest{#1}% \edef\eqtmp{\aPointType}\xdef\aPointType{\eqtmp,[\eqPTs,"essay"]}% - {\eq@protect\AA}{\eq@setWidgetProps\@@RespBoxEssayActions - \eq@TextField}{\RespBoxEssayDefaults\every@eqTextField}}% + \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}}% } \let\@@sqTallyBoxActions\@empty \@ifundefined{calcOrder}{% @@ -4414,8 +4427,8 @@ if (!isQuizInitialized("@currQuiz")) { \let\eqQzQuesList\@empty \def\eq@AddProbToQzQuesList{% \edef\eq@tmpExp{\noexpand\g@addto@macro% - \noexpand\eqQzQuesList{% - \noexpand\@eqListExp{\@currentQues}{\thepage}}}% + \noexpand\eqQzQuesList{\string + \@eqListExp{\@currentQues}{\the\c@page}}}% \ifx\grpquestions\eq@Zero\eq@tmpExp\fi } \LangRedefinitions diff --git a/texmf-dist/tex/latex/acrotex/insdljs.sty b/texmf-dist/tex/latex/acrotex/insdljs.sty index 3babe3d7..cf7089b5 100644 --- a/texmf-dist/tex/latex/acrotex/insdljs.sty +++ b/texmf-dist/tex/latex/acrotex/insdljs.sty @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% insdljs.sty package, %% -%% Copyright (C) 2001-2018 D. P. Story %% +%% Copyright (C) 2001-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% @@ -19,7 +19,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{insdljs} - [2019/03/16 v2.4.2 Insert Document Level JavaScripts (dps)] + [2019/08/06 v2.4.6 Insert Document Level JavaScripts (dps)] \usepackage{xkeyval} \RequirePackage{ifpdf}[2006/02/20] \RequirePackage{ifxetex}[2006/08/21] @@ -46,8 +46,10 @@ \let\dljspresent\dl@NO \DeclareOptionX{debug}{\let\dljs@debug\dl@YES} \let\dljs@debug\dl@NO -\DeclareOptionX{execJS}{\let\execjs\dl@YES} -\let\execjs\dl@NO +\DeclareOptionX{execJS}{\execJSOn} +\def\execJSOn{\let\execjs\dl@YES} +\def\execJSOff{\let\execjs\dl@NO} +\execJSOff \DeclareOptionX{nopro}{\let\dl@gopro\dl@NO} \let\dl@gopro\dl@YES \@ifpackageloaded{web}{% @@ -65,11 +67,12 @@ \DeclareOptionX{reqjs}{\let\dl@reqJS\dl@YES} \let\dljs@reqJS\dl@YES \DeclareOptionX{!reqjs}{\let\dl@reqJS\dl@NO} -\DeclareOptionX{usealtadobe}{\def\inputAltAdbFncs{% - \InputIfFileExists{altadbfncs.def}% - {\PackageInfo{insdljs}{Inputting code for usealtadobe option}}% +\DeclareOptionX{usealtadobe}{\let\usedAdbFuncs\dl@YES + \def\inputAltAdbFncs{\InputIfFileExists{altadbfncs.def} + {\PackageInfo{insdljs}{Inputting code for usealtadobe option}} {\PackageWarning{insdljs}{Cannot find altadbfncs.def.\MessageBreak Reinstall or refresh your file name database.}}}} +\let\usedAdbFuncs\dl@NO \let\inputAltAdbFncs\relax \ProcessOptionsX \edef\dl@dquoteCat{\the\catcode`\"} @@ -129,7 +132,8 @@ \ifnum\dljs@drivernum=1\relax \RequirePackage{everyshi} \fi -\def\AEB@psMrk{[\space} +\def\AEB@psMrk{[%] + \space} \ifx\dl@reqJS\dl@YES \def\dl@@reqJS{/Type/Requirement/S/EnableJavaScripts} \ifpdf\pdfcatalog{\dl@@reqJS}\else @@ -343,9 +347,9 @@ \global\let\aebpFA\dl@YES \let\@pdfstartview\@empty \else - \edef\aebp@dljstmp{\aebp@rightDelimiters}% - \xdef\aebp@rightDelimiters{\aebp@dljstmp >> }% - \g@addto@macro\aebpopentoks{/Next << #1 }% + \edef\aebp@dljstmp{\aebp@rightDelimiters}% + \xdef\aebp@rightDelimiters{\aebp@dljstmp >> }% + \g@addto@macro\aebpopentoks{/Next << #1 }% \fi } \def\dljs@OpenActions{/OpenAction \addActionObj} @@ -552,10 +556,9 @@ \endgroup \def\ckivspace#1{\if\noexpand#1\space\else\expandafter#1\fi} \let\DLspecialDefs\@empty -\def\fdfAfterheader -{% +\def\fdfAfterheader#1{% \iwvo{\string\begingroup\string\efdlspecials} - \iwvo{\string\DLspecialDefs} + \iwvo{\string\DLspecialDefs\string#1} \iwvo{\string\isdljstrue} \iwvo{\string\makeatletter} \iwvo{\string\immediate\string\openout\string @@ -576,9 +579,11 @@ \iwvo{<<>>} \iwvo{stream} } -\newenvironment{execJS}[1] +\def\restoreDLspecialDefs{\let\DLspecialDefs\@empty} +\newenvironment{execJS}[2][\relax] {% - \gdef\detectdljs{\string_#1}\gdef\dljsBase{#1}% + \def\x{#1}\ifx\x\@empty\def\x{\relax}\fi + \gdef\detectdljs{\string_#2}\gdef\dljsBase{#2}% \global\dljsobjtoks={}% \expandafter\gdef\csname dljs\dljsBase\endcsname{}% \ifx\importdljs\dl@YES\ifx\execjs\dl@YES @@ -590,12 +595,13 @@ \fi\fi \fi\fi \immediate\openout \js@verbatim@out \js@Path\dljsBase.djs - \fdfAfterheader + \expandafter\fdfAfterheader\expandafter{\x}% \js@verbatimwrite }{% \fdfendstreamobj \endjs@verbatimwrite \fdftrailer + \iwvo{\string\restoreDLspecialDefs}% \closejs@verbatim@out \expandafter\xdef\csname\dljsBase OBJ\endcsname{\the\dljsobjtoks}% \edef\@dljstmp{\noexpand\AtBeginDocument{% @@ -614,8 +620,11 @@ \edef\csname\p@r@m\the\c@dljs@cnt\endcsname{\the\JStoks}}} \def\pdfSpacesOn{\let\pdfSP\pdfSPDef} \def\pdfSpacesOff{\let\pdfSP\dl@sp@ce} +\def\dlcombine(#1)(#2){#1#2} \def\escIs#1{\def\Eschr{#1}} +\def\dl@makeesc#1{\catcode`#1=0\relax} \newenvironment{defineJS}[2][]{% + \let\makeesc\dl@makeesc \expandafter\@ifundefined\expandafter{% \expandafter\@gobble\string#2}{}{% \PackageWarning{insdljs}{The command @@ -632,6 +641,7 @@ \global\let\space\dl@sp@ce\aftergroup\eq@JStemp} \newenvironment{@defineJS}[2][] {% + \let\makeesc\dl@makeesc \gdef\defineJSArg{#2}\JStoks={}% \def\verbatim@processline{% \xdef\JS@temp{\the\JStoks\the\verbatim@line\defineJSjsR}% diff --git a/texmf-dist/tex/latex/acrotex/template.def b/texmf-dist/tex/latex/acrotex/template.def index e6055064..d729a131 100644 --- a/texmf-dist/tex/latex/acrotex/template.def +++ b/texmf-dist/tex/latex/acrotex/template.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% @@ -18,7 +18,7 @@ %% License, or (at your option) any later version. %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ProvidesFile{template.def} - [2019/02/11 v8.2.9 % + [2019/08/13 v8.3 % Exerquiz template for language support (dps)] %%------------- Instructions ------------------------------------ %% Make your language localizations to this file and rename it to diff --git a/texmf-dist/tex/latex/acrotex/usemcfi.def b/texmf-dist/tex/latex/acrotex/usemcfi.def index d9a38acf..7d032b47 100644 --- a/texmf-dist/tex/latex/acrotex/usemcfi.def +++ b/texmf-dist/tex/latex/acrotex/usemcfi.def @@ -8,7 +8,7 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Exerquiz.sty package, %% -%% Copyright (C) 1999-2018 D. P. Story %% +%% Copyright (C) 1999-2019 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% diff --git a/texmf-dist/tex/latex/acrotex/web.sty b/texmf-dist/tex/latex/acrotex/web.sty index 0d0c8f29..15567251 100644 --- a/texmf-dist/tex/latex/acrotex/web.sty +++ b/texmf-dist/tex/latex/acrotex/web.sty @@ -1545,8 +1545,8 @@ } \ifweb@sectioning\expandafter\web@inputsectiondefs\fi \def\aebwritelastpage{% - \immediate\write\@auxout{\string\expandafter\string\gdef - \string\csname\space aebLastPage\string\endcsname{\arabic{page}}}% + \immediate\write\@auxout{% + \string\w@csarg\string\gdef{aebLastPage}{\arabic{page}}}% } \AtEndDocument{% \clearpage\addtocounter{page}{-1}\aebwritelastpage |