% \iffalse %<*copyright> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% dljsLib.sty package, 2002-2-9 %% %% Copyright (C) 2001-2002 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% %% the terms of the LaTeX Projet 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} %\ProvidesPackage{dljslib} % [2002/02/09 v1.0 Manage a Library of Document Level JavaScripts (dps)] %<*driver> \documentclass{ltxdoc} \usepackage[colorlinks,hyperindex]{hyperref} \pdfstringdefDisableCommands{\let\\\textbackslash}% \EnableCrossrefs \CodelineIndex \begin{document} \GetFileInfo{dljslib.sty} \title{The \texttt{dljsLib} Package} \author{D. P. Story\\ Email: \texttt{dpstory@uakron.edu}} \date{processed \today} \maketitle \tableofcontents \let\Email\texttt \DocInput{dljslib.dtx} \PrintIndex \end{document} % % \fi %\section{Introduction} % This is a companion package to the \texttt{insdljs} package. \texttt{Insdljs} gives the % document author the ability to write document level JavaScripts to the PDF docuement, when % it is finally built. I personally will be writing a number of general routines to % handle situations that arise, and I would hope that other enthusiasts of \texttt{insdljs} will % do the same. Therefore, it is desirable to gather together some general purpose routines into % a single library, and have a way of selecting the desired function or functions to be used. % %\section{The Library Procedures} % \begin{macrocode} %<*package> % \end{macrocode} % Define some convenience commands, \cs{dljsRegister} and \cs{DeclareAndRegister}, see comments that follow. % \begin{macrocode} \newcommand\dljsRegister[2][n] {\expandafter\let\csname checkout@#2\endcsname=#1} \newcommand\DeclareAndRegister[1] {\DeclareOption{#1}{\dljsRegister[y]{#1}}\dljsRegister{#1}} % \end{macrocode} % Here we ``register'' the functions contained in the library. \cs{dljsRegister} defines a % control sequence that records the name of the function (actually, the option name). This % control is set to `n'. When a package user chooses a particular function for inclusion, the % control is set to `y'. % \begin{macrocode} \dljsRegister[y]{dljslib} % \end{macrocode} % \subsection{Library Card Catalog} % The arguments of the \cs{DeclareAndRegister} command are the options of this package, and % their names represent JavaScript functions in the library. % \begin{macrocode} \DeclareAndRegister{vectors} \DeclareAndRegister{indefIntegral} % \end{macrocode} % \begin{macrocode} \ProcessOptions % \end{macrocode} % \subsection{Requirements for a Library Card} % % In order to check a function out of this library, you must have % the \texttt{insdljs} Package. The \texttt{insdljs} package itself % has software requirements: (1) the \texttt{verbatim} and % \texttt{hyperref} packages; (2) One of the fillowing, % \textsf{Distiller~5.0} or greater, \textsf{pdftex}, or % \textsf{dvipdfm}. % % \begin{macrocode} \RequirePackage{insdljs} % \end{macrocode} % % \subsection{Checkout Procedure} % % Functions can be checkout of the library by using the \texttt{dljslib} package % in the usual way. For example: %\begin{verbatim} %\documentclass{article} %\usepackage{amsmath} %\usepackage[pdftex,designi]{web} %\usepackage{exerquiz} %\usepackage[indefIntegral]{dljslib} % <- check out `indefIntegral' %\end{verbatim} % Here, we first use \texttt{exerquiz}, which has \texttt{insdljs} as a required package. % The use of this package is not limited to users of \texttt{exerquiz}, for example, we can % say %\begin{verbatim} %\documentclass{article} %\def\mydriver{dvipdfm} %\usepackage[\mydriver]{color} %\usepackage[\mydriver,colorlinks,pdfpagemode=None]{hyperref} %\usepackage[\mydriver]{insdljs} %\usepackage[indefIntegral]{dljslib} % <- check out `indefIntegral' %\end{verbatim} % However, at the time of the release of v1.0 of this package, the only functions in this % library are ones used by \texttt{exerquiz}. % % \subsection{Exiting the Library with your Checkouts} % % This package has an output stream, \cs{dljslib@verbatim@out}, % that is used to write all the functions that are to be included. % We use a control sequence \cs{js@verbatim@out} defined in % \texttt{insdljs}. We also use a verbatim write from % \texttt{insdljs} as well, the \cs{js@verbatimwrite} environment. % \cs{js@verbatimwrite} writes to the output stream pointed to % \cs{js@verbatim@out}. % \begin{macrocode} \newwrite\dljslib@verbatim@out % \end{macrocode} % This package generates only one auxiliary file, % \texttt{dljslib.ljs}, which can be deleted after the document is % latexed. The file \texttt{dljslib.ljs} (\texttt{ljs} means % ``library javascripts'') and contains the functions that are % specified in the package options. At the end of this package, % the file \texttt{dljslib.ljs} is input back into the calling % document where the package \texttt{insdljs} takes over. % \begin{macrocode} \immediate\openout\dljslib@verbatim@out=dljslib.ljs % \end{macrocode} % \subsection{The Catalog and Checkout Mechanism} % \begin{macro}{library@holding} % This is a simple environment, it reads its parameter, and if that option was specified by the % user, it writes the function verbatim to the \texttt{dljslib.ljs}, otherwise, it comments out % that function using the \texttt{comment} environment from the \texttt{verbatim} package. % This environment uses, \texttt{js@verbatimwrite}, an environment % defined in the \texttt{insdljs} package. % \begin{macrocode} \newenvironment{library@holding}[1] {% \expandafter\ifx\csname checkout@#1\endcsname y% \let\js@verbatim@out=\dljslib@verbatim@out \let\dljs@verbatim=\js@verbatimwrite \let\enddljs@verbatim=\endjs@verbatimwrite\else \let\dljs@verbatim=\comment \let\enddljs@verbatim=\endcomment\fi\dljs@verbatim }{\enddljs@verbatim} % \end{macrocode} % \end{macro} %\section{The DLJS Library} % We finaly reach the ``stacks'', the location of the actual library holdings. % % \medskip\noindent This item must always accompany the collection of functions that are to be % checked out. This is the beginning of the \texttt{insDLJS} environment. To continue this library analogy, % this of this as the ``front wrapper'' or ``front cover'' of your library selections. It contains the % ``name'' of the library from which you checked out your selections. % \begin{macrocode} \begin{library@holding}{dljslib} \begin{insDLJS}[dljslib]{dljslib}{The dljs Library} var dljslib = true; \end{library@holding} % \end{macrocode} %\subsection{The Stacks} % Now we reach of the beginning of the stacks. There are several sections of the library, currently, % \nameref{s:respfunctions} and \nameref{s:compfunctions}. % % \subsection{Response Functions}\label{s:respfunctions} % % \textbf{Used by Exerquiz.} In this section we catalog response functions. A response function is the one that % \cs{RespBoxMath} calls to process the user's response to a math fill-in question. See the sample file % \texttt{jqzspec.tex} for a detailed explanation of this type of function. % % \subsubsection{\texttt{vectors}}\label{vectors} % \begin{macro}{vectors} % This function attempts to process questions that have vectors % as answers. Note the name of the function is \texttt{ProcVec}, this is the name used to call it. %\begin{verbatim} %$\vec a + \vec b = \RespBoxMath{<4, 4, 4>}{1}{.0001}24*{ProcVec}$ %\end{verbatim} %See also the file \texttt{jqzspec.tex} for more details. % \begin{macrocode} \begin{library@holding}{vectors} function ProcVec (flag,CorrAns,n,epsilon,a,b,indepVar,comp) { ok2Continue = true; var i, success, truthCnt=0; var aScalar, scalar = 1; var fieldname = event.target.name; var re =/(.*)(\*)(\s*<)/; var UserAns = event.value; CorrAns = stripWhiteSpace (CorrAns); UserAns = stripWhiteSpace (UserAns); // sets ok2Continue if ( !ProcessIt || !ok2Continue ) return null; if (!/<|>/.test(UserAns)) { app.alert("I'm looking for a vector. " + "You need to use proper vector notation.", 3); return null; } if (!CkBalP(UserAns,"<",">")) { app.alert("Angle brackets are not balanced.", 3); return null; } // see if there is a scalar multiple to the left of '<' if (re.test(UserAns)) { aScalar = re.exec(UserAns); scalar = aScalar[1]; UserAns = UserAns.replace(re,"$3"); } CorrAns = CorrAns.replace(/<|>/g, ""); // strip of < and > UserAns = UserAns.replace(/<|>/g, ""); aUserAns = UserAns.split(","); aCorrAns = CorrAns.split(","); if (scalar != 1) for (i=0; i %try { %<*package> if (isNaN(eqC = eval(_F)-eval(_G))) return -1; % %} catch(e) { return null; } %<*package> eqx = _c; _F = eval(_F); % %try { %<*package> if(isNaN(_G = eval(_G))) return -1; % %} catch(e) { return null; } %<*package> return abs( _F - _G - eqC ); } } \end{library@holding} % \end{macrocode} % \end{macro} % Finally, we have the ``back wrapper'' or ``back cover'' of the selected materials. We close the % \texttt{insDLJS} environment % \begin{macrocode} \begin{library@holding}{dljslib} \end{insDLJS} \end{library@holding} % \end{macrocode} % \section{Out the Door and Close it behind you} % \begin{macrocode} \immediate\closeout\dljslib@verbatim@out % \end{macrocode} % \section{Back Home with your Selections} % \begin{macrocode} \input{dljslib.ljs} % % \end{macrocode} \endinput