summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2021-06-22 13:52:34 +0900
committerNorbert Preining <norbert@preining.info>2021-06-22 13:52:34 +0900
commit2bf7899fa3ec7a4e278b6da6d1ce3a12156ec277 (patch)
treed3e328f749aa1e8c40c0bb89848fe1b442525e60
parent27f374321422d2d82e019b744aded5b0935c30c0 (diff)
acrotex-js (new, split out)
-rw-r--r--ctan2tds-config.pl1
-rw-r--r--texmf-dist/doc/latex/acrotex-js/README.md15
-rw-r--r--texmf-dist/doc/latex/acrotex-js/acrobat-in-workflow.pdfbin0 -> 396417 bytes
-rw-r--r--texmf-dist/doc/latex/acrotex-js/acrobat-in-workflow.tex238
-rw-r--r--texmf-dist/doc/latex/acrotex-js/acrotex-js.pdfbin0 -> 213534 bytes
-rw-r--r--texmf-dist/doc/latex/acrotex-js/install_jsfiles.pdfbin0 -> 188602 bytes
-rw-r--r--texmf-dist/doc/latex/acrotex-js/install_jsfiles.tex332
-rw-r--r--texmf-dist/doc/latex/acrotex-js/js-files/aeb.js24
-rw-r--r--texmf-dist/doc/latex/acrotex-js/js-files/aeb_pro.js177
-rw-r--r--texmf-dist/doc/latex/acrotex-js/js-test/test_install.pdfbin0 -> 47782 bytes
-rw-r--r--texmf-dist/doc/latex/acrotex-js/js-test/test_install.tex74
-rw-r--r--texmf-dist/source/latex/acrotex-js/acrotex-js.dtx97
-rw-r--r--texmf-dist/source/latex/acrotex-js/acrotex-js.ins60
-rw-r--r--texmf-dist/tex/latex/acrotex-js/acrotex-js.sty25
-rw-r--r--tlpkg/tlpsrc/acrotex-js.tlpsrc0
15 files changed, 1043 insertions, 0 deletions
diff --git a/ctan2tds-config.pl b/ctan2tds-config.pl
index 3dde9204..1693e3a8 100644
--- a/ctan2tds-config.pl
+++ b/ctan2tds-config.pl
@@ -24,6 +24,7 @@ $special{'datepicker-pro'} = '&MAKEdps';
$special{'aeb-pro'} = '&MAKEdps';
$special{'annot-pro'} = '&MAKEdps';
$special{'acrotex'} = '&MAKEdps';
+$special{'acrotex-js'} = '&MAKEdps';
$special{'acromemory'} = '&MAKEdps';
$special{'aeb-mlink'} = '&MAKEdps';
$special{'aeb-minitoc'} = '&MAKEdps';
diff --git a/texmf-dist/doc/latex/acrotex-js/README.md b/texmf-dist/doc/latex/acrotex-js/README.md
new file mode 100644
index 00000000..90c06a1c
--- /dev/null
+++ b/texmf-dist/doc/latex/acrotex-js/README.md
@@ -0,0 +1,15 @@
+The acrotex-js Package
+Author: D. P. Story
+Dated: 2021-06-19
+
+In the distribution of this package are two critical JavaScript files (aeb.js
+and aeb_pro.js) used by the packages insdljs, aeb_pro, thorshammer, and
+docassembly. Previously these JS files where distributed with the individual
+packages, now they are distributed by this package and must be installed according
+to the instructions in the docs folder.
+
+What's New (2021-06-19) Move certain files from other packages:
+ acrobat-in-workflow.pdf and test_install.pdf
+
+dps
+
diff --git a/texmf-dist/doc/latex/acrotex-js/acrobat-in-workflow.pdf b/texmf-dist/doc/latex/acrotex-js/acrobat-in-workflow.pdf
new file mode 100644
index 00000000..4dc7dda7
--- /dev/null
+++ b/texmf-dist/doc/latex/acrotex-js/acrobat-in-workflow.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/acrotex-js/acrobat-in-workflow.tex b/texmf-dist/doc/latex/acrotex-js/acrobat-in-workflow.tex
new file mode 100644
index 00000000..453806f8
--- /dev/null
+++ b/texmf-dist/doc/latex/acrotex-js/acrobat-in-workflow.tex
@@ -0,0 +1,238 @@
+\RequirePackage[!use=preview,!use=efpmca,!use=usebw,!use=finalbuild]{spdef}
+\documentclass{article}
+\usepackage[fleqn]{amsmath}
+\usepackage[web={designv,forcolorpaper},useacrobat]{aeb_pro}
+\usepackage{eforms}
+\usepackage{graphicx}
+\usepackage{fancyvrb}
+
+\ifpdf\def\x{%
+ \usepackage[T1]{fontenc}
+ \usepackage{lucidabr}}
+\else\def\x{%
+ \usepackage[altbullet]{lucidbry}
+ \usepackage[active]{srcltx}
+}\fi\x
+
+\usepackage{pifont}
+
+%\usepackage{fancyvrb}
+
+\reversemarginpar
+
+\let\uif\textsf
+\let\env\texttt
+\def\cs#1{\texttt{\eqbs#1}}
+\let\tops\texorpdfstring
+
+\makeatletter
+\renewcommand{\paragraph}
+ {\@startsection{paragraph}{4}{0pt}{6pt}{-3pt}
+ {\normalfont\normalsize\bfseries}}
+\renewcommand{\subparagraph}
+ {\@startsection{subparagraph}{5}{\parindent}{6pt}{-3pt}%
+ {\normalfont\normalsize\bfseries}}
+\def\parboxValign{t}
+\newcommand{\FmtMP}[2][0pt]{\mbox{}\marginpar{%
+ \raisebox{.5\baselineskip+#1}{%
+ \expandafter\parbox\expandafter[\parboxValign]%
+ {\marginparwidth}{\aebbkFmtMp#2}}}}
+\def\aebbkFmtMp{\kern0pt\itshape\small
+ \ifusebw\color{gray}\else\color{blue}\fi
+ \raggedleft\hspace{0pt}}
+\newcommand{\BlogArticle}{%
+ \makebox[0pt][l]{\hspace{-1pt}\color{blue}\Pisymbol{webd}{254}%
+ }\raisebox{.5pt}{\ifusebw\color{black}\else
+ \color{red}\fi\ding{045}}}
+\def\dps{$\mbox{$\mathfrak D$\kern-.3em\mbox{$\mathfrak P$}%
+ \kern-.6em \hbox{$\mathcal S$}}$}
+
+\makeatother
+
+\setlength{\mathindent}{\the\parindent}
+
+\def\AEBP{\app{AeB Pro}}
+\def\AEB{\app{AeB}}
+\let\app\textsf
+\let\pkg\textsf
+\def\amtIndent{\parindent}
+\def\meta#1{$\langle\textit{\texttt{#1}}\rangle$}
+\def\SC#1{{\small#1}}
+\def\PDF{\SC{PDF}}
+\let\opt\texttt
+
+%\reversemarginpar
+\def\jsSupInstr{\tops{{\AEB} and {\AEBP}\\[1ex]}{AeB and AeB Pro: }Including
+ \tops{\app}{}{Acrobat} in the \tops{\LaTeX}{LaTeX} workflow}
+\title{\jsSupInstr}
+\author{D. P. Story}
+\version{1.0}
+
+\chngDocObjectTo{\newDO}{doc}
+\begin{docassembly}
+var titleOfManual="Acrobat workflow";
+var manualfilename="Manual_BG_Print_acrobat.pdf";
+var manualtemplate="Manual_BG_Brown.pdf"; // Blue, Green, Brown
+var _pathToBlank="C:/Users/Public/Documents/ManualBGs/"+manualtemplate;
+var doc;
+var buildIt=false;
+if ( buildIt ) {
+ console.println("Creating new " + manualfilename + " file.");
+ doc = \appopenDoc({cPath: _pathToBlank, bHidden: true});
+ var _path=this.path;
+ var pos=_path.lastIndexOf("/");
+ _path=_path.substring(0,pos)+"/"+manualfilename;
+ \docSaveAs\newDO ({ cPath: _path });
+ doc.closeDoc();
+ doc = \appopenDoc({cPath: manualfilename, oDoc:this, bHidden: true});
+ f=doc.getField("ManualTitle");
+ f.value=titleOfManual;
+ doc.flattenPages();
+ \docSaveAs\newDO({ cPath: manualfilename });
+ doc.closeDoc();
+} else {
+ console.println("Using the current "+manualfilename+" file.");
+}
+var _path=this.path;
+var pos=_path.lastIndexOf("/");
+_path=_path.substring(0,pos)+"/"+manualfilename;
+\addWatermarkFromFile({
+ bOnTop:false,
+ bOnPrint:false,
+ cDIPath:_path
+});
+\executeSave();
+\end{docassembly}
+
+\begin{document}
+
+\maketitle
+
+\section{Introduction}
+
+\app{Adobe Acrobat} (\app{AA}) is a desktop application that has many
+powerful features beyond the functionality of a PDF viewer. In this article
+the focus is a {\LaTeX} workflow that includes \app{AA} in its workflow.
+
+{\AEB} and {\AEBP}, as well as other packages written under the {\AEB}
+banner, use FDF files in various situations (as described in
+Section~4).\footnote{An FDF file is a file type that was created by
+\app{Adobe}. The \app{Acrobat} and \app{Adobe Reader} applications can use
+FDF files in various ways.} These packages use \app{Acrobat} to import the
+FDF files to perform designated JavaScript actions as required by the package
+or document author. The importing of FDF files is only needed during the PDF
+creation stage of document development; once the PDF file is created, the
+document can be viewed by \app{Adobe Reader} or any other PDF viewer.
+
+For FDF files to be imported, the \app{Acrobat} application may need to be
+configured.
+
+\section{Configuration of \tops{\app}{}{Acrobat}}\label{s:config}
+
+The current version of \app{AA} is \app{Adobe Acrobat DC}. In this and
+previous versions of \app{AA} no special configuration is needed; however if
+you purchased \app{AA} after December 2020, or you updated your \app{AA}
+after December 2020, you need to make one change in the \uif{Preferences}.
+
+\begin{figure}[htb]\fboxsep0pt\relax\centering
+ \fbox{\includegraphics[width=.5\linewidth]{figures/SecurityPrefs}}
+ \caption{\tops{\protect\uif}{}{Security (Enhanced) Preferences}}\label{fig:SP}
+\end{figure}
+
+Start \app{Acrobat} and open the menu \uif{Edit \ifpdf\texttt{>} \else> \fi
+Preferences} (\uif{Ctrl+K}). In the \uif{Preferences} dialog box, select
+\uif{Security (Enhanced)} category from the left panel; the top most line of
+the right panel is a checkbox labeled \uif{Enable Protected Mode at startup}.
+\emph{Clear this checkbox.}{\def\parboxValign{c}\FmtMP{\app{Acrobat DC}
+users, action required!}}\footnote{When the box is checked, importing FDF
+files, as described in the next two sections, is \emph{prohibited}. We want
+FDF files imported, so we clear the checkbox.} Refer to
+\hyperref[fig:SP]{Figure~\ref*{fig:SP}} for a visual. If this checkbox is not
+present in your \app{Acrobat}, there is nothing to do until this checkbox
+appears in a future updated version of your \uif{AA} application.
+
+\section{When FDF files are imported}
+
+It is important to be aware of when and how FDF files are imported, and to
+understand the actions required of the document author in response to this
+``import FDF event.''
+
+For a document that uses FDF files to perform tasks, the files are imported
+\emph{after} PDF creation when the newly created PDF document is \emph{first
+opened} in \app{Acrobat}, and \emph{before the PDF file is moved to another
+location and before any auxiliary files (the FDF files) are deleted}. Once
+the FDF files are imported, it is important \emph{to save}\FmtMP{Save the
+PDF} the PDF file, this incorporates the results of the actions taken by the
+imported FDF files into the document, actions, such as the embedding of
+document JavaScript.
+
+Another important point to realize is that the use of FDF files is not
+restricted to the
+\app{dvips\ifpdf\texttt{->}\,\else->\,\fi\app{Distiller}\,\ifpdf\texttt{->}\,\ignorespaces
+\else->\,\fi\app{Acrobat}} method of creating a PDF; indeed, any PDF creator
+used by the {\LaTeX} community may be used, for example,
+\app{pdftex\ifpdf\texttt{->}\allowbreak\,\else->\,\fi\app{Acrobat}}. The
+only prerequisite is to use {\LaTeX} markup that initiates the ``import FDF
+event.'' This markup is available through packages that support it; this
+includes, but not restricted to, {\AEB} and {\AEBP}.
+
+\section{Applications of FDF files to a \tops{\LaTeX}{LaTeX} workflow}
+
+With regard to producing a PDF file through a {\LaTeX} workflow, there are
+two important applications to importing FDF files: importing document
+JavaScript and post-PDF creation actions. These two applications to FDF files
+are covered in the next two subsections.
+
+\subsection{Document JavaScript}
+
+In this case, FDF files are required only for the \app{dvips\,\ignorespaces
+\ifpdf\texttt{->}\,\else->\,\fi\app{Distiller}\,\ifpdf\texttt{->}\,\else->\,\ignorespaces
+\fi\app{Acrobat}} workflow; the other PDF creators (\app{pdflatex},
+\app{lualatex}, and \app{xelatex}) have primitives that facilitate the
+creation of document JavaScript without FDF files or \app{Acrobat}.
+
+For the \pkg{exerquiz} package, part of the {Acro\!\TeX} eDucation Bundle
+(\AEB), creation of Document JavaScript is automatic and invisible for all
+PDF creators; it is only in the
+\texttt{tex\,->\,dvi\,->\,\app{dvips}\,->\,\ignorespaces
+\app{Distiller}\,->\,\app{Acrobat}} workflow that FDF files are used.
+
+Document JavaScript, by the way, is code that is embedded in the PDF and is
+available to be called throughout the document. Usually, Document JavaScript
+is general code that is repeatedly used.
+
+
+\subsection{Post PDF Creation actions}
+
+The {\AEBP} Bundle has many ``post PDF creation'' actions, such as auto
+saving the document, importing sounds, attaching documents, inserting pages,
+extracting pages, and many more. With proper {\LaTeX} markup, when the
+document is compiled, FDF files are written to the hard drive, when the
+document is then first opened in \app{Acrobat}, the FDF files are imported
+and the actions are executed. Again, for the FDF files to be imported, they
+must not have already been deleted, and \app{Acrobat} must be correctly
+configured (\hyperref[s:config]{Section~\ref*{s:config}}). One very simple
+example, is automatic saving of the document when \app{Acrobat} is first
+opened. For example, an \pkg{aeb\_pro} document has a \env{docassembly}
+environment that is placed in the preamble. Within this environment, place
+any post PDF creation JavaScript actions:
+\begin{Verbatim}[xleftmargin=\parindent]
+\begin{docassembly}
+console.show();
+console.println("Saving document");
+\executeSave();
+\end{docassembly}
+\end{Verbatim}
+The \verb~\executeSave~ command is defined by \pkg{aeb\_pro} and its action
+is to save the document. It is the \env{docassembly} environment that writes
+the FDF file that contains its contents. \app{Acrobat} inputs this command on
+opening and the PDF is saved.\footnote{\cs{executeSave} must be the last post PDF
+creation action; otherwise, as later actions may not be executed.}
+
+\paragraph*{The \pkg{docassembly} package.} This package uses the post PDF creation actions
+described above, but is a stand alone package and is available to all {\LaTeX} workflows who own
+the \app{Acrobat} application. The \pkg{docassembly} package defines the
+\env{docassembly} environment and supports the same functionality of as {\AEBP}. The \pkg{docassembly}
+package may be downloaded from CTAN at \url{https://ctan.org/pkg/docassembly}.
+
+\end{document}
diff --git a/texmf-dist/doc/latex/acrotex-js/acrotex-js.pdf b/texmf-dist/doc/latex/acrotex-js/acrotex-js.pdf
new file mode 100644
index 00000000..a26c51bf
--- /dev/null
+++ b/texmf-dist/doc/latex/acrotex-js/acrotex-js.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/acrotex-js/install_jsfiles.pdf b/texmf-dist/doc/latex/acrotex-js/install_jsfiles.pdf
new file mode 100644
index 00000000..f4f1b89a
--- /dev/null
+++ b/texmf-dist/doc/latex/acrotex-js/install_jsfiles.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/acrotex-js/install_jsfiles.tex b/texmf-dist/doc/latex/acrotex-js/install_jsfiles.tex
new file mode 100644
index 00000000..0d8c389c
--- /dev/null
+++ b/texmf-dist/doc/latex/acrotex-js/install_jsfiles.tex
@@ -0,0 +1,332 @@
+\documentclass{article}
+\usepackage[fleqn]{amsmath}
+%
+% the driver line is not necessary if you
+% have aebpro.cfg configured to your driver.
+%
+\usepackage[web]{aeb_pro}
+\usepackage{eforms}
+\usepackage{pifont}
+\usepackage{fancyvrb}
+
+\ifpdf\def\x{%
+ \usepackage[T1]{fontenc}
+ \usepackage[altbullet]{lucidabr}}
+ \let\copyright\textcopyright
+\else\def\x{%
+ \usepackage[altbullet]{lucidbry}}
+ \usepackage[active]{srcltx}
+\fi\x
+
+
+
+\makeatletter
+\renewcommand{\paragraph}
+ {\@startsection{paragraph}{4}{0pt}{6pt}{-3pt}
+ {\normalfont\normalsize\bfseries}}
+\renewcommand{\subparagraph}
+ {\@startsection{subparagraph}{5}{\parindent}{6pt}{-3pt}%
+ {\normalfont\normalsize\bfseries}}
+\makeatother
+
+\mathindent\parindent
+
+\def\AEBP{\app{AeB Pro}}
+\def\AEB{\app{AeB}}
+\def\app#1{\textsf{#1}}
+\def\amtIndent{\parindent}
+\def\meta#1{$\langle\textit{\texttt{#1}}\rangle$}
+\def\SC#1{{\small#1}}
+\def\PDF{\SC{PDF}}
+\let\opt\texttt
+\let\pkg\textsf
+
+\def\copyGetPath{\qquad\pushButton[\TU{Copy app.getPath to console}
+\CA{getPath}\A{\JS{console.show();\r
+console.println('\\napp.getPath("user");');
+}}]{cpyGtPth}{}{11bp}}
+
+\def\copyGetPathJS{\qquad\pushButton[\TU{Copy app.getPath to console}
+\CA{getPath}\A{\JS{console.show();\r
+console.println('\\napp.getPath("user", "javascript");');
+}}]{cpyGtPthJS}{}{11bp}}
+
+%\reversemarginpar
+\def\jsSupInstr{How to install JavaScript support files}
+\title{\jsSupInstr}
+\author{D. P. Story}
+\version{1.0}
+
+\chngDocObjectTo{\newDO}{doc}
+\begin{docassembly}
+var titleOfManual="How to install JavaScript files";
+var manualfilename="Manual_BG_Print_jsfiles.pdf";
+var manualtemplate="Manual_BG_Brown.pdf"; // Blue, Green, Brown
+var _pathToBlank="C:/Users/Public/Documents/ManualBGs/"+manualtemplate;
+var doc;
+var buildIt=false;
+if ( buildIt ) {
+ console.println("Creating new " + manualfilename + " file.");
+ doc = \appopenDoc({cPath: _pathToBlank, bHidden: true});
+ var _path=this.path;
+ var pos=_path.lastIndexOf("/");
+ _path=_path.substring(0,pos)+"/"+manualfilename;
+ \docSaveAs\newDO ({ cPath: _path });
+ doc.closeDoc();
+ doc = \appopenDoc({cPath: manualfilename, oDoc:this, bHidden: true});
+ f=doc.getField("ManualTitle");
+ f.value=titleOfManual;
+ doc.flattenPages();
+ \docSaveAs\newDO({ cPath: manualfilename });
+ doc.closeDoc();
+} else {
+ console.println("Using the current "+manualfilename+" file.");
+}
+\retnAbsPathAs(_path);
+_path += "/"+manualfilename;
+var _path=this.path;
+var pos=_path.lastIndexOf("/");
+_path=_path.substring(0,pos)+"/"+manualfilename;
+\addWatermarkFromFile({
+ bOnTop:false,
+ bOnPrint:false,
+ cDIPath:_path
+});
+\executeSave();
+\end{docassembly}
+
+\begin{document}
+
+\maketitle
+
+\section{Introduction}
+
+Because some of the \app{Acrobat} JavaScript methods have security
+restrictions, they can be only executed in the console window, or as part
+of a batch sequence, or from the JavaScript folder reserved by
+\app{Acrobat} for that use. The developer (of {\LaTeX} packages or {\PDF}
+form documents) may want to use these restricted JavaScript methods as
+part of document assembly. To use the restricted methods, they must be
+called from the \emph{user JavaScript folder}. The scripts are contained in a
+\SC{JS} file that \app{Acrobat} reads when it first starts up.
+
+In this article, we provide detailed steps for locating the user JavaScript
+folder of \app{Acrobat} and for installing JavaScript files in that folder.
+Various packages distributed by package author D. P. Story (notably
+\pkg{acrotex}, \pkg{aeb\_pro}, \pkg{thorshammer}, and \pkg{docassembly}), use
+the JavaScript files \texttt{aeb.js} and \texttt{aeb\_pro.js}, which are
+placed in the user JavaScript folder. It is important to correctly install
+these files for the packages listed above to function as expected.
+
+Other JavaScript files may be placed in the folder as well, for example, the
+\texttt{config.js} file is one that is commonly used for general purposes.
+
+Before we get started, if you are using a version of \app{Acrobat} prior
+to version~8.1, you need not read any further. The security restrictions
+described below were not in effect for those versions.
+
+\section{Installing the JavaScript support files}
+
+The functionality of {\AEB} (\pkg{acrotex}) and {\AEBP} (\pkg{aeb\_pro}, as
+well as other packages, depends, to some extent, on the proper installation
+of their JavaScript support files.
+\begin{itemize}
+ \item \AEB: For authors using the $\app{dvips}+\app{Acrobat Distiller}$
+ workflow, \texttt{aeb.js} is required; this file is not used by
+ \app{pdflatex} or \app{xelatex} users.
+
+ \item \AEBP: For authors using the $\app{dvips}+\app{Acrobat
+ Distiller}$ workflow, \texttt{aeb\_pro.js} is required; for authors
+ that prefer \app{pdflatex}, \app{lualatex}, or \app{xelatex} as the
+ {\PDF} creator \emph{and who own} the \app{Acrobat} application,
+ the \texttt{aeb\_pro.js} is required with the \opt{useacrobat}
+ option of \AEBP. When using the \opt{nopro} option of \AEBP, the
+ JavaScript file \texttt{aeb\_pro.js} is not used.
+ \item For \pkg{thorshammer} and \pkg{docassembly}, \pkg{aeb\_pro.js} is
+ required to be installed.
+
+\end{itemize}
+The placement of the JavaScript files has changed over the years and is a
+function of the version number \meta{ver}. Start \app{Acrobat} and open the
+console debugger window by pressing \texttt{Ctrl+J} (for \app{Windows OS})
+or \texttt{Cmd+J} (for \app{Mac OS}). Now execute the code
+\texttt{app.getPath("user")} in the console window. To do this, press the
+\textsf{getPath} button provided below, which copies the necessary code to
+the console window.
+\begin{equation}
+\begin{minipage}{.8\linewidth}
+\begin{Verbatim}[commandchars={!~@}]
+app.getPath("user");!copyGetPath
+\end{Verbatim}
+\end{minipage}\label{display:getPath}
+\end{equation}
+With the cursor on the line containing the script, press the
+\texttt{Ctrl+Enter} (for \app{Windows OS}) or \texttt{Cmd+Enter} (for
+\app{Mac~OS}) key. This will execute the JavaScript and return the `root'
+path to the user's application data for \app{Acrobat}.
+
+The rest of the instructions depend on your operating system,
+\app{Windows} or \app{Mac}.
+
+\subsection{For users of \app{Windows OS}}
+
+There are several cases, jump to the numbered paragraph that describes your
+version (\meta{ver}) of \app{Acrobat}.
+
+%/C/Users/D. P. Story/AppData/Roaming/Adobe/Acrobat/11.0
+%/C/Users/D. P. Story/AppData/Roaming/Adobe/Acrobat/Privileged/11.0/JavaScripts
+
+\def\Stepi{\ding{182}\enspace}
+\def\Stepii{\ding{183}\enspace}
+\def\Stepiii{\ding{184}\enspace}
+
+\paragraph*{{\Stepi}For $\mathbf{\text{\meta{ver}}}$, $\mathbf{8.1 \le
+\text{\meta{ver}} < 10.1.1}$.} For the \app{Windows OS}, executing the script
+in display~\eqref{display:getPath} returns a string of the
+form:\footnote{This string is for \app{Windows OS} beyond \app{WinXP}.}
+\begin{equation}
+\begin{minipage}{.8\linewidth}
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/C/Users/!meta(username)/AppData/Roaming/Adobe/Acrobat/!meta(ver)
+\end{Verbatim}
+\end{minipage}\label{display:path}
+\end{equation}
+Navigate to this folder location. The correct location for the \SC{JS}
+files is in the \texttt{JavaScripts} subfolder. If the folder does not
+exist, create it. The final path for the JavaScript support files is then
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/C/Users/!meta(username)/AppData/Roaming/Adobe/
+ Acrobat/!meta(ver)/JavaScripts
+\end{Verbatim}
+Finally, copy \texttt{aeb.js} (if applicable) and/or \texttt{aeb\_pro.js} (if
+applicable) into this folder. Close \app{Acrobat}, the next time
+\app{Acrobat} is started, it will read in the \SC{JS} files.
+
+\paragraph*{{\Stepii}For $\mathbf{\text{\meta{ver}}}$, $\mathbf{10.1.1 \le
+\text{\meta{ver}} < 12}$.} For these versions of \app{Acrobat} security has
+have tightened up even more; the \texttt{JavaScripts} folder is now a
+subfolder of a special \texttt{Privileged} folder. Execute
+\texttt{app.getPath("user")} in the console window, as in
+display~\eqref{display:getPath}. The method brings back a string similar to
+the one in display~\eqref{display:path}. The correct path is obtained by
+simply inserting \texttt{Privileged} into the path in
+display~\eqref{display:path}, between \texttt{Acrobat} and \meta{ver}, as
+displayed below.
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/C/Users/!meta(username)/AppData/Roaming/Adobe/
+ Acrobat/!textbf(Privileged)/!meta(ver)/JavaScripts
+\end{Verbatim}
+But this is a mere description of the correct location, the path must
+exist! The path must be created, if it does not already exist.
+
+Navigate to the folder, one folder above the path shown in
+display~\eqref{display:path}, that is, navigate to,
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/C/Users/!meta(username)/AppData/Roaming/Adobe/Acrobat/
+\end{Verbatim}
+If a \texttt{Privileged} folder exists, enter into it; otherwise, create
+it, then enter it.
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/C/Users/!meta(username)/AppData/Roaming/Adobe/Acrobat/Privileged
+\end{Verbatim}
+Now create a folder named \meta{ver}, unless it already exists, and enter
+it. The version is always the major release \texttt{8.0}, \texttt{9.0},
+\texttt{10.0}, or \texttt{11.0}.
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/C/Users/!meta(username)/AppData/Roaming/Adobe/
+ Acrobat/Privileged/!meta(ver)
+\end{Verbatim}
+Finally, create the \texttt{JavaScript} folder, unless it already exists,
+to obtain the final path to the user folder JavaScripts:
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/C/Users/!meta(username)/AppData/Roaming/Adobe/
+ Acrobat/Privileged/!meta(ver)/JavaScripts
+\end{Verbatim}
+Copy \texttt{aeb.js} (if applicable) and/or \texttt{aeb\_pro.js} (if
+applicable) into this folder. Close \textsf{Acrobat}, the next time
+\textsf{Acrobat} is started, it will read in the \SC{JS} files.
+
+\paragraph*{{\Stepiii}For $\mathbf{\text{\meta{ver}}}$, $\mathbf{
+\text{\meta{ver}} > 12} $.} Beginning with the next major version following
+version~11, Adobe changed its versioning scheme. There are now two tracks,
+\emph{subscription} and \emph{classic} (also called \emph{perpetual}). For
+subscription, the version, as I understand it, will always be \texttt{DC}
+(Document Cloud), and for the classic, for which you've purchased a
+\emph{perpetual license}, the \meta{ver} is a calendar year. The first
+classic version is \texttt{2015}, the next one is most likely \texttt{2017},
+since major releases occur about every two years.
+
+Execute the code of display~\eqref{display:getPath} by pressing the button
+provided to obtain a path of the form,
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/C/Users/!meta(username)/AppData/Roaming/Adobe/Acrobat/DC
+\end{Verbatim}
+for the subscription license or,
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/C/Users/!meta(username)/AppData/Roaming/Adobe/Acrobat/2015
+\end{Verbatim}
+for the classic (or perpetual) license. Of course, this last path is for
+the first classic version.
+
+Now, to obtain the path to the \texttt{JavaScripts} folder, follow the
+instructions for numbered paragraph \ding{183}, but with \meta{ver} equal
+to either \texttt{DC} or \texttt{2015} (a calendar year).
+
+%/C/Users/D. P. Story/AppData/Roaming/Adobe/Acrobat/Privileged/11.0/JavaScripts
+
+\subsection{For users of \app{Mac OS}}
+
+\app{Mac OS} does not have the security restrictions that \app{Windows OS}
+does, as described in paragraphs \ding{183} and \ding{184}.
+
+Follow the instructions of paragraph \ding{182}, by first pressing the button
+provided in display~\eqref{display:getPath}, then, in the console window,
+execute this script as described in the paragraph following
+display~\eqref{display:getPath}. After working through \ding{182}, one
+obtains any of the following paths depending on the version (\meta{ver}) you
+are using:\medskip
+
+\noindent
+For $\text{\meta{ver}} = \texttt{8.0}, \texttt{9.0}, \texttt{10.0},
+\texttt{11.0}$:
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/Users/!meta(user)/Library/Application\ Support/Adobe/
+ Acrobat/!meta(ver)/JavaScripts
+\end{Verbatim}
+\medskip
+
+\noindent
+For $\text{\meta{ver}} > 12$, the path is,
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/Users/!meta(user)/Library/Application\ Support/Adobe/
+ Acrobat/DC/JavaScripts
+\end{Verbatim}
+for a subscription license, and,
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/Users/!meta(user)/Library/Application\ Support/Adobe/
+ Acrobat/2015/JavaScripts
+\end{Verbatim}
+or more generally,
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/Users/!meta(user)/Library/Application\ Support/Adobe/
+ Acrobat/!meta(year)/JavaScripts
+\end{Verbatim}
+for the perpetual license.
+
+In all cases, if the \texttt{JavaScripts} folder does not exist, it must
+be created. Copy any \SC{JS} support files into the \texttt{JavaScripts}
+folder. The script files are read the next time \app{Acrobat} is started.
+
+\section{Testing the placement of the JavaScript support files}
+
+Assuming you have successfully followed the instructions and created the
+\texttt{JavaScripts} folder, test the validity of what you have done by
+closing \app{Acrobat} then opening it again. Open the console window
+(\texttt{Ctrl+J} or \texttt{Cmd+J}, for \app{Mac OS}) and execute this
+command in the console window:
+\begin{Verbatim}[xleftmargin=\amtIndent,commandchars={!~@}]
+app.getPath("user","javascript");!quad!copyGetPathJS
+\end{Verbatim}
+If you have followed the instructions, the return string should read the
+complete path to the \texttt{JavaScripts} folder.
+\end{document}
diff --git a/texmf-dist/doc/latex/acrotex-js/js-files/aeb.js b/texmf-dist/doc/latex/acrotex-js/js-files/aeb.js
new file mode 100644
index 00000000..09310d2e
--- /dev/null
+++ b/texmf-dist/doc/latex/acrotex-js/js-files/aeb.js
@@ -0,0 +1,24 @@
+/*
+ AEB Import FDF Methods
+
+ Copyright (C) 2006--2016 AcroTeX.Net
+ D. P. Story
+ http://www.acrotex.net
+
+ Version 1.0
+*/
+if ( typeof aebTrustedFunctions == "undefined") {
+ aebTrustedFunctions = app.trustedFunction( function ( doc, oFunction, oArgs )
+ {
+ app.beginPriv();
+ var retn = oFunction( oArgs, doc )
+ app.endPriv();
+ return retn;
+ });
+}
+aebImportAnFDF = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ doc.importAnFDF(oArgs);
+ app.endPriv();
+});
diff --git a/texmf-dist/doc/latex/acrotex-js/js-files/aeb_pro.js b/texmf-dist/doc/latex/acrotex-js/js-files/aeb_pro.js
new file mode 100644
index 00000000..5dbfe4d5
--- /dev/null
+++ b/texmf-dist/doc/latex/acrotex-js/js-files/aeb_pro.js
@@ -0,0 +1,177 @@
+/*
+ AEB Pro Document Assembly Methods
+
+ Copyright (C) 2012 -- 2021 AcroTeX.Net
+ D. P. Story
+ http://www.acrotex.net
+
+ Version 1.6.1
+
+ v1.6.1 aebCreateTemplate now returns an object
+ v1.6 Added aebAddWatermarkFromText, aebLaunchURL
+ v1.5 Added aebCertifyInvisibleSign
+*/
+
+if ( typeof aebTrustedFunctions == "undefined") {
+ aebTrustedFunctions = app.trustedFunction( function ( doc, oFunction, oArgs )
+ {
+ app.beginPriv();
+ var retn = oFunction( oArgs, doc );
+ app.endPriv();
+ return retn;
+ });
+}
+aebAddWatermarkFromFile = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ var Msg=function(e){return (aebAddWatermarkFromFile.msg==undefined)?("Add Watermark from File Error: " + e.toString()):aebAddWatermarkFromFile.msg;}
+ app.beginPriv();
+ try { doc.addWatermarkFromFile(oArgs); } catch(e) {console.println(Msg(e));}
+ app.endPriv();
+ aebAddWatermarkFromFile.msg=undefined;
+});
+aebAddWatermarkFromText = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ return doc.addWatermarkFromText(oArgs);
+ app.endPriv();
+});
+aebImportIcon = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ return doc.importIcon(oArgs);
+ app.endPriv();
+});
+aebInsertPages = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ var Msg=function(e){return (aebInsertPages.msg==undefined)?("Insert Pages Error: " + e.toString()):aebInsertPages.msg;}
+ app.beginPriv();
+ try { doc.insertPages(oArgs); } catch(e) {console.println(Msg(e));}
+ app.endPriv();
+ aebInsertPages.msg=undefined;
+})
+aebAppOpenDoc = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ var Msg=function(e){return (aebAppOpenDoc.msg==undefined)?("App Open Doc Error: " + e.toString()):aebAppOpenDoc.msg;}
+ app.beginPriv();
+ try { return app.openDoc(oArgs); } catch(e) {console.println(Msg(e));}
+ app.endPriv();
+ aebAppOpenDoc.msg=undefined;
+ return retn;
+})
+aebImportTextData = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ return doc.importTextData(oArgs);
+ app.endPriv();
+});
+aebImportSound = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ return doc.importSound(oArgs);
+ app.endPriv();
+});
+aebSaveAs = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ app.execMenuItem("Save");
+ app.endPriv();
+});
+aebDocSaveAs = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ var Msg=function(e){return (aebDocSaveAs.msg==undefined)?("Doc SaveAs Error: " + e.toString()):aebDocSaveAs.msg;}
+ app.beginPriv();
+ try {
+ return doc.saveAs(oArgs);
+ } catch(e){console.println(Msg(e));}
+ app.endPriv();
+ aebDocSaveAs.msg=undefined;
+
+});
+aebExtractPages = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ return doc.extractPages(oArgs);
+ app.endPriv();
+});
+aebMailDoc = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ return doc.mailDoc(oArgs);
+ app.endPriv();
+});
+aebImportDataObject = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ return doc.importDataObject(oArgs);
+ app.endPriv();
+});
+aebSignatureSign = app.trustPropagatorFunction( function ( oArgs, field )
+{
+ app.beginPriv();
+ return field.signatureSign(oArgs);
+ app.endPriv();
+});
+aebSecurityHandlerLogin = app.trustPropagatorFunction( function ( oArgs, securityHandler )
+{
+ app.beginPriv();
+ return securityHandler.login(oArgs);
+ app.endPriv();
+});
+aebTimestampSign = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ return doc.timestampSign(oArgs);
+ app.endPriv();
+});
+aebSecurityGetHandler = app.trustPropagatorFunction( function ( oArgs, security )
+{
+ app.beginPriv();
+ return security.getHandler(oArgs);
+ app.endPriv();
+});
+aebAppGetPath = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ return app.getPath(oArgs);
+ app.endPriv();
+ return retn;
+});
+aebSignatureSetSeedValue = app.trustPropagatorFunction( function ( oArgs, field )
+{
+ app.beginPriv();
+ return field.signatureSetSeedValue( oArgs )
+ app.endPriv();
+});
+aebCertifyInvisibleSign = app.trustPropagatorFunction( function ( oArgs, field )
+{
+ app.beginPriv();
+ return field.certifyInvisibleSign( oArgs )
+ app.endPriv();
+});
+aebAddIcon=app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ doc.addIcon(oArgs);
+ app.endPriv();
+});
+aebCreateTemplate = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ var Msg=function(e){return (aebCreateTemplate.msg==undefined)?("Create Template Error: " + e.toString()):aebCreateTemplate.msg;}
+ app.beginPriv();
+ try { return doc.createTemplate(oArgs); } catch(e) {console.println(Msg(e));}
+ app.endPriv();
+ aebCreateTemplate.msg=undefined;
+
+})
+aebBrowseForDoc=app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ var retn = app.browseForDoc(oArgs);
+ app.endPriv();
+});
+aebLaunchURL=app.trustPropagatorFunction ( function ( oArgs )
+{
+ app.beginPriv();
+ var retn = app.launchURL(oArgs);
+ app.endPriv();
+});
diff --git a/texmf-dist/doc/latex/acrotex-js/js-test/test_install.pdf b/texmf-dist/doc/latex/acrotex-js/js-test/test_install.pdf
new file mode 100644
index 00000000..c2b92f25
--- /dev/null
+++ b/texmf-dist/doc/latex/acrotex-js/js-test/test_install.pdf
Binary files differ
diff --git a/texmf-dist/doc/latex/acrotex-js/js-test/test_install.tex b/texmf-dist/doc/latex/acrotex-js/js-test/test_install.tex
new file mode 100644
index 00000000..72af3a51
--- /dev/null
+++ b/texmf-dist/doc/latex/acrotex-js/js-test/test_install.tex
@@ -0,0 +1,74 @@
+\documentclass{article}
+\usepackage[designv]{web}
+\usepackage{eforms}
+
+\ifpdf\def\x{%
+ \usepackage[T1]{fontenc}
+ \usepackage[altbullet]{lucidabr}}
+ \let\copyright\textcopyright
+\else\def\x{%
+ \usepackage[altbullet]{lucidbry}}
+ \usepackage[active]{srcltx}
+\fi\x
+
+\let\pkg\textsf
+
+\begin{defineJS}{\isImportAnFDFKnown}
+console.clear(); console.show();
+if ( typeof aebImportAnFDF == "function" ) {
+ app.beep(0);
+ console.println("");
+ console.println("aeb.js is successfully installed, congratulations!");
+ console.println("You're ready to Rock with AcroTeX!");
+} else {
+ app.beep(0); app.beep(0);
+ console.println("aeb.js is not, repeat NOT, installed correctly!");
+}
+\end{defineJS}
+\begin{defineJS}{\isAddWatermarkFromFileKnown}
+if ( typeof aebAddWatermarkFromFile == "function" ) {
+ app.beep(0);
+ console.println("");
+ console.println("aeb_pro.js is successfully installed, congratulations!");
+ console.println("You're ready to Rock with AcroTeX Pro, ho, ho!");
+} else {
+ app.beep(0); app.beep(0);
+ console.println("aeb_pro.js is not, repeat NOT, installed correctly!");
+}
+\end{defineJS}
+
+\thispagestyle{empty}
+\parindent0pt\parskip6pt
+
+\begin{document}
+\begin{center}\bfseries
+ Testing the \pkg{AeB} and \pkg{AeB Pro} Installation
+\end{center}
+
+This file is used to test for proper installation of \texttt{aeb.js} and
+\texttt{aeb\_pro.js}. After following the instructions of
+\texttt{js-files/install\_jsfiles.pdf} of the \pkg{acrotex-js} distribution,
+test the installation by pressing the push buttons below.
+
+
+To test the \textsf{AeB} installation, press this button:
+\pushButton[\TU{Press to test the AeB installation}\CA{AeB}\A{\JS{\isImportAnFDFKnown}}]{btnTest}{}{11bp}
+
+To test the \textsf{AeB Pro} installation, press this button:
+\pushButton[\TU{Press to test the AeB Pro installation}\CA{AeB Pro}\A{\JS{\isAddWatermarkFromFileKnown}}]{btnTest}{}{11bp}
+
+Congratulations if a successful installation is indicated.
+
+On failure, did you close \textsf{Acrobat} before opening this file? (The JS
+files are only read once when the \textsf{Acrobat} application is opened.)
+When all else fails, try rereading the installation instructions again
+(\texttt{install\_jsfiles.pdf}), found in the \texttt{docs} folder of the \pkg{acrotex-js} package, but more
+carefully this time.
+
+Still failing? Do you have \textsf{Acrobat DC}? Perhaps your \textsf{Acrobat}
+needs to be configured. Try reading \texttt{acrobat-in-workflow.pdf}, found
+in the \texttt{docs} folder of the \pkg{acrotex-js} package.
+
+
+
+\end{document}
diff --git a/texmf-dist/source/latex/acrotex-js/acrotex-js.dtx b/texmf-dist/source/latex/acrotex-js/acrotex-js.dtx
new file mode 100644
index 00000000..cf9af1fa
--- /dev/null
+++ b/texmf-dist/source/latex/acrotex-js/acrotex-js.dtx
@@ -0,0 +1,97 @@
+%\iffalse
+%<*copyright>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% acrotex-js.sty package %%
+%% Copyright (C) 2021 %%
+%% dpstory@acrotex.net %%
+%% %%
+%% This program can redistributed and/or modified under %%
+%% the terms of the LaTeX Project Public License %%
+%% Distributed from CTAN archives in directory %%
+%% macros/latex/base/lppl.txt; either version 1 of the %%
+%% License, or (at your option) any later version. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</copyright>
+%<package>\NeedsTeXFormat{LaTeX2e}[1997/12/01]
+%<package>\ProvidesPackage{acrotex-js}
+%<package> [2021/06/19 v1.1 acrotex-js: A library of JavaScript files (dps)]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[colorlinks,hyperindex=false]{hyperref}
+\hypersetup{pdfpagemode=UseNone}
+%\pdfstringdefDisableCommands{\let\\\textbackslash}
+%\EnableCrossrefs \CodelineIndex
+\OnlyDescription % comment out for implementation details
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\InputIfFileExists{aebdocfmt.def}{\PackageInfo{web}{Inputting aebdocfmt.def}}
+ {\def\IndexOpt{\DescribeMacro}\def\IndexKey{\DescribeMacro}\let\setupFullwidth\relax
+ \PackageInfo{web}{aebdocfmt.def cannot be found}}
+\begin{document}
+\def\CMD#1{\textbackslash#1}
+\let\pkg\textsf
+\let\opt\texttt
+\let\app\textsf
+\addtolength{\marginparwidth}{3pt}
+ \GetFileInfo{acrotex-js.sty}
+ \title{\texorpdfstring{\protect\pkg{acrotex-js}}{acrotex-js}: Formatting for mobile devices}
+ \author{D. P. Story\\
+ Email: \texttt{dpstory@acrotex.net}}
+ \date{processed \today}
+ \maketitle
+ \tableofcontents
+ \DocInput{acrotex-js.dtx}
+\IfFileExists{\jobname.ind}{\newpage\setupFullwidth\par\PrintIndex}{\paragraph*{Index} The index goes here.\\Execute
+ \texttt{makeindex -s gind.ist -o acrotex-js.ind acrotex-js.idx} on the command line and recompile
+ \texttt{acrotex-js.dtx}.}
+\IfFileExists{\jobname.gls}{\PrintChanges}{\paragraph*{Change History} The list of changes goes here.\\Execute
+ \texttt{makeindex -s gglo.ist -o acrotex-js.gls acrotex-js.glo} on the command line and recompile
+ \texttt{acrotex-js.dtx}.}
+\end{document}
+%</driver>
+% \fi
+% \MakeShortVerb{|}
+% \InputIfFileExists{aebdonotindex.def}{\PackageInfo{web}{Inputting aebdonotindex.def}}
+% {\PackageInfo{web}{cannot find aebdonotindex.def}}
+% \section{Commentary}
+% This file is a dummy {\LaTeX} package. The output of \pkg{acrotex-js} produces no document
+% that is consumed by any {\LaTeX} engine. At the time of first publication of this ``package''
+% distributes the JavaScript files \texttt{aeb.js} and \texttt{aeb\_pro.js} (found in the
+% \texttt{js-files} folder of this distribution) and provides documentation of how to
+% install it, refer to \texttt{docs/install\_jsfiles.pdf}.
+%
+% \paragraph*{Packages that require this JS files.} The following is a list of packages
+% that require the proper installation of the JS files provided by this package.
+% \begin{itemize}
+% \item \texttt{aeb.js}: Required by the \pkg{insdljs} package,\footnote{Or, any package that uses \pkg{insdljs}.}
+% but for only for owners of the \app{Acrobat} application \emph{and} who use the
+% \textsf{dvips \texttt{->} Adobe Distiller}
+% or \textsf{dvips \texttt{->} ps2pdf} workflow.\footnote{There is no harm in the routine installation of this
+% file even if you don't use \app{Distiller} or \app{ps2pdf}.}
+% \item \texttt{aeb\_pro.js}: Required by the \pkg{aeb\_pro}, \pkg{thorshammer}, and \pkg{docassembly} packages.
+% \end{itemize}
+% In all cases, the JS files must be correctly installed for the above packages for them to perform as designed.
+% Refer to \texttt{docs/install\_jsfiles.pdf} for installation instructions.
+%
+% \paragraph*{Files of this distribution.}
+% \begin{itemize}
+% \item Root-level folder: \texttt{acrotex-js.dtx}, \texttt{acrotex-js.ins}, \texttt{README.md}
+% \item \texttt{docs} folder: \texttt{acrotex-js.pdf} (documentation), \texttt{install\_jsfile.pdf}
+% (installation instructions, and
+% \texttt{acrobat-in-workflow.pdf} (commentary on using \app{Acrobat} in your workflow).
+% \item \texttt{js-files}: \texttt{aeb.js}, \texttt{aeb\_pro.js} (These are the JS files to be installed,
+% follow the instructions of \texttt{install\_jsfile.pdf} in the \texttt{docs} folder.
+% \item \texttt{js-test}: \texttt{test\_install.pdf} (After installing the JS files, test whether you've
+% understood and following the instructions correctly, open this file in \app{Acrobat} and follow instructions
+% contained therein.)
+% \end{itemize}
+% \changes{v1.1}{2021/06/19}{Moved \string\texttt{test\_install.pdf} and \string\texttt{acrobat-in-workflow.pdf}
+% to this package from others}
+% \changes{v1.0}{2021/06/18}{First publication version}
+% \begin{macrocode}
+%<*package>
+% noop
+%</package>
+% \end{macrocode}
+\endinput
diff --git a/texmf-dist/source/latex/acrotex-js/acrotex-js.ins b/texmf-dist/source/latex/acrotex-js/acrotex-js.ins
new file mode 100644
index 00000000..2f358ca3
--- /dev/null
+++ b/texmf-dist/source/latex/acrotex-js/acrotex-js.ins
@@ -0,0 +1,60 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% Copyright 1999-2012 D. P. Story
+%%
+%% This file is part of the `AcroTeX eDucation Bundle'.
+%% -------------------------------------------
+%%
+%% It may be distributed under the conditions of the LaTeX Project Public
+%% License, either version 1.2 of this license or (at your option) any
+%% later version. The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\filedate{2018/04/26}
+\def\batchfile{acrotex-js.ins}
+
+\input docstrip
+\ifx\generate\undefined
+ \Msg{**********************************************}
+ \Msg{*}
+ \Msg{* This installation requires docstrip}
+ \Msg{* version 2.4 or later.}
+ \Msg{*}
+ \Msg{* An older version of docstrip has been input}
+ \Msg{*}
+ \Msg{**********************************************}
+ \errhelp{Move or rename old docstrip.tex and get a newer one.}
+ \errmessage{Old docstrip in input path}
+ \batchmode
+ \csname @@end\endcsname\end
+\fi
+
+\keepsilent
+\askforoverwritefalse
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\preamble
+\endpreamble
+
+\generate
+{%
+ \file{acrotex-js.sty}{\from{acrotex-js.dtx}{copyright,package}}
+}
+
+\Msg{***************************************************************}
+\Msg{*}
+\Msg{* \space To finish the installation you have to copy the files }
+\Msg{*}
+\Msg{* \space *.sty, *.cfg and *.def into a directory searched by TeX}
+\Msg{*}
+\Msg{***************************************************************}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
diff --git a/texmf-dist/tex/latex/acrotex-js/acrotex-js.sty b/texmf-dist/tex/latex/acrotex-js/acrotex-js.sty
new file mode 100644
index 00000000..65c69595
--- /dev/null
+++ b/texmf-dist/tex/latex/acrotex-js/acrotex-js.sty
@@ -0,0 +1,25 @@
+%%
+%% This is file `acrotex-js.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% acrotex-js.dtx (with options: `copyright,package')
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% acrotex-js.sty package %%
+%% Copyright (C) 2021 %%
+%% dpstory@acrotex.net %%
+%% %%
+%% This program can redistributed and/or modified under %%
+%% the terms of the LaTeX Project Public License %%
+%% Distributed from CTAN archives in directory %%
+%% macros/latex/base/lppl.txt; either version 1 of the %%
+%% License, or (at your option) any later version. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NeedsTeXFormat{LaTeX2e}[1997/12/01]
+\ProvidesPackage{acrotex-js}
+ [2021/06/19 v1.1 acrotex-js: A library of JavaScript files (dps)]
+\endinput
+%%
+%% End of file `acrotex-js.sty'.
diff --git a/tlpkg/tlpsrc/acrotex-js.tlpsrc b/tlpkg/tlpsrc/acrotex-js.tlpsrc
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tlpkg/tlpsrc/acrotex-js.tlpsrc