From 14ce8b68fe7df49e8a8891bb94c63b9a846da232 Mon Sep 17 00:00:00 2001
From: Norbert Preining
Date: Sun, 29 Sep 2019 03:00:46 +0000
Subject: CTAN sync 201909290300
---
macros/latex/contrib/acrotex/README.md | 5 +-
macros/latex/contrib/acrotex/acrotex.ins | 47 +-
macros/latex/contrib/acrotex/doc/aeb_man.pdf | Bin 1355814 -> 1362922 bytes
macros/latex/contrib/acrotex/doc/aeb_man.tex | 50 +-
macros/latex/contrib/acrotex/doc/eformman.pdf | Bin 989810 -> 995308 bytes
macros/latex/contrib/acrotex/doc/eformman.tex | 99 +-
.../latex/contrib/acrotex/doc/install_jsfiles.pdf | Bin 237391 -> 236764 bytes
macros/latex/contrib/acrotex/eforms.dtx | 602 ++++++-
macros/latex/contrib/acrotex/examples/jquiztst.pdf | Bin 353849 -> 355970 bytes
macros/latex/contrib/acrotex/examples/jquiztst.tex | 4 +-
macros/latex/contrib/acrotex/examples/jtxttst.pdf | Bin 320860 -> 319897 bytes
macros/latex/contrib/acrotex/examples/jtxttst.tex | 81 +-
macros/latex/contrib/acrotex/examples/webeqtst.pdf | Bin 490247 -> 489546 bytes
macros/latex/contrib/acrotex/exerquiz.dtx | 161 +-
macros/latex/contrib/acrotex/insdljs.dtx | 106 +-
macros/latex/contrib/acrotex/web.dtx | 6 +-
macros/latex/contrib/ducksay/ducksay.dtx | 6 +-
macros/latex/contrib/ducksay/ducksay.pdf | Bin 525172 -> 525295 bytes
macros/latex/contrib/duckuments/duckuments.dtx | 37 +-
macros/latex/contrib/duckuments/duckuments.pdf | Bin 494948 -> 494807 bytes
.../duckuments/example-image-duck-portrait.pdf | Bin 274866 -> 272737 bytes
.../contrib/duckuments/example-image-duck.pdf | Bin 283770 -> 278614 bytes
macros/latex/contrib/glossaries/CHANGES | 7 +
macros/latex/contrib/glossaries/README | 4 +-
.../latex/contrib/glossaries/glossaries-code.pdf | Bin 1195352 -> 1197366 bytes
.../latex/contrib/glossaries/glossaries-user.html | 1668 ++++++++++----------
.../latex/contrib/glossaries/glossaries-user.pdf | Bin 893233 -> 891961 bytes
.../latex/contrib/glossaries/glossaries-user.tex | 42 +-
macros/latex/contrib/glossaries/glossaries.dtx | 1100 +++++++------
macros/latex/contrib/glossaries/glossaries.ins | 2 +-
.../latex/contrib/glossaries/glossariesbegin.html | 26 +-
.../latex/contrib/glossaries/glossariesbegin.pdf | Bin 186454 -> 186413 bytes
.../latex/contrib/glossaries/glossariesbegin.tex | 4 +-
.../contrib/glossaries/glossary2glossaries.html | 77 +-
.../contrib/glossaries/glossary2glossaries.pdf | Bin 143132 -> 143123 bytes
.../contrib/glossaries/glossary2glossaries.tex | 2 +-
.../latex/contrib/glossaries/makeglossaries-lite.1 | 2 +-
macros/latex/contrib/glossaries/makeglossaries.1 | 2 +-
.../samples/glossary-lipsum-examples.pdf | Bin 248669 -> 248676 bytes
.../contrib/glossaries/samples/minimalgls.pdf | Bin 49958 -> 49963 bytes
.../contrib/glossaries/samples/minimalgls.tex | 82 +-
.../contrib/glossaries/samples/mwe-acr-desc.pdf | Bin 37957 -> 37969 bytes
.../latex/contrib/glossaries/samples/mwe-acr.pdf | Bin 33649 -> 33661 bytes
.../latex/contrib/glossaries/samples/mwe-gls.pdf | Bin 29939 -> 29951 bytes
.../contrib/glossaries/samples/sample-FnDesc.pdf | Bin 58817 -> 58822 bytes
.../contrib/glossaries/samples/sample-FnDesc.tex | 10 +-
.../glossaries/samples/sample-chap-hyperfirst.pdf | Bin 54822 -> 54828 bytes
.../glossaries/samples/sample-chap-hyperfirst.tex | 20 +-
.../contrib/glossaries/samples/sample-crossref.pdf | Bin 53456 -> 53462 bytes
.../contrib/glossaries/samples/sample-crossref.tex | 10 +-
.../glossaries/samples/sample-custom-acronym.pdf | Bin 82185 -> 82190 bytes
.../glossaries/samples/sample-custom-acronym.tex | 48 +-
.../contrib/glossaries/samples/sample-dot-abbr.pdf | Bin 52796 -> 52806 bytes
.../contrib/glossaries/samples/sample-dot-abbr.tex | 12 +-
.../contrib/glossaries/samples/sample-dual.pdf | Bin 36455 -> 36467 bytes
.../contrib/glossaries/samples/sample-dual.tex | 18 +-
.../glossaries/samples/sample-entrycount.pdf | Bin 36839 -> 36845 bytes
.../glossaries/samples/sample-entrycount.tex | 12 +-
.../contrib/glossaries/samples/sample-entryfmt.pdf | Bin 34904 -> 34909 bytes
.../contrib/glossaries/samples/sample-entryfmt.tex | 10 +-
.../glossaries/samples/sample-font-abbr.pdf | Bin 50703 -> 50715 bytes
.../glossaries/samples/sample-font-abbr.tex | 8 +-
.../contrib/glossaries/samples/sample-ignored.pdf | Bin 31810 -> 31816 bytes
.../contrib/glossaries/samples/sample-ignored.tex | 10 +-
.../contrib/glossaries/samples/sample-index.pdf | Bin 43379 -> 43385 bytes
.../contrib/glossaries/samples/sample-index.tex | 24 +-
.../contrib/glossaries/samples/sample-inline.pdf | Bin 147381 -> 147485 bytes
.../contrib/glossaries/samples/sample-inline.tex | 32 +-
.../contrib/glossaries/samples/sample-langdict.pdf | Bin 38855 -> 38866 bytes
.../contrib/glossaries/samples/sample-langdict.tex | 26 +-
.../contrib/glossaries/samples/sample-newkeys.pdf | Bin 39198 -> 39204 bytes
.../contrib/glossaries/samples/sample-newkeys.tex | 11 +-
.../glossaries/samples/sample-noidxapp-utf8.pdf | Bin 96000 -> 96349 bytes
.../glossaries/samples/sample-noidxapp-utf8.tex | 18 +-
.../contrib/glossaries/samples/sample-noidxapp.pdf | Bin 67077 -> 67085 bytes
.../contrib/glossaries/samples/sample-noidxapp.tex | 17 +-
.../glossaries/samples/sample-nomathhyper.pdf | Bin 41745 -> 41752 bytes
.../glossaries/samples/sample-nomathhyper.tex | 16 +-
.../glossaries/samples/sample-numberlist.pdf | Bin 41979 -> 41985 bytes
.../glossaries/samples/sample-numberlist.tex | 12 +-
.../contrib/glossaries/samples/sample-prefix.pdf | Bin 43259 -> 43266 bytes
.../contrib/glossaries/samples/sample-prefix.tex | 12 +-
.../latex/contrib/glossaries/samples/sample-si.pdf | Bin 21710 -> 21722 bytes
.../latex/contrib/glossaries/samples/sample-si.tex | 10 +-
.../samples/sample-storage-abbr-desc.pdf | Bin 39892 -> 39905 bytes
.../samples/sample-storage-abbr-desc.tex | 14 +-
.../glossaries/samples/sample-storage-abbr.pdf | Bin 37659 -> 37671 bytes
.../glossaries/samples/sample-storage-abbr.tex | 14 +-
macros/latex/contrib/glossaries/samples/sample.pdf | Bin 104265 -> 104381 bytes
macros/latex/contrib/glossaries/samples/sample.tex | 50 +-
.../contrib/glossaries/samples/sample4col.pdf | Bin 43320 -> 43333 bytes
.../contrib/glossaries/samples/sample4col.tex | 10 +-
.../latex/contrib/glossaries/samples/sampleAcr.pdf | Bin 65506 -> 65512 bytes
.../latex/contrib/glossaries/samples/sampleAcr.tex | 14 +-
.../contrib/glossaries/samples/sampleAcrDesc.pdf | Bin 65613 -> 65618 bytes
.../contrib/glossaries/samples/sampleAcrDesc.tex | 28 +-
.../contrib/glossaries/samples/sampleCustomAcr.pdf | Bin 93612 -> 93618 bytes
.../contrib/glossaries/samples/sampleCustomAcr.tex | 52 +-
.../latex/contrib/glossaries/samples/sampleDB.pdf | Bin 47043 -> 47048 bytes
.../latex/contrib/glossaries/samples/sampleDB.tex | 10 +-
.../contrib/glossaries/samples/sampleDesc.pdf | Bin 48396 -> 48402 bytes
.../contrib/glossaries/samples/sampleDesc.tex | 30 +-
.../latex/contrib/glossaries/samples/sampleEq.pdf | Bin 155760 -> 155616 bytes
.../latex/contrib/glossaries/samples/sampleEq.tex | 14 +-
.../contrib/glossaries/samples/sampleEqPg.pdf | Bin 169225 -> 169073 bytes
.../contrib/glossaries/samples/sampleEqPg.tex | 68 +-
.../contrib/glossaries/samples/sampleFnAcrDesc.pdf | Bin 91343 -> 91349 bytes
.../contrib/glossaries/samples/sampleFnAcrDesc.tex | 31 +-
.../latex/contrib/glossaries/samples/sampleNtn.pdf | Bin 99000 -> 99121 bytes
.../latex/contrib/glossaries/samples/sampleNtn.tex | 27 +-
.../contrib/glossaries/samples/samplePeople.pdf | Bin 47459 -> 47465 bytes
.../contrib/glossaries/samples/samplePeople.tex | 16 +-
.../latex/contrib/glossaries/samples/sampleSec.pdf | Bin 65669 -> 65674 bytes
.../latex/contrib/glossaries/samples/sampleSec.tex | 12 +-
.../contrib/glossaries/samples/sampleSort.pdf | Bin 95383 -> 95497 bytes
.../contrib/glossaries/samples/sampleSort.tex | 29 +-
.../contrib/glossaries/samples/sampleaccsupp.pdf | Bin 41155 -> 41167 bytes
.../contrib/glossaries/samples/sampleaccsupp.tex | 11 +-
.../contrib/glossaries/samples/sampleacronyms.pdf | Bin 37201 -> 37213 bytes
.../contrib/glossaries/samples/sampleacronyms.tex | 18 +-
.../contrib/glossaries/samples/sampletree.pdf | Bin 66912 -> 66917 bytes
.../contrib/glossaries/samples/sampletree.tex | 14 +-
.../contrib/glossaries/samples/sampleutf8.pdf | Bin 44939 -> 44951 bytes
.../contrib/glossaries/samples/sampleutf8.tex | 20 +-
.../latex/contrib/glossaries/samples/samplexdy.pdf | Bin 133968 -> 134115 bytes
.../contrib/glossaries/samples/samplexdy2.pdf | Bin 68399 -> 68406 bytes
.../contrib/glossaries/samples/samplexdy2.tex | 40 +-
.../contrib/glossaries/samples/samplexdy3.pdf | Bin 178997 -> 179160 bytes
macros/latex/contrib/poemscol/poemscol.dtx | 33 +-
macros/latex/contrib/poemscol/poemscol.pdf | Bin 711468 -> 711514 bytes
.../latex/contrib/upmethodology/src/UPMVERSION.def | 2 +-
.../contrib/upmethodology/src/upm_caution.pdf | Bin 0 -> 1833 bytes
.../contrib/upmethodology/src/upm_caution.png | Bin 13821 -> 14415 bytes
.../contrib/upmethodology/src/upm_caution.svg | 66 +
.../latex/contrib/upmethodology/src/upm_info.pdf | Bin 0 -> 1967 bytes
.../latex/contrib/upmethodology/src/upm_info.png | Bin 14513 -> 17810 bytes
.../latex/contrib/upmethodology/src/upm_info.svg | 66 +
.../contrib/upmethodology/src/upm_question.pdf | Bin 0 -> 2089 bytes
.../contrib/upmethodology/src/upm_question.png | Bin 15205 -> 17925 bytes
.../contrib/upmethodology/src/upm_question.svg | 66 +
.../upmethodology/src/upmethodology-fmt.sty | 52 +-
141 files changed, 3211 insertions(+), 2154 deletions(-)
create mode 100644 macros/latex/contrib/upmethodology/src/upm_caution.pdf
create mode 100644 macros/latex/contrib/upmethodology/src/upm_caution.svg
create mode 100644 macros/latex/contrib/upmethodology/src/upm_info.pdf
create mode 100644 macros/latex/contrib/upmethodology/src/upm_info.svg
create mode 100644 macros/latex/contrib/upmethodology/src/upm_question.pdf
create mode 100644 macros/latex/contrib/upmethodology/src/upm_question.svg
(limited to 'macros/latex')
diff --git a/macros/latex/contrib/acrotex/README.md b/macros/latex/contrib/acrotex/README.md
index 0ab4acdba4..8e149839d5 100644
--- a/macros/latex/contrib/acrotex/README.md
+++ b/macros/latex/contrib/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/macros/latex/contrib/acrotex/acrotex.ins b/macros/latex/contrib/acrotex/acrotex.ins
index 99459c8a64..3afd02ab57 100644
--- a/macros/latex/contrib/acrotex/acrotex.ins
+++ b/macros/latex/contrib/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/macros/latex/contrib/acrotex/doc/aeb_man.pdf b/macros/latex/contrib/acrotex/doc/aeb_man.pdf
index a9d5a9fc24..794013af9e 100644
Binary files a/macros/latex/contrib/acrotex/doc/aeb_man.pdf and b/macros/latex/contrib/acrotex/doc/aeb_man.pdf differ
diff --git a/macros/latex/contrib/acrotex/doc/aeb_man.tex b/macros/latex/contrib/acrotex/doc/aeb_man.tex
index ecc2638b1a..679358f2e0 100644
--- a/macros/latex/contrib/acrotex/doc/aeb_man.tex
+++ b/macros/latex/contrib/acrotex/doc/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/macros/latex/contrib/acrotex/doc/eformman.pdf b/macros/latex/contrib/acrotex/doc/eformman.pdf
index 7bdd9b3f7d..c3532cfb43 100644
Binary files a/macros/latex/contrib/acrotex/doc/eformman.pdf and b/macros/latex/contrib/acrotex/doc/eformman.pdf differ
diff --git a/macros/latex/contrib/acrotex/doc/eformman.tex b/macros/latex/contrib/acrotex/doc/eformman.tex
index 7538e0a20c..ecfbb3d835 100644
--- a/macros/latex/contrib/acrotex/doc/eformman.tex
+++ b/macros/latex/contrib/acrotex/doc/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{} 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/macros/latex/contrib/acrotex/doc/install_jsfiles.pdf b/macros/latex/contrib/acrotex/doc/install_jsfiles.pdf
index 7b2d3fab78..221ba16fdb 100644
Binary files a/macros/latex/contrib/acrotex/doc/install_jsfiles.pdf and b/macros/latex/contrib/acrotex/doc/install_jsfiles.pdf differ
diff --git a/macros/latex/contrib/acrotex/eforms.dtx b/macros/latex/contrib/acrotex/eforms.dtx
index dcfcbd78cb..d3e63f2950 100644
--- a/macros/latex/contrib/acrotex/eforms.dtx
+++ b/macros/latex/contrib/acrotex/eforms.dtx
@@ -16,7 +16,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)]
%<*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
%
% \end{macrocode}
% \Finale
diff --git a/macros/latex/contrib/acrotex/examples/jquiztst.pdf b/macros/latex/contrib/acrotex/examples/jquiztst.pdf
index 30175b4f39..d000d0ddca 100644
Binary files a/macros/latex/contrib/acrotex/examples/jquiztst.pdf and b/macros/latex/contrib/acrotex/examples/jquiztst.pdf differ
diff --git a/macros/latex/contrib/acrotex/examples/jquiztst.tex b/macros/latex/contrib/acrotex/examples/jquiztst.tex
index 7bb468051a..e6d3a0aa29 100644
--- a/macros/latex/contrib/acrotex/examples/jquiztst.tex
+++ b/macros/latex/contrib/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/macros/latex/contrib/acrotex/examples/jtxttst.pdf b/macros/latex/contrib/acrotex/examples/jtxttst.pdf
index 8638f825f2..298a75f321 100644
Binary files a/macros/latex/contrib/acrotex/examples/jtxttst.pdf and b/macros/latex/contrib/acrotex/examples/jtxttst.pdf differ
diff --git a/macros/latex/contrib/acrotex/examples/jtxttst.tex b/macros/latex/contrib/acrotex/examples/jtxttst.tex
index 2311e2170b..ed7b937fa7 100644
--- a/macros/latex/contrib/acrotex/examples/jtxttst.tex
+++ b/macros/latex/contrib/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
\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/macros/latex/contrib/acrotex/examples/webeqtst.pdf b/macros/latex/contrib/acrotex/examples/webeqtst.pdf
index c3cd409075..17f62734cc 100644
Binary files a/macros/latex/contrib/acrotex/examples/webeqtst.pdf and b/macros/latex/contrib/acrotex/examples/webeqtst.pdf differ
diff --git a/macros/latex/contrib/acrotex/exerquiz.dtx b/macros/latex/contrib/acrotex/exerquiz.dtx
index 5f7dc9305c..b2f61b7870 100644
--- a/macros/latex/contrib/acrotex/exerquiz.dtx
+++ b/macros/latex/contrib/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 @@
%\ProvidesFile{aebrandom.def}
%\ProvidesFile{aebsumrytbls.def}
%\ProvidesFile{template.def}
-% [2019/02/11 v8.2.9 %
+% [2019/08/13 v8.3 %
% Exerquiz: Exercises and Quizzes for LaTeX/PDF package (dps)]
% Exerquiz documentation driver file (dps)]
% 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>
\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|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
%
%<*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|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[]{}...[]{}
+% \RespBoxTxtPC[#1]#2[#3]#4[]{}...[]{}
%\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/macros/latex/contrib/acrotex/insdljs.dtx b/macros/latex/contrib/acrotex/insdljs.dtx
index 204a4b2824..d6bc80b523 100644
--- a/macros/latex/contrib/acrotex/insdljs.dtx
+++ b/macros/latex/contrib/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 @@
%
%\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)]
%<*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/macros/latex/contrib/acrotex/web.dtx b/macros/latex/contrib/acrotex/web.dtx
index 605c2f5226..de0477d519 100644
--- a/macros/latex/contrib/acrotex/web.dtx
+++ b/macros/latex/contrib/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/macros/latex/contrib/ducksay/ducksay.dtx b/macros/latex/contrib/ducksay/ducksay.dtx
index 2f6a8f70c2..a6479e46ff 100644
--- a/macros/latex/contrib/ducksay/ducksay.dtx
+++ b/macros/latex/contrib/ducksay/ducksay.dtx
@@ -202,8 +202,8 @@ and the derived files ducksay.pdf
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{xparse,l3keys2e}
-\def\ducksay@version{2.4}
-\def\ducksay@date{2019-06-11}
+\def\ducksay@version{2.4.1}
+\def\ducksay@date{2019-09-28}
\ProvidesExplPackage
{ducksay} {\ducksay@date}
@@ -1662,7 +1662,7 @@ and the derived files ducksay.pdf
,body-align / r .meta:n = { body-to-msg = r , msg-to-body = r }
,body-align .initial:n = l
,body-bigger .int_set:N = \l_ducksay_body_bigger_int
- ,body-bigger .initial:n = \c_zero
+ ,body-bigger .initial:n = \c_zero_int
,msg-align .choice:
,msg-align / l .code:n = { \tl_set:Nn \l_ducksay_msg_align_tl { l } }
,msg-align / c .code:n = { \tl_set:Nn \l_ducksay_msg_align_tl { c } }
diff --git a/macros/latex/contrib/ducksay/ducksay.pdf b/macros/latex/contrib/ducksay/ducksay.pdf
index fc1444ae24..f92d20fca5 100644
Binary files a/macros/latex/contrib/ducksay/ducksay.pdf and b/macros/latex/contrib/ducksay/ducksay.pdf differ
diff --git a/macros/latex/contrib/duckuments/duckuments.dtx b/macros/latex/contrib/duckuments/duckuments.dtx
index 0460a3f1dc..6359862efc 100644
--- a/macros/latex/contrib/duckuments/duckuments.dtx
+++ b/macros/latex/contrib/duckuments/duckuments.dtx
@@ -61,8 +61,8 @@ and the derived files duckuments.pdf,
%<*driver|pkg>
\RequirePackage{xparse}[2019-05-03]
\RequirePackage{letltxmacro,l3keys2e}
-\def\duckuments@version{0.4d}
-\def\duckuments@date{2019/06/02}
+\def\duckuments@version{0.4e}
+\def\duckuments@date{2019-09-28}
%
%
%<*driver>
@@ -71,6 +71,7 @@ and the derived files duckuments.pdf,
\documentclass{l3doc}
\usepackage{duckuments}
\usepackage{enumitem}
+\usepackage{l3color}
\newenvironment{options}
{\begin{description}[style=nextline,font=\normalfont\ttfamily]}
{\end{description}}
@@ -429,7 +430,7 @@ and the derived files duckuments.pdf,
% Stores the paragraph with which \cs{blindduck} should start.
% \begin{macrocode}
\int_new:N \g_duckuments_blindduck_start_int
-\int_gset:Nn \g_duckuments_blindduck_start_int { \c_one }
+\int_gset:Nn \g_duckuments_blindduck_start_int { \c_one_int }
% \end{macrocode}
% \end{variable}^^A<<<
%
@@ -465,7 +466,7 @@ and the derived files duckuments.pdf,
%
% \begin{variable}{\c_duckuments_blindduck_pars_int}^^A>>>
% \begin{macrocode}
-\int_const:Nn \c_duckuments_blindduck_pars_int { \c_five }
+\int_const:Nn \c_duckuments_blindduck_pars_int { 5 }
% \end{macrocode}
% \end{variable}^^A<<<
%
@@ -476,7 +477,7 @@ and the derived files duckuments.pdf,
\str_if_eq_p:Vn \c_sys_jobname_str { example-image-duck }
|| \str_if_eq_p:Vn \c_sys_jobname_str { example-image-duck-portrait }
}
- { \int_const:Nn \c_duckuments_example_pages_int { 1 } }
+ { \int_const:Nn \c_duckuments_example_pages_int { \c_one_int } }
{
\group_begin:
\sys_if_engine_pdftex:T
@@ -895,16 +896,16 @@ and the derived files duckuments.pdf,
{ >{\duckuments_starred:n}s O{} o m }
{
\IfValueTF { ##3 }
- { \duckuments@includegraphicsBAK##1[##2][##3]{##4} }
+ { \duckuments@includegraphicsBAK##1[{##2}][{##3}]{##4} }
{
\regex_match:NnTF \c_duckuments_example_regex { ##4 }
{
\duckuments@includegraphicsBAK##1
- [page=\duckuments_random_page:,##2]
+ [{page=\duckuments_random_page:,##2}]
{ ##4 }
}
{
- \duckuments@includegraphicsBAK##1[##2]{##4}
+ \duckuments@includegraphicsBAK##1[{##2}]{##4}
}
}
}
@@ -921,7 +922,8 @@ and the derived files duckuments.pdf,
\regex_match:NnTF \c_duckuments_range_regex { #1 }
{
\seq_set_split:Nnn \l_duckuments_range_seq { - } { #1 }
- \int_compare:nNnTF { 1 } = { \seq_count:N \l_duckuments_range_seq }
+ \int_compare:nNnTF
+ { \c_one_int } = { \seq_count:N \l_duckuments_range_seq }
{
\cs_set:Npn \duckuments@blindduck@text
{
@@ -932,13 +934,14 @@ and the derived files duckuments.pdf,
{
\bool_set_true:N \l_duckuments_blindduck_pars_bool
\exp_args:Nx
- \tl_if_empty:nF { \seq_item:Nn \l_duckuments_range_seq { \c_one } }
+ \tl_if_empty:nF
+ { \seq_item:Nn \l_duckuments_range_seq { \c_one_int } }
{
\int_gset:Nn \g_duckuments_blindduck_start_int
- { \seq_item:Nn \l_duckuments_range_seq { \c_one } }
+ { \seq_item:Nn \l_duckuments_range_seq { \c_one_int } }
}
\exp_args:Nx
- \tl_if_empty:nTF { \seq_item:Nn \l_duckuments_range_seq { \c_two } }
+ \tl_if_empty:nTF { \seq_item:Nn \l_duckuments_range_seq { 2 } }
{
\int_gset_eq:NN
\g_duckuments_blindduck_end_int
@@ -946,7 +949,7 @@ and the derived files duckuments.pdf,
}
{
\int_set:Nn \g_duckuments_blindduck_end_int
- { \seq_item:Nn \l_duckuments_range_seq { \c_two } }
+ { \seq_item:Nn \l_duckuments_range_seq { 2 } }
}
\duckuments_blindduck_set_text:xx
{ \int_use:N \g_duckuments_blindduck_start_int }
@@ -968,7 +971,7 @@ and the derived files duckuments.pdf,
{%>>>
\def \duckuments@blindduck@text
{
- \int_step_function:nnnN { #1 } { \c_one } { #2 }
+ \int_step_function:nnnN { #1 } { \c_one_int } { #2 }
\duckuments_blindduck_par_loop:n
\duckuments_blindduck_set_next_start:n { #2 }
}
@@ -982,7 +985,7 @@ and the derived files duckuments.pdf,
\cs_new:Npn \duckuments_blindduck_set_next_start:n #1
{%>>>
\int_gset:Nn \g_duckuments_blindduck_start_int
- { \int_mod:nn { #1 } { \c_duckuments_blindduck_pars_int } + \c_one }
+ { \int_mod:nn { #1 } { \c_duckuments_blindduck_pars_int } + \c_one_int }
}%<<<
% \end{macrocode}
% \end{macro}^^A<<<
@@ -994,7 +997,7 @@ and the derived files duckuments.pdf,
\bool_if:nTF
{
\int_compare_p:nNn { #1 } > { \c_duckuments_blindduck_pars_int }
- || \int_compare_p:nNn { #1 } < { \c_one }
+ || \int_compare_p:nNn { #1 } < { \c_one_int }
}
{
\msg_error:nnxxxx { duckuments } { out~of~range }
@@ -1200,7 +1203,7 @@ and the derived files duckuments.pdf,
% \llap
% {
% \group_begin:
-% \driver_color_gray:n { 0.5 }
+% \color_select:nn { gray } { 0.5 }
% \rlap
% {
% \smash
diff --git a/macros/latex/contrib/duckuments/duckuments.pdf b/macros/latex/contrib/duckuments/duckuments.pdf
index 0edc456889..02bce56712 100644
Binary files a/macros/latex/contrib/duckuments/duckuments.pdf and b/macros/latex/contrib/duckuments/duckuments.pdf differ
diff --git a/macros/latex/contrib/duckuments/example-image-duck-portrait.pdf b/macros/latex/contrib/duckuments/example-image-duck-portrait.pdf
index ce7bc8262e..ef895dbf68 100644
Binary files a/macros/latex/contrib/duckuments/example-image-duck-portrait.pdf and b/macros/latex/contrib/duckuments/example-image-duck-portrait.pdf differ
diff --git a/macros/latex/contrib/duckuments/example-image-duck.pdf b/macros/latex/contrib/duckuments/example-image-duck.pdf
index c9ee8019d1..78924c0120 100644
Binary files a/macros/latex/contrib/duckuments/example-image-duck.pdf and b/macros/latex/contrib/duckuments/example-image-duck.pdf differ
diff --git a/macros/latex/contrib/glossaries/CHANGES b/macros/latex/contrib/glossaries/CHANGES
index fb9bc0861a..1ddbd44ab6 100644
--- a/macros/latex/contrib/glossaries/CHANGES
+++ b/macros/latex/contrib/glossaries/CHANGES
@@ -1,5 +1,12 @@
glossaries change log:
+v4.43 (2019-09-28):
+
+ * glossaries.sty:
+
+ - added check for LaTeX kernel 2019/10/01 (new kernel affects
+ accent stripping of UTF-8 characters with \makenoidxglossaries)
+
v4.42 (2019-01-06):
* glossaries.sty:
diff --git a/macros/latex/contrib/glossaries/README b/macros/latex/contrib/glossaries/README
index 4f0e0ea8e5..57f06c7d5c 100644
--- a/macros/latex/contrib/glossaries/README
+++ b/macros/latex/contrib/glossaries/README
@@ -1,6 +1,6 @@
-LaTeX Package : glossaries v4.42
+LaTeX Package : glossaries v4.43
-Last Modified : 2019-01-06
+Last Modified : 2019-09-28
Author : Nicola Talbot
diff --git a/macros/latex/contrib/glossaries/glossaries-code.pdf b/macros/latex/contrib/glossaries/glossaries-code.pdf
index 4401858727..0b01413312 100644
Binary files a/macros/latex/contrib/glossaries/glossaries-code.pdf and b/macros/latex/contrib/glossaries/glossaries-code.pdf differ
diff --git a/macros/latex/contrib/glossaries/glossaries-user.html b/macros/latex/contrib/glossaries/glossaries-user.html
index df8866e01c..5692dfce9e 100644
--- a/macros/latex/contrib/glossaries/glossaries-user.html
+++ b/macros/latex/contrib/glossaries/glossaries-user.html
@@ -151,8 +151,9 @@ span.LATEX span.TEX{ position:relative; left: -0.4em; }
div.float, div.figure {margin-left: auto; margin-right: auto;}
div.float img {text-align:center;}
div.figure img {text-align:center;}
-.marginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}
-.marginpar p{margin-top:0.4em; margin-bottom:0.4em;}
+.marginpar,.reversemarginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}
+.marginpar p,.reversemarginpar p{margin-top:0.4em; margin-bottom:0.4em;}
+.reversemarginpar{float:left;}
table.equation {width:100%;}
.equation td{text-align:center; }
td.equation { margin-top:1em; margin-bottom:1em; }
@@ -224,6 +225,7 @@ table.gather {width:100%;}
div.gather-star {text-align:center;}
table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
div.longtable{text-align:center;}
+table.longtable{margin-left:auto; margin-right: auto;}
.supertabular {text-align:center}
div.important { border : solid red; }
div.verbatim { font-family: monospace; white-space: nowrap; text-align:left; clear:both; padding-top: 2ex; padding-bottom: 2ex;}
@@ -309,7 +311,7 @@ span#textcolor62{color:#00FF00}
>
User Manual for glossaries.sty v4.42
+class="cmr-17">User Manual for glossaries.sty v4.43
http://www.dickimaw-books.com/
2019-01-06
+class="cmr-12">2019-09-28
@@ -482,7 +484,7 @@ class="cmtt-10">glossaries-code.pdf
Advanced users wishing to know more about the inner workings
of all the packages provided in the glossaries bundle should read “Documented
- Code for glossaries v4.42”.
+ Code for glossaries v4.43”.
INSTALL o. Depending on
the font, the backslash character may appear as a dash when used in the main
document text, so \foo will appear as: —foo.
- Earlier versions of Earlier versions of glossaries used this technique to write information to the files
used by the indexing applications to prevent problems caused by fragile commands.
Now, this is only used for the
| | Option 5 |
| Requires
✔ | ✔ |
| Requires
✔ | ✘ |
| Requires
✘ | ✘ |
| Requires
✔ | ✘ |
| Can
✔ | N/A |
| Efficient
✔ | N/A |
| Can
✔ | N/A |
| Any
✘‡ |
| Are
✔ | ✔ |
| Can
✔ | ✘ |
| Can
✔¶ |
| Maximum
∞ | ∞ |
| \glsdisplaynumberlist
@@ -1735,7 +1737,7 @@ class="pzdr-">✔ | ✘ |
| \newglossaryentry
@@ -1765,7 +1767,7 @@ class="tcrm-0900">※ | ✔⁑ |
| Requires
✘⋆ |
| Default
makeindex’s quote character using:
-
\GlsSetQuote Command Name | Command Name | Translator
Key
Word | Word | Purpose |
\glossaryname | | Glossary | Glossary | Title
of
the
@@ -4659,9 +4661,9 @@ class="td10"> Title
style="vertical-align:baseline;" id="TBL-3-3-"> | \acronymname | | Acronyms | Acronyms | Title
of
the
@@ -4680,11 +4682,11 @@ class="cmss-10">acronym | \entryname | | Notation
(glossaries) | (glossaries) | Header
for
first
@@ -4706,11 +4708,11 @@ class="td10"> Header
style="vertical-align:baseline;" id="TBL-3-5-"> | \descriptionname | | Description
(glossaries) | (glossaries) | Header
for
second
@@ -4732,11 +4734,11 @@ class="td10"> Header
style="vertical-align:baseline;" id="TBL-3-6-"> | \symbolname | | Symbol
(glossaries) | (glossaries) | Header
for
symbol
@@ -4755,13 +4757,13 @@ class="td10"> Header
style="vertical-align:baseline;" id="TBL-3-7-"> | \pagelistname | | Page
List
(glossaries) | (glossaries) | Header
for
page
@@ -4780,11 +4782,11 @@ class="td10"> Header
style="vertical-align:baseline;" id="TBL-3-8-"> | \glssymbolsgroupname | | Symbols
(glossaries) | (glossaries) | Header
for
symbols
@@ -4803,11 +4805,11 @@ class="td10"> Header
style="vertical-align:baseline;" id="TBL-3-9-"> | \glsnumbersgroupname | | Numbers
(glossaries) | (glossaries) | Header
for
numbers
@@ -6320,7 +6322,7 @@ information can be gathered by a front-end, editor or script to make the glossar
appropriate. This section describes how the information is stored in the auxiliary
file.
The file extensions used by each defined glossary are given by
-
\@newglossary
The indexing application’s style file is specified by
-
\@istfilename Word or letter ordering is specified by:
-
\@glsorder xindy should be used, the language and code page for each glossary is specified
by
-
\@xdylanguage \@gls@codepage TopGeneral Options
-
nowarn
-
- This suppresses all warnings generated by the glossaries package. Don’t use this
option if you’re new to using debug=showtargets will override this option.
-
nolangwarn
-
- This suppresses the warning generated by a missing language module.
-
noredefwarn
-
- If you load glossaries with a class or another package that already defines
glossary related commands, by default nowarn option described above.
-
debug
-
- Introduced in version 4.24. The default setting is debug=false. This was a
@@ -6558,7 +6560,7 @@ class="cmss-10">nowarn
debug=showtargets option will additionally
use
-
\glsshowtarget debug
seenoindex Introduced in version 4.24, this option may take one of three values: error, warn or
@@ -6695,9 +6697,9 @@ class="cmtt-10">\makeglossaries to speed up the compilation of a draft do
indexing.
nomain This suppresses the creation of the main glossary and associated .glo file, if
unrequired. Note that if you use this option, you must create another glossary in which
@@ -6780,9 +6782,9 @@ class="cmtt-10">\gls.
sanitizesort This is a boolean option that determines whether or not to sanitize the sort
@@ -6827,55 +6829,97 @@ class="cmss-10">sanitizesort=false.
esclocations This is a boolean option. (The default is esclocations=true, but
+ \makenoidxglossaries changes it to esclocations=false.) Both makeindex and xindy
+ are fussy about the location formats (makeindex more so than xindy) so the glossaries
+ package tries to ensure that special characters are escaped and allows for the location to
+ be substituted for a format that’s more acceptable to the indexing application. This
+ requires a bit of trickery to circumvent the problem posed by TEX’s asynchronous
+ output routine, which can go wrong and also adds to the complexity of the document
+ build.
+ If you’re sure that your locations will always expand to an acceptable format (or you’re
+ prepared to post-process the glossary file before passing it to the relevant indexing
+ application) then use esclocations=false to avoid the complex escaping of location values.
+ (See “Writing information to associated files” in the documented code for further
+ details.)
+
+savewrites This is a boolean option to minimise the number of write registers used by the
glossaries package. (Default is savewrites=false.) There are only a limited number of
+ id="dx1-23050">.) There are only a limited number of
write registers, and if you have a large number of glossaries or if you are using a class or
other packages that create a lot of external files, you may exceed the maximum number
of available registers. If savewrites is set, the glossary information will be stored in token
+ id="dx1-23051"> is set, the glossary information will be stored in token
registers until the end of the document when they will be written to the external
files.
-
+
In general, this package option is best avoided.
translate This can take the following values:
-
translate=true
-
- If babel has been loaded and the has been loaded and the translator package is installed,
+ id="dx1-23063"> package is installed,
translator will be loaded and the translations will be provided by the will be loaded and the translations will be provided by the translator
+ id="dx1-23065">
package interface. You can modify the translations by providing your own
dictionary. If the translator package isn’t installed and package isn’t installed and babel is loaded, the
+ id="dx1-23067"> is loaded, the
glossaries-babel package will be loaded and the translations will be provided
+ id="dx1-23068"> package will be loaded and the translations will be provided
using babel’s \addto\caption⟨language⟩ mechanism. If polyglossia has been
+ id="dx1-23069"> has been
loaded, glossaries-polyglossia will be loaded.
+ id="dx1-23070"> will be loaded.
-
translate=false
-
- Don’t provide translations, even if babel or or polyglossia has been
+ id="dx1-23073"> has been
loaded. (Note that babel provides the command provides the command \glossaryname so that will
+ id="dx1-23075"> so that will
still be translated if you have loaded babel.)
+ id="dx1-23076">.)
-
translate=babel
-
- Don’t load the translator package. Instead load package. Instead load glossaries-babel.
-
I recommend you use .
+ I recommend you use translate=babel if you have any problems with the
+ id="dx1-23080"> if you have any problems with the
translations or with PDF bookmarks, but to maintain backward compatibility, if
babel has been loaded the default is has been loaded the default is translate=true.
-
+ id="dx1-23082">.
+
- If If translate is specified without a value, is specified without a value, translate=true is assumed. If is assumed. If translate isn’t
+ id="dx1-23085"> isn’t
specified, translate=true is assumed if is assumed if babel, , polyglossia or or translator have been loaded.
+ id="dx1-23089"> have been loaded.
Otherwise translate=false is assumed.
- See is assumed.
+ See §1.4.1 Changing the Fixed Names for further details.
@@ -6995,23 +7039,23 @@ href="#sec:fixednames">Changing the Fixed Names The values must be fully expanded, so The values must be fully expanded, so don’t try nohypertypes=\acronymtype. You
+ id="dx1-23095">. You
may also use
-
\GlsDeclareNoHyperList{⟨list⟩}
-
+
instead or additionally. See §6 Links to Glossary Entries for further details.
hyperfirst This is a boolean option that specifies whether each term has a hyperlink on first
use. The default is hyperfirst=true (terms on (terms on first use have a hyperlink, unless
explicitly suppressed using starred versions of commands such as \gls* or
+ id="dx1-23099"> or
by identifying the glossary with nohypertypes, described above). Note that
+ id="dx1-23100">, described above). Note that
nohypertypes overrides overrides hyperfirst=true. This option only affects commands that
+ id="dx1-23102">. This option only affects commands that
check the first use flag, such as the \gls-like commands (for example, \gls or
+ id="dx1-23103"> or
\glsdisp), but not the ), but not the \glstext-like commands (for example, \glslink or
+ id="dx1-23105"> or
\glstext).
- The ).
+ The hyperfirst setting applies to all glossary types (unless identified by setting applies to all glossary types (unless identified by nohypertypes or
+ id="dx1-23108"> or
defined with \newignoredglossary). It can be overridden on an individual basis by
+ id="dx1-23109">). It can be overridden on an individual basis by
explicitly setting the hyper key when referencing an entry (or by using the plus or
+ id="dx1-23110"> key when referencing an entry (or by using the plus or
starred version of the referencing command).
- It may be that you only want to apply this to just the acronyms (where the first use
+ It may be that you only want to apply this to just the acronyms (where the first use
explains the meaning of the acronym) but not for ordinary glossary entries (where the
first use is identical to subsequent uses). In this case, you can use hyperfirst=false
+ id="dx1-23111">
and apply \glsunsetall to all the regular (non-acronym) glossaries. For
example:
@@ -7104,32 +7148,32 @@ class="cmtt-10">\glsunsetall to all the regular (non-acronym) glossaries.
% at the end of the preamble
\glsunsetall[main]
-
- Alternatively you can redefine the hook
-
+ Alternatively you can redefine the hook
+
\glslinkcheckfirsthyperhook \glslinkcheckfirsthyperhook
-
+
which is used by the commands that check the first use flag, such as \gls. Within the
+ id="dx1-23113">. Within the
definition of this command, you can use \glslabel to reference the entry label and
+ id="dx1-23114"> to reference the entry label and
\glstype to reference the glossary type. You can also use to reference the glossary type. You can also use \ifglsused to determine if
+ id="dx1-23116"> to determine if
the entry has been used. You can test if an entry is an acronym by checking if it has the
long key set using key set using \ifglshaslong. For example, to switch off the hyperlink on first use
+ id="dx1-23118">. For example, to switch off the hyperlink on first use
just for acronyms:
@@ -7142,14 +7186,14 @@ class="cmtt-10">\ifglshaslong }%
}
-
- Note that this hook isn’t used by the commands that don’t check the
+ Note that this hook isn’t used by the commands that don’t check the first use flag, such
as \glstext. (You can, instead, redefine . (You can, instead, redefine \glslinkpostsetkeys, which is used by both
+ id="dx1-23120">, which is used by both
the \gls-like and \glstext-like commands.)
indexonlyfirst This is a boolean option that specifies whether to only add information to the
external glossary file on first use. The default is indexonlyfirst=false, which will add a
+ id="dx1-23122">, which will add a
line to the file every time one of the \gls-like or \glstext-like commands are
used. Note that \glsadd will always add information to the external glossary
+ id="dx1-23123"> will always add information to the external glossary
file (since
+ id="x1-23124f1"> (since
that’s the purpose of that command).
- You can customise this by redefining
-
You can customise this by redefining
+
\glswriteentry \glswriteentry{⟨label⟩}{⟨wr-code⟩}
-
+
where ⟨label⟩ is the entry’s label and ⟨wr-code⟩ is the code that writes the entry’s
@@ -7206,16 +7250,16 @@ class="cmtt-10">\glswriteentry
\fi
}
- This checks the This checks the indexonlyfirst package option (using package option (using \ifglsindexonlyfirst) and does
⟨wr-code⟩ if this is false otherwise it only does ⟨wr-code⟩ of the entry hasn’t been
used.
- For example, suppose you only want to index the first use for entries in the For example, suppose you only want to index the first use for entries in the acronym
glossary and not in the main (or any other) glossary:
@@ -7229,64 +7273,64 @@ class="cmtt-10">main (or any other) glossary:
{#2}%
}
- Here I’ve used Here I’ve used \ifthenelse to ensure the arguments of \equal are fully expanded
before the comparison is made.
savenumberlist This is a boolean option that specifies whether or not to gather and
store the number list for each entry. The default is for each entry. The default is savenumberlist=false. (See
+ id="dx1-23129">. (See
\glsentrynumberlist and and \glsdisplaynumberlist in in §9 Using Glossary Terms
Without Links.) This is always true if you use Option 1.
-
+
-Top
2.2 Sectioning, Headings and TOC Options
-
toc
-
- Add the glossaries to the table of contents. Note that an extra LATEX run is
required with this option. Alternatively, you can switch this function on and off
using
-
-
+
and
-
\glstocfalse \glstocfalse
-
+
-
numberline
-
- When used with toc, this will add numberline
-
section
-
- This is a ⟨key⟩=⟨value⟩ option. Its value should be the name of a sectional unit
@@ -7323,40 +7367,40 @@ class="cmti-10">value
⟩ option. Its value should be the name of a s
\usepackage[section=subsection]{glossaries}
- You can omit the value if you want to use sections, i.e.
+ You can omit the value if you want to use sections, i.e.
\usepackage[section]{glossaries}
- is equivalent to
+ is equivalent to
\usepackage[section=section]{glossaries}
- You can change this value later in the document using
-
You can change this value later in the document using
+
\setglossarysection \setglossarysection{⟨ name⟩ }
-
+
where ⟨name⟩ is the sectional unit.
- The start of each glossary adds information to the page header via
-
- or to prevent it from changing the headers:
+ or to prevent it from changing the headers:
\renewcommand{\glsglossarymark}[1]{}
- If you want If you want \glsglossarymark to use \MakeUppercase in the header, use the ucmark
option described below.
- Occasionally you may find that another package defines Occasionally you may find that another package defines \cleardoublepage when it is
not required. This may cause an unwanted blank page to appear before each glossary.
- This can be fixed by redefining \glsclearpage \glsclearpage:
\renewcommand*{\glsclearpage}{\clearpage}
-
+
-
ucmark
-
- This is a boolean option (default: ucmark=false, unless \MakeTextUppercase2.3
.
You can test whether this option has been set or not using
-
\ifglsucmark true part⟩ \else ⟨ false part⟩ \fi
-
+
For example:
@@ -7439,7 +7483,7 @@ class="cmtt-10">\fi
\markright{#1}%
\fi}
- If If memoir has been loaded and ucfirst\memUChead -
numberedsection
-
- The glossaries are placed in unnumbered sectional units by default, but
this can be changed using numberedsection\section
) and is assigned a label
(via \label). The label is formed from
-
\glsautoprefix \glsautoprefix ⟨ type⟩
-
+
where ⟨type⟩ is the label identifying that glossary. The default value of
glossaries using:
\usepackage[section,numberedsection=autolabel]
{glossaries}
- then each glossary will appear in a numbered section, and can be referenced using
+ then each glossary will appear in a numbered section, and can be referenced using
something like:
@@ -7512,7 +7556,7 @@ class="cmss-10">glossaries using:
The main glossary is in section~\ref{main} and
the list of acronyms is in section~\ref{acronym}.
- If you can’t decide whether to have the acronyms in the main glossary or a
+ If you can’t decide whether to have the acronyms in the main glossary or a
separate list of acronyms, you can use \acronymtype which is set to acronym
The list of acronyms is in section~\ref{\acronymtype}.
- You can redefine the prefix if the default label clashes with another label in your
+ You can redefine the prefix if the default label clashes with another label in your
document. For example:
@@ -7538,7 +7582,7 @@ class="cmss-10">acronym
\renewcommand*{\glsautoprefix}{glo:}
- will add will add glo: to the automatically generated label, so you can then, for example,
refer to the list of acronyms as follows:
@@ -7548,7 +7592,7 @@ class="cmtt-10">glo: to the automatically generated label, so you can the
The list of acronyms is in
section~\ref{glo:\acronymtype}.
- Or, if you are undecided on a prefix:
+ Or, if you are undecided on a prefix:
@@ -7556,7 +7600,7 @@ class="cmtt-10">glo: to the automatically generated label, so you can the
The list of acronyms is in
section~\ref{\glsautoprefix\acronymtype}.
-
+
namerefnameref\usepackage[numberedsection=nameref]{glossaries}
- Now Now \nameref{main} will display the (TOC) section title associated with the
main glossary. As above, you can redefine \glsautoprefix to provide a prefix for
the label.
-
+
-Top
2.3 Glossary Appearance Options
-
entrycounter
-
- This is a boolean option. (Default is entrycounter=false.) If set, each main
(level 0) glossary entry will be numbered when using the standard glossary styles.
- This option creates the counter glossaryentry glossaryentry.
-
If you use this option, you can reference the entry number within the document
+ If you use this option, you can reference the entry number within the document
using
-
\glsrefentry \glsrefentry{⟨ label⟩ }
-
+
where ⟨label⟩ is the label associated with that glossary entry. The labelling
systems uses ⟨label⟩, where ⟨label⟩ is the entry’s label and ⟨prefix⟩ is given
by
-
\GlsEntryCounterLabelPrefix \GlsEntryCounterLabelPrefix
-
+
(which defaults to glsentry-).
- If you use If you use \glsrefentry, you must run LATEX twice after creating the glossary files
using xindy to ensure the cross-references are
up-to-date.
-
+
-
counterwithin
-
- This is a ⟨key⟩=⟨value⟩ option where ⟨glossaryentry counter will be
reset every time ⟨value⟩ is incremented.
-
The
-
+
-
subentrycounter
-
- This is a boolean option. (Default is subentrycounter=false.) If set, each
level 1 glossary entry will be numbered when using the standard glossary
- styles. This option creates the counter glossarysubentry label⟩ is the label associated with the
sub-entry.
-
style
-
- This is a ⟨key⟩=⟨value⟩ option. (Default is glossary-superglossary-tree
. Alternatively, you can set the style
using
-
\setglossarystyle{⟨style name⟩}
-
+
(See §15 Glossary Styles for further details.)
-
nolong
-
- This prevents the glossaries package from automatically loading glossary-longglossary-long
).
-
nosuper
-
- This prevents the glossaries package from automatically loading glossary-superglossary-super
-
nolist
-
- This prevents the glossaries package from automatically loading glossary-liststyle
-
notree
-
- This prevents the glossaries package from automatically loading glossary-treeglossary-tree.
-
nostyles
-
- This prevents all the predefined styles from being loaded. If you use this option, you
need to load a glossary style package (such as glossary-mcols\printglossary\usepackage{glossary-mcols}
\setglossarystyle{mcoltree}
-
- -
-esclocations
- This is a boolean option. (The default is esclocations=true, but
- \makenoidxglossaries changes it to esclocations=false.) Both makeindex and xindy
- are fussy about the location formats (makeindex more so than xindy) so the glossaries
- package tries to ensure that special characters are escaped and allows for the location to
- be substituted for a format that’s more acceptable to the indexing application. This
- requires a bit of trickery to circumvent the problem posed by TEX’s asynchronous
- output routine, which can go wrong and also adds to the complexity of the document
- build.
-
If you’re sure that your locations will always expand to an acceptable format (or you’re
- prepared to post-process the glossary file before passing it to the relevant indexing
- application) then use esclocations=false to avoid the complex escaping of location values.
- (See “Writing information to associated files” in the documented code for further
- details.)
+
-
nonumberlist
-
- This option will suppress the associated number lists in the glossaries (see also
+ id="dx1-25060">s in the glossaries (see also
§5 2 or 3 (makeindex or or xindy) then the
+ id="dx1-25062">) then the
locations must still be valid. This package option merely prevents the number list from
+ id="dx1-25063"> from
being displayed, but both makeindex and and xindy still require a location or
+ id="dx1-25065"> still require a location or
cross-reference for each term that’s indexed. Remember that number list includes any
+ id="dx1-25066"> includes any
cross-references, so suppressing the number list will also hide the cross-references (see
+ id="dx1-25067"> will also hide the cross-references (see
below).
-
seeautonumberlist
-
- If you suppress the number lists with s with nonumberlist, described
+ id="dx1-25070">, described
above, this will also suppress any cross-referencing information supplied by
the see key in key in \newglossaryentry or or \glssee. If you use . If you use seeautonumberlist,
+ id="dx1-25074">,
the see key will automatically implement key will automatically implement nonumberlist=false for that entry.
+ id="dx1-25076"> for that entry.
(Note this doesn’t affect \glssee.) For further details see Cross-Referencing
Entries.
-
counter
-
- This is a ⟨key⟩=⟨value⟩ option. (Default is counter=page.) The value should be
+ id="dx1-25078">.) The value should be
the name of the default counter to use in the number lists (see s (see §5 Number
lists).
-
-
-
nopostdot
-
- This is a boolean option. If no value is specified, true is assumed. When set to
true, this option suppresses the default post description dot used by some of the
predefined styles. The default setting is nopostdot=false.
+ id="dx1-25081">.
-
nogroupskip
-
- This is a boolean option. If no value is specified, true is assumed. When set to
true, this option suppresses the default vertical gap between groups used by some of
the predefined styles. The default setting is nogroupskip=false.
+ id="dx1-25083">.
+
+
Top
|
class="cmtt-10">\glssetexpandfield or
\glssetnoexpandfield are governed by
-
\glsexpandfields \glsexpandfields
and
-
\glsnoexpandfields Top4.6 Loading Entries From a File
You can store all your glossary entry definitions in another file and use:
-
-
+
Example 7 (Loading Entries from Another File)terms.tex file will be ignored.
href="#top">Top4.7 Moving Entries to Another Glossary
As from version 3.02, you can move an entry from one glossary to another using:
-
\glsmoveentry \c@page
class="cmtt-10">\tally{page} expands to \tallynum\c@page) then you need to
use:
-
\glsaddprotectedpagefmt \the\number while it
processes the location. If this causes a problem you can disallow it using
-
\glswrallowprimitivemodsfalse xindy2 and 3), you can replace the separator and
the closing number in the range using:
-
\glsSetSuffixF \glsSetSuffixF{⟨ suffix⟩ }
-
\glsSetSuffixFF Option 1 doesn’t form ranges. However, with thi
number list using:
-
\glsnumberlistloop Option 1.)
There is a predefined handler that’s used to display the number list in the glossary:
-
\glsnoidxdisplayloc Top\writeist before the file is
closed. You can set the code to be performed then using:
-
If you want the ⟨code⟩ to write any information to the file, you need to use
-
\glswrite The way the link text is displayed depends on
-
\glstextformat tabularx by placing the following command (new to v4.28) in the
preamble:
-
|