%\iffalse %<*copyright> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% eCards.sty package, 2003-3-10 %% %% Copyright (C) 1999-2002 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% 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{eCards} % [2003/05/18 v1.0 eCards: An electronic flash cards package (dps)] %<*driver> \documentclass{ltxdoc} \usepackage[dviwindo,colorlinks,hyperindex]{hyperref} %\pdfstringdefDisableCommands{\let\\\textbackslash} %\EnableCrossrefs \CodelineIndex \begin{document} \GetFileInfo{eCards.sty} \title{eCards: Electronic Flash Cards} \author{D. P. Story\\ Email: \texttt{dpstory@uakron.edu}} \date{processed \today} \maketitle \tableofcontents \let\Email\texttt \DocInput{eCards.dtx} \PrintIndex \end{document} % % \fi % \MakeShortVerb{|} % \StopEventually{} % % \DoNotIndex{\def,\edef,\gdef,\xdef,\global,\long,\let} % \DoNotIndex{\expandafter,\string,\the,\ifx,\else,\fi} % \DoNotIndex{\csname,\endcsname,\relax,\begingroup,\endgroup} % \DoNotIndex{\DeclareTextCommand,\DeclareTextCompositeCommand} % \DoNotIndex{\space,\@empty,\special} % % \begin{macrocode} %<*package> % \end{macrocode} % % \section{Introduction} % % The initial version of this package was developed at the request of my colleague, Dr.\ Thomas % Price, for use in the senior honors project of Ms.\ Katie Jones on % \href{http://www.math.uakron.edu/~teprice/Trig/}{Trig Flash Cards}. % Upon completion of the honors project, I generalized and extended % the original package developed specifically for them. % % \section{Documentation} % % In this section, the major elements of this package are highlighted. For those % who want to know more, you can peruse the {\LaTeX} code, there are comments % contained there as well. % % \subsection{Preamble: Required Packages and Options} % % \subsubsection{Required Packages} % % This package depends heavily on the % \textbf{\href{http://www.math.uakron.edu/~dpstory/webeq.html} % {Acro\negthinspace\TeX{} eDucation Bundle}}: (1) the \textsf{web} % package provides page setup, backgrounds, and navigational % elements; (2) the \textsf{exerquiz} package allows you to author % the questions, both non-responsive and responsive (fill-in and % multiple choice); and (3) the \textsf{insdljs} packages is the % mechanism for introducing document-level JavaScripts into the % final document. % % Each of the packages listed above have their own required packages: % \textsf{hyperref}, \textsf{color}, \textsf{verbatim}, \textsf{everyshi} % and \textsf{eso-pic}. Theses are all available as part of the standard % distribution of {\LaTeX} or through any CTAN site. % % \subsubsection{Options} % % \paragraph{eCards options.}\hskip-\lastskip\ % The \textsf{eCards} package really has only 4 options: % \begin{enumerate} % \item \texttt{nohints}: If you do not want to provide hints in your eCards, % use this option. See also the comments in \Nameref{hint}. % \item \texttt{listing}:\label{listing} This option gives you a printable version of your % eCards. In this way, you can proofread, check your questions, hints, % and answers. Suggested packages and options are given below: %\begin{verbatim} %\usepackage[,forpaper,tight,nodirectory]{web} %\usepackage[solutionsafter,proofing,preview]{exerquiz} %\usepackage[listing]{eCards} %\end{verbatim} % \item \texttt{memLogo}: The logo, if any, is read and re-read % for each page on which it appears. Using this option, the logo % is read once and saved in a box for use. % \item \texttt{custom}: If this option is chosen, the package % will look for and input a file \texttt{eCard.cus}. This file can % be used to customize the environments. This file should be kept % in the source directory, not in the {\LaTeX} search path. % \end{enumerate} % % \paragraph{Other options.}\hskip-\lastskip\ % Selecting the various options of the \textsf{web} and % \textsf{exerquiz} packages can give you different looks. It is % important to be aware of all the options associated with these % two package; in the paragraphs below, various options are % discussed that may be useful in \textsf{eCards}. % %\paragraph{Useful Web Package Options.}\hskip-\lastskip\ % There are three background/panel options: \texttt{usetemplates}, % \texttt{rightpanel} and \texttt{leftpanel}. Using the % \texttt{usetemplates} option does not give you the vertical % navigational strip, but it does give you the background colors; % the \texttt{rightpanel} and \texttt{leftpanel} given you a % vertical panel on the right and left, respectively. Use one of % these three options only, if any at all. Using none of these three % will just get you the default white background. % %There are certain ``standard'' page designs, or you can create your own using %the \cs{margins} and \cs{screensize}; the demo document has %\begin{verbatim} %\margins{.25in}{.25in}{24pt}{.25in} % left,right,top, bottom %\screensize{3.72in}{366.24bp} % height, width %\end{verbatim} % See the \textsf{Web} package documentation for details on these and other % options. % % \paragraph{Useful Exerquiz Package Options.}\hskip-\lastskip\ % If you are not using multiple choice or fill-in questions, you should use % the \texttt{exercisesonly} option. This removes much of the document level JavaScript % from the PDF document. % % For authors that use the full Acrobat~5.0, or the newer Acrobat % 6.0 Standard or Acrobat 6.0 Professional, you can use the % \texttt{execJS} option. If this option is taken, then when the % document is first loaded into Acrobat (following distillation, or % creation using \textsf{dvipdfm} or \textsf{pdftex}), the document % will be automatically saved; this saves any imported document % level JavaScript in the document. The document always needs to be saved % after creation so save the scripts with the document, this does it automatically % so you can't forget to do it---as one of my colleagues once did. % % The \texttt{nosolutions} option removes the \texttt{response} environment % leaving only the questions. The \texttt{proofing} and \texttt{preview} options % can be useful for proofreading, as described in the \texttt{\hyperref[listing]{listing}} % option described above. % % \subsection{\protect\cs{begin\{document\}}: Start creating Cards} % % The process of creating these electronic cards is quite simple, the sections below % describe the various environments used. % % \subsubsection{The \texttt{card} Environment} % % The main environment is the \texttt{card} environment, which is used for posing % questions, offering a hint, and an answer. The \hypertarget{cardsyntax}{syntax} is %\begin{verbatim} %\begin{card} % < a question > % \begin{response} % \begin{hint} % < a hint > % \end{hint} % \begin{answer} % < an answer > % \end{answer} % \end{response} %\end{card} %\end{verbatim} % \textcolor{red}{Important.} You can pose a question which requires % a verbal response, or one for which there is a choice of % alternatives, or a fill-in the blank (math or text). See the demo % file \texttt{eCardstst.tex} for examples. % % \subsubsection{The \texttt{response} Environment} % % Immediately following and nested within the \texttt{card} environment is the \texttt{response} % environment. This sets things up for the responses to the question: the hint % and the answer. % % \subsubsection{The \texttt{hint} Environment}\label{hint} % % The first environment to appear within the \texttt{response} is % the \texttt{hint} environment. Here you can provide additional % information to help the student answer the question successfully. % I've you've posed a multiple choice or fill-in question, you can simply % copy the multiple choice or fill-in into the hint, just as I have done % in the demo file \texttt{eCardstst.tex}. % % In this release, hints can be provided for \textbf{all} of the questions or for % \textbf{none} of the questions. You can enter hints using the % \texttt{hint} environment, illustrated \hyperlink{cardsyntax}{above}, or not include a % \texttt{hint} environment. When you do not want to include % hints---whether you've entered the environments or not---use the % \texttt{nohints} package option. This will convert the % \texttt{hint} environment into a \texttt{comments}, and redefined % some of the navigational buttons. % % \subsubsection{\texttt{answer} Environment} % % After the hint environment comes the answer environment where the answer to the original question % can be presented. At the end of this environment, you need to back out of your nest: % \verb+\end{answer}+, \verb+\end{response}+ and \verb+\end{card}+. % % \subsection{\protect\cs{end\{document\}}} % % \section{Main Code} % % \subsection{Declare Options} % % This package builds upon the \textbf{Acro\negthinspace\TeX{} eDucation Bundle}, the options of the % \textsf{web} and \textsf{exerquiz} packages can be used with with \textsf{eCards}. Additional options % are declared below. % \begin{macro}{memLogo} % The logo, if any, is read and re-read for each page on which it appears. Using this % option, the logo is read once and saved in a box for use. % \begin{macrocode} \DeclareOption{memLogo}{\let\@memLogo=y} \let\@memLogo=n % \end{macrocode} % \end{macro} % \begin{macro}{listing} % The \texttt{listing} gives a listing of questions, hints, and answers. When used in conjunction % with various \textsf{exerquiz} options, this option can be used to review all cards and answers. % Suggested options: %\begin{verbatim} %\usepackage[,forpaper,tight,nodirectory]{web} %\usepackage[solutionsafter,proofing,preview]{exerquiz} %\usepackage[memLogo,listing]{eCards} %\end{verbatim} % The boolean switch \cs{ecListing} can be used to get a better looking listing by removing % graphics---see the demo file \texttt{eCardstst.tex}. % \begin{macrocode} \DeclareOption{listing}{\ecListingtrue} \newif\ifecListing \ecListingfalse % \end{macrocode} % \end{macro} % \begin{macro}{custom} % If this option is chosen, the package will look for and input a file \texttt{eCard.cus}. % This file can be used to customize the environments. This file should be kept in the % source directory, not in the {\LaTeX} search path. % \begin{macrocode} \DeclareOption{custom}{\let\@ecCustom=y} \let\@ecCustom=n % \end{macrocode} % \end{macro} % \begin{macro}{nohints} % In some applications, the author may not want to have hints provided, so, compile % the document with the \texttt{nohints} option. % \begin{macrocode} \DeclareOption{nohints} {% \let\@ecNoHints=y \def\hintDest{ex.\exnoCard}% \def\solnDest{ex.\exnoCard}% } \let\@ecNoHints=n \def\hintDest{ex.\exnoCard}% \def\solnDest{ex.\exnoCard.s}% % \end{macrocode} % \end{macro} % \subsection{ProcessOptions and Required Packages} % \begin{macrocode} \ProcessOptions \RequirePackage{web} \RequirePackage{exerquiz} %\RequirePackage{graphicx} % \end{macrocode} % \subsection{String Data} % \begin{macro}{\cardsFinishedMsg} % When user finishes the cards, a message appears announcing that event. The % \cs{cardsFinishedMsg} holds the content of that message. % \begin{macrocode} \newcommand{\cardsFinishedMsg}[1]{\def\CARDSFINISHED{#1}} \cardsFinishedMsg{You've seen all the cards!} % \end{macrocode} % \end{macro} % \subsection{Colors for Backgrounds} % Some definitions for coloring the background page for the question page, the % hint page and the answer page. % \begin{macrocode} \textBgColor{cornsilk} \def\cardColor#1{\def\@cardColor{#1}} \def\hintColor#1{\def\@hintColor{#1}} \def\solnColor#1{\def\@solnColor{#1}} % \end{macrocode} % Default colors % \begin{macrocode} \cardColor{vlightblue} \hintColor{cornsilk} \solnColor{webyellow} % \end{macrocode} % \subsection{Modifying Exerquiz Environments} % \begin{macrocode} \let\web@copyright=\@gobble \let\exnoCard=\the@exno \let\web@rightheader=\@empty \def\io#1{\immediate\write\@auxout{#1}} % \end{macrocode} % \subsubsection{Modify the \texttt{exercise} Environment} % The \cs{endsolnexerhookaux} macro gets executed just prior to the end of the % solution environment, but before the final trailer is written to the .sol file. Here, % we use it to insert a navigational bar at the bottom of the solution page. % \begin{macrocode} \def\endsolnexerhookaux{% \ifnum\@panelconfig=0\relax \immediate\write\verbatim@out {\string\insNaviBar*{\hfil\string\NextCard\hfil}}% \fi } \def\include@solutions{% \let\webnewpage=\relax \immediate\closeout\ex@solns \ifeq@nosolutions\else \iftherearesolutions\newpage\markright{\exsecrunhead}% \ifx\webnewpage\relax \def\webnewpage{\let\webnewpage=\newpage}% \fi \eqsolutionshook \addcontentsline{toc}{section} {\protect\numberline{}\exsectitle}% \input{\jobname.sol}% \fi \fi } % \end{macrocode} % Write the total number of questions (cards) to the aux file. % \begin{macrocode} \AtEndDocument{\io{\string\gdef\string\totalCards{\the@exno}}\clearpage} % \end{macrocode} % This macro holds the number of cards composed. % \begin{macrocode} \def\theNumCards{\csname totalCards\endcsname} % \end{macrocode} % \cs{nMarker} identifies the type of page, 0 for a question, 1 for a hint, 2 for a solution % \begin{macrocode} \def\nMarker{0} % \end{macrocode} % Redefine \cs{ReturnTo} so there is no link, we encourage the user to use the navigational % buttons. % \begin{macrocode} \def\ReturnTo#1#2{\eq@fititin#2} % \end{macrocode} % Miscellaneous macro definitions associated with the \textsf{exercise} environment. % \begin{macrocode} \renewcommand\exsecrunhead{} \renewcommand\exlabel{} \renewcommand\exsectitle{} % \end{macrocode} % \subsubsection{Modify the \texttt{shortquiz} Environment} % \begin{environment}{multiChoice} % An environment for posing a multiple choice question, based on the \texttt{shortquiz} environment % of \textsf{exerquiz}. % \begin{macrocode} \newenvironment{multiChoice}[1] {% \par\smallskip\def\aftershortquizskip{}% \def\sq@priorhook{}\renewcommand\sqlabel{\@gobble}% \ifnum\nMarker=0\relax \def\sqWrongRespJS{app.alert(\eqsqwgmsg,3); this.gotoNamedDest("\hintDest");}% % this.gotoNamedDest("ex.\exnoCard");}% \fi \begin{shortquiz} \begin{answers}[\solnDest]{#1}% % \begin{answers}[ex.\exnoCard.s]{#1}% }% {% \end{answers} \end{shortquiz} } % \end{macrocode} % \end{environment} % \subsubsection{Modify the \texttt{oQuestion} Environment} % Set the appearance of any text fields that the author might use. % \begin{macrocode} \everyRespBoxTxt{\BG{1 1 1}}\everyRespBoxMath{\BG{1 1 1}} % \end{macrocode} % \begin{environment}{fillIn} % The \texttt{fillIn} environment one to pose a fill in type question, either % text or math. Based on the \texttt{oQuestion} environment of \textsf{exerquiz}. % \begin{macrocode} \newenvironment{fillIn} {% \def\RespBoxTxtOnBlur{ecOnBlurRespBox(retn, \exnoCard, \nMarker);}% \unskip\begin{oQuestion}{\ifnum\nMarker>0\relax \solnDest\else\hintDest\fi}% % \unskip\begin{oQuestion}{ex.\exnoCard\ifnum\nMarker>0.s\fi}% } {\end{oQuestion}} % \end{macrocode} % \end{environment} % \subsection{New Environments} % \subsubsection{The \texttt{card} Environment} % \begin{environment}{card} % This is the main environment for writing questions, hints and answers. This environment % encloses all. % \begin{macrocode} \newenvironment{card} {% \newpage \gdef\nMarker{0} \def\eqexheader{\noindent} \renewcommand\exsllabelformat{\noindent} \renewcommand\exrtnlabelformat{} \renewcommand\exsecrunhead{} \ifnum\@panelconfig=0\relax \def\exersolnheadhook {\string\def\string\solndest{\solnDest}}% % {\string\def\string\solndest{ex.\exnoCard.s}}% \else \def\exersolnheadhook{\string\def\string\exnoCard{\exnoCard}% \string\def\string\solndest{\solnDest}% \string\gdef\string\nMarker {\if\@ecNoHints y2\else1\fi}\string\defineSoln}% % \string\def\string\solndest{ex.\exnoCard.s}% % \string\gdef\string\nMarker{1}\string\defineSoln}% \fi \begin{exercise} \textBgColor{\@cardColor}% \headCard }% {% \tailCard \end{exercise}% \ifnum\@panelconfig=0\relax\aftergroup\cardNaviBar\fi } % \end{macrocode} % \end{environment} % \begin{macro}{\headCard} % The ``design'' of the ``question'' page. Can re-design. % \begin{macrocode} \newcommand{\headCard} {% \vspace*{\stretch{.1}}% \begin{center}% \Large\textbf{QUESTION}\par\vspace*{.25in}% \begin{minipage}{.85\linewidth}% \large\unskip\noindent\ignorespaces% } % \end{macrocode} % \end{macro} % \begin{macro}{\tailCard} % Complete any environments begun by \cs{headCard} % \begin{macrocode} \newcommand{\tailCard} {% \end{minipage} \end{center} \par\vspace{\stretch{2}}% } % \end{macrocode} % \end{macro} % \subsubsection{The \texttt{response} Environment} % \begin{environment}{response} % Nested within the \texttt{card} environment is the % \texttt{response} environment, which, in turn, contains the % \texttt{hint} and \texttt{answer} environments. This basically % the \texttt{solution} environment for an \texttt{exercise} of % \textsf{exerquiz}. % \begin{macrocode} \newenvironment{response} {\solnexer@woparts[0pt]}{\endsolnexer@woparts} % \end{macrocode} % \end{environment} % \begin{environment}{hint} % Right now, a hint is required. Place this environment within the \texttt{response} % environment and \textit{before} the \texttt{answer} environment. % \begin{macrocode} \newenvironment{hint} {% \textBgColor{\@hintColor}% \headHint }% {% \tailHint \ifnum\@panelconfig=0\relax \insNaviBar{\hfill\hintSoln\ \hintNextCard\hfill}\fi \newpage\gdef\nMarker{2}\noindent\hypertarget{\solndest}{}% } \if\@ecNoHints y% \let\hint=\comment \let\endhint=\endcomment \fi % \end{macrocode} % \end{environment} % \begin{macro}{\headHint} % The ``design'' of the ``hint'' page. Can re-design. % \begin{macrocode} \newcommand{\headHint} {% \vspace*{\stretch{.1}}% \begin{center}% \Large\textbf{HINT}\par\vspace*{.25in}% \begin{minipage}{.85\linewidth}% \large\unskip\noindent\ignorespaces% } % \end{macrocode} % \end{macro} % \begin{macro}{\tailHint} % Close any environments begun in \cs{headHint} % \begin{macrocode} \newcommand{\tailHint} {% \end{minipage} \end{center} \par\vspace{\stretch{2}}% } % \end{macrocode} % \end{macro} % \subsubsection{The \texttt{answer} Environment} % \begin{environment}{answer} % The \texttt{answer} environment follows the \texttt{hint}, also listed within % the \texttt{response} environment. % \begin{macrocode} \newenvironment{answer} {% \textBgColor{\@solnColor}% \headAnswer }% {% \tailAnswer } % \end{macrocode} % \end{environment} % \begin{macro}{\headAnswer} % The ``design'' of the ``answer'' page. Can re-design. % \begin{macrocode} \newcommand{\headAnswer} {% \vspace*{\stretch{.1}}% \begin{center}% \Large\textbf{ANSWER} \\\vspace*{.25in}% \begin{minipage}{.85\linewidth}% \large\unskip\noindent\ignorespaces% } % \end{macrocode} % \end{macro} % \begin{macro}{\tailAnswer} % Close any environments opened by \cs{headAnswer} % \begin{macrocode} \newcommand{\tailAnswer} {% \end{minipage} \end{center} \vspace*{\stretch{2}} } % \end{macrocode} % \end{macro} % \subsection{Navigational Support} % In this section we build navigational support. % \begin{macrocode} \def\iconWidth{40pt}\def\iconHeight{15pt} % \end{macrocode} % \begin{macro}{\ecHomePage} % \begin{macro}{\ecLogo} % \begin{macro}{\ecLogoLink} % \cs{ecHomePage}, for the `Home' button, and \cs{ecLogo}, for the logo. The argument % for \cs{ecLogo} should be a LaTeX graphics command such as \cs{includegraphics}. See % the default for an example. With \cs{ecLogoLink}, you can optionally associate a link % with your logo. % \begin{macrocode} \def\ecHomePage#1{\def\@ecHomePage{#1}} \ecHomePage{http://www.math.uakron.edu/\string~dpstory/acrotex.html} \def\ecLogo#1{\def\@ecLogo{#1}} \ecLogo{\includegraphics[scale=.4]{graphics/uakron}} \def\ecLogoLink#1{\def\@ecLogoLink{#1}} \let\@ecLogoLink=\@empty % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \subsubsection{Define JS Actions for Icons} % Below are some JavaScript definitions that are used for navigation. % \begin{macrocode} \def\makeesc#1{\catcode`#1=0\relax} % \end{macrocode} % \DescribeMacro{\fsJS}\noindent % Action for the fullscreen button `FS'. % \begin{macrocode} \begin{defineJS}{\fsJS} if (app.viewerVersion < 5.0) app.fullscreen = !app.fullscreen else { app.fs.cursor = cursor.visible; app.fs.defaultTransition = ""; app.fs.useTimer = false; app.fs.isFullScreen = !app.fs.isFullScreen; } \end{defineJS} % \end{macrocode} % \DescribeMacro{\beginJS} % This is the JavaScript for the begin button `Begin'. % \begin{macrocode} \begin{defineJS}[\makeesc\@]{\beginJS} aCardsReviewed = new Array(); getNextCard(); this.resetForm(); var f = this.getField("ex"); if ( f != null ) { var g = f.getArray(); for (var i = 0; i < g.length; i++) g[i].strokeColor = @eqDefaultColor; } \end{defineJS} % \end{macrocode} % \subsubsection{Define Nagational Icons} % Some navigation icons, \cs{newNaviIcon} is defined in the \textsf{Web Package}. % \begin{macrocode} % if nohint option is used, this is the JS action when hint is clicked. \newcommand\noHintJSAction{} \newNaviIcon[j]{\Soln}\iconWidth\iconHeight{\footnotesize Soln} {\ifnum\nMarker=2\relax\else this.gotoNamedDest("\solnDest");\fi} % this.gotoNamedDest("ex.\exnoCard.s");\fi} \newNaviIcon[j]{\Hint}\iconWidth\iconHeight{\footnotesize Hint} {\if\@ecNoHints y\noHintJSAction \else\ifnum\nMarker=0this.gotoNamedDest("\hintDest");\fi\fi} % {\if\@ecNoHints y\noHintJSAction % \else\ifnum\nMarker=0 this.gotoNamedDest("ex.\exnoCard");\fi\fi} \newNaviIcon[j]{\NextCard}\iconWidth\iconHeight{\footnotesize Next} {getNextCard();} \newNaviIcon[j]{\hintNextCard}\iconWidth\iconHeight {\footnotesize Next}{getNextCard();} \newNaviIcon[j]{\hintSoln}\iconWidth\iconHeight{\footnotesize Soln} {this.gotoNamedDest("\solndest");} \newNaviIcon[j]{\Begin}\iconWidth\iconHeight {\footnotesize Begin}{\beginJS} \newNaviIcon[l]{\Home}\iconWidth\iconHeight{\footnotesize Home} {\ifnum\arabic{page}=1\relax\def\next{\href{\@ecHomePage}}\else \def\next{\hyperlink{page.1}}\fi\next} \newNaviIcon[j]{\FullScreen}\iconWidth\iconHeight {\footnotesize FS}{\fsJS} \newNaviIcon[j]{\Close}\iconWidth\iconHeight{\footnotesize Close} {app.execMenuItem("Close")} % \end{macrocode} % If \cs{@memLogo} has a value of `y', then the logo is put in a box and copied % onto each page; otherwise, the logo is read from its file on each page. % \begin{macrocode} \edef\@@Logo{\if\@memLogo y\relax \noexpand\unhcopy\noexpand\Logo\else\noexpand\@ecLogo\fi} % \end{macrocode} % Build the button panel for the navigational bar. Can re-design as desired. % \begin{macrocode} \ifnum\@panelconfig>0\relax % \end{macrocode} % if \cs{@panelconfig} (a macro defined in \textsf{web}, is positive, then the author has chosen % a left or a right navigational panel. So, we must build a panel. % \begin{macro}{\panelNaviGroup} % This is the group of panel buttons used for navigational purposes. % \begin{macrocode} \renewcommand\panelNaviGroup {% \def\iconWidth{28pt} \ifnum\thepage=1\relax \parbox[c]{58pt} {% \Begin\hfil\FullScreen\\ \Close\hfil\Home }% \else \parbox[c]{58pt} {% {\ifnum\nMarker>0\relax \navibarTextColor{lightblue}\fi \if\@ecNoHints y\relax \navibarTextColor{lightblue}\fi\Hint}\hfil {\ifnum\nMarker=2\relax \navibarTextColor{lightblue}\fi\Soln}\\ \NextCard\hfil\Home }% \fi } % \end{macrocode} % \end{macro} % If \cs{@memLogo} is `y', create a new box, read logo with \cs{@ecLogo}, and store % in box % \begin{macrocode} \newbox\Logo \if\@memLogo y\relax \AtBeginDocument{\global\setbox\Logo = \hbox{\@ecLogo}} \fi % \end{macrocode} % \begin{macro}{\buildpanel} % The \cs{buildpanel} command is defined in the \textsf{Web Package} and determines the layout of % the vertical navigational panel. You can re-design your own. % \begin{macrocode} \buildpanel {% \ifx\@ecLogoLink\@empty\@@Logo \else\href{\@ecLogoLink}{\@@Logo}\fi \par\vspace{\stretch{1}}% \rotatebox{-90}{\aebLogo}% \par\vspace{\stretch{1}}% \panelNaviGroup } % \end{macrocode} % \end{macro} % Delay the expansion of the \cs{newNaviIcon} macro for the solution page % \begin{macrocode} \def\defineSoln{\newNaviIcon[j]{\Soln}\iconWidth\iconHeight {\footnotesize Soln}{this.gotoNamedDest("\solndest");} \def\sqWrongRespJS{app.alert(\eqsqwgmsg,3); this.gotoNamedDest("\solndest");}% } \else % \end{macrocode} % \begin{macro}{\cardNavibar} % \cs{@panelconfig} must be zero, the author does not want a navigational panel, so well % put buttons at the bottom of each page to navigate by. % Standard navigational bar. % \begin{macrocode} \def\cardNaviBar{\insNaviBar{\hfill \if\@ecNoHints n\Hint\ \fi\Soln\ \NextCard \ \Home\hfill}% } % \end{macrocode} % \end{macro} % \begin{macrocode} \fi % \end{macrocode} % \subsection{Document Level JavaScript} % Insert document level JavaScripts to get the functionality of randomly selected questions. % % \smallskip\noindent If author has used the \texttt{nodljs} or \texttt{exercises} only, then % we need to turn the \textsf{insdljs} package back on by emitting % \begin{macrocode} \let\importdljs=y % \end{macrocode} % This is the JavaScript to control the eCards action. Some global variables followed by the % \texttt{getNextCard()} method. % \begin{macrocode} \begin{insDLJS}[isCardloaded]{flashcrd}{Flash Card JS} var isCardloaded=true; var maxNumberCards = 100; var aCardsReviewed = new Array(); var cardsFinished = "\CARDSFINISHED"; function getNextCard() { numCards = \theNumCards; var nCardsReviewed = aCardsReviewed.length; if ( nCardsReviewed == numCards ) { app.alert(cardsFinished,3); this.gotoNamedDest("page.1"); } else { var look4Next = true; while (look4Next) { var nextCard = Math.random(); nextCard *= maxNumberCards; nextCard = Math.ceil(nextCard); nextCard \%= numCards; nextCard += 1; for ( var i = 0; i < nCardsReviewed; i++) if ( aCardsReviewed[i] == nextCard ) break; if ( i == nCardsReviewed ) look4Next = false; } aCardsReviewed.push(nextCard); this.gotoNamedDest("qex."+nextCard); } } % \end{macrocode} % We also define a function \texttt{ecOnBlurRespBox()} to % correctly control the page changes: If a wrong answer is given, then we go to % the hint or the solution depending on whether user is responding to the original % question or to the hint. % \begin{macrocode} function ecOnBlurRespBox (retn, exnoCard, nMarker) { if (retn != null) { if (retn) { app.alert(\eqsqrtmsg,3); var dest = "ex." + exnoCard + ".s"; this.gotoNamedDest(dest); } else { app.alert(\eqsqwgmsg,3); if (nMarker==0) { var dest = "ex." + exnoCard; this.gotoNamedDest(dest); } else { var dest = "ex." + exnoCard + ".s"; this.gotoNamedDest(dest); } } } else { var str = event.target.value.toString(); if (str.replace(/\s/g,"") == "") event.target.strokeColor = \eqDefaultColor; } } \end{insDLJS} % \end{macrocode} % This requires the document author to be using the full Acrobat 5.0 or greater, not % just the Adobe Reader. % \begin{macrocode} \begin{execJS}{execjs} app.execMenuItem("Save"); \end{execJS} % \end{macrocode} % If we have the \texttt{listing} option taken, then we import the \texttt{eCardsList.def} % file to redefine portions of the \texttt{card} environment. % just the Adobe Reader. % \begin{macrocode} \ifecListing \input{eCardsList.def} \fi % \end{macrocode} % If document author wants to modify these environments, s/he can place redefinitions in % \texttt{eCard.cus}. % \begin{macrocode} \if\@ecCustom y\InputIfFileExists{eCard.cus}{}{}\fi % % \end{macrocode} % \subsection{Support for the \texttt{listing} option} % When the \texttt{listing} option is taken, we list out the questions, hints, and answers. % In this section, a number of environments and commands are defined, the name of each % begin with `\texttt{listing@}'. The document author can \cs{renewcommand} there to % create a printed listing of easy review. If you say %\begin{verbatim} %\usepackage[dvipsone,forpaper,tight,nodirectory]{web} %\usepackage[execJS,solutionsafter,proofing,preview]{exerquiz} %\usepackage[memLogo,listing]{eCards} %\end{verbatim} % then the multiple choice and fill-in questions will display the correct answers. Place any % customizations in a text field named \texttt{eCards.cus}, and use the \texttt{custom} % option. % \subsubsection{The \texttt{card} Environment} % \begin{macrocode} %<*listing> % \end{macrocode} % \begin{environment}{card} % This is the main environment for writing questions, hints and answers. This environment % encloses all. % \begin{macrocode} \newcounter{ecCnt} \renewcommand\exsolafter{} \eqexerskip{0pt} \newenvironment{listing@card} {% \stepcounter{ecCnt}% \gdef\nMarker{0}% \def\eqexheader{\noindent}% \renewcommand\exsllabelformat{\noindent}% \renewcommand\exrtnlabelformat{}% \renewcommand\exsecrunhead{}% \begin{exercise}% \textBgColor{\@cardColor}% \headCard }% {% \tailCard \end{exercise}% } %\let\card = \listing@card %\let\endcard = \endlisting@card % \end{macrocode} % \end{environment} % \begin{macro}{\headCard} % The ``design'' of the ``question'' page. Can re-design. % \begin{macrocode} \newcommand{\listing@headCard} {% \unskip\makebox[0pt][r] {\textbf{\arabic{ecCnt}.\enspace}}\ignorespaces% } %\let\headCard = \listing@headCard % \end{macrocode} % \end{macro} % \begin{macro}{\tailCard} % Complete any environments begun by \cs{headCard} % \begin{macrocode} \newcommand{\listing@tailCard}{\par} %\let\tailCard = \listing@tailCard % \end{macrocode} % \end{macro} % \subsubsection{The \texttt{response} Environment} % \begin{environment}{response} % Nested within the \texttt{card} environment is the % \texttt{response} environment, which, in turn, contains the % \texttt{hint} and \texttt{answer} environments. This basically % the \texttt{solution} environment for an \texttt{exercise} of % \textsf{exerquiz}. % \begin{macrocode} \newenvironment{listing@response} {\solnexer@woparts[0pt]}{\endsolnexer@woparts} %\let\headresponse = \listing@response %\let\endresponse = \listing@response % \end{macrocode} % \end{environment} % \begin{environment}{hint} % Right now, a hint is required. Place this environment within the \texttt{response} % environment and \textit{before} the \texttt{answer} environment. % \begin{macrocode} \newenvironment{listing@hint} {% \textBgColor{\@hintColor}% \headHint }% {% \tailHint } %\let\headhint = \listing@hint %\let\endhint = \listing@endhint % \end{macrocode} % \end{environment} % \begin{macro}{\headHint} % The ``design'' of the ``hint'' page. Can re-design. % \begin{macrocode} \newcommand{\listing@headHint} {% \unskip\par\textit{Hint}:\space\ignorespaces } %\let\headHint = \listing@headHint % \end{macrocode} % \end{macro} % \begin{macro}{\tailHint} % Close any environments begun in \cs{headHint} % \begin{macrocode} \newcommand{\listing@tailHint}{} %\let\tailHint = \listing@tailHint % \end{macrocode} % \end{macro} % \subsubsection{The \texttt{answer} Environment} % \begin{macro}{\headAnswer} % The ``design'' of the ``answer'' page. Can re-design. % \end{macro} % \begin{environment}{answer} % The \texttt{answer} environment follows the \texttt{hint}, also listed within % the \texttt{response} environment. % \begin{macrocode} \newenvironment{listing@answer} {% \textBgColor{\@solnColor}% \headAnswer }% {% \tailAnswer } %\let\answer = \listing@answer %\let\endanswer = \listing@endanswer % \end{macrocode} % \end{environment} % \begin{macrocode} \newcommand{\listing@headAnswer} {% \unskip\par\textit{Answer}:\space\ignorespaces } %\let\headAnswer = \listing@headAnswer % \end{macrocode} % \begin{macro}{\tailAnswer} % Close any environments opened by \cs{headAnswer} % \begin{macrocode} \newcommand{\listing@tailAnswer}{} %\let\tailAnswer = \listing@tailAnswer % \end{macrocode} % \end{macro} % \begin{macrocode} \AtBeginDocument{% \let\card = \listing@card \let\endcard = \endlisting@card \let\headCard = \listing@headCard \let\tailCard = \listing@tailCard \let\headresponse = \listing@response \let\endresponse = \listing@response \let\headhint = \listing@hint \let\endhint = \listing@endhint \let\headHint = \listing@headHint \let\tailHint = \listing@tailHint \let\answer = \listing@answer \let\endanswer = \listing@endanswer \let\headAnswer = \listing@headAnswer \let\tailAnswer = \listing@tailAnswer } % % \end{macrocode} \endinput