summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/eCards/eCards.dtx
blob: 1841dc70a05d140464ca80606d1573788dd30f04 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
%\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.      %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%</copyright>
%<package>\NeedsTeXFormat{LaTeX2e}[1997/12/01]
%<package>\ProvidesPackage{eCards}
%<package> [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}
%</driver>
% \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[<driver_option>,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[<driver_option>,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
%</package>
%    \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
}
%</listing>
%    \end{macrocode}
\endinput