summaryrefslogtreecommitdiff
path: root/texmf-dist/doc/latex/aeb-pro/examples/aebpro_ex4.tex
diff options
context:
space:
mode:
Diffstat (limited to 'texmf-dist/doc/latex/aeb-pro/examples/aebpro_ex4.tex')
-rw-r--r--texmf-dist/doc/latex/aeb-pro/examples/aebpro_ex4.tex346
1 files changed, 346 insertions, 0 deletions
diff --git a/texmf-dist/doc/latex/aeb-pro/examples/aebpro_ex4.tex b/texmf-dist/doc/latex/aeb-pro/examples/aebpro_ex4.tex
new file mode 100644
index 00000000..81c83709
--- /dev/null
+++ b/texmf-dist/doc/latex/aeb-pro/examples/aebpro_ex4.tex
@@ -0,0 +1,346 @@
+% dvips/Distiller workflow only
+\documentclass{article}
+\usepackage{amsmath}
+\usepackage[%
+ web={
+ pro,
+ designv,
+ tight,
+% forcolorpaper,
+ centertitlepage,
+ dvipsnames,
+ usesf
+ },
+ uselayers,
+ eforms,
+ aebxmp,
+]{aeb_pro}
+\usepackage{graphicx}
+\usepackage[nomessages]{fp}
+%
+% The versions of pstricks-add and pstricks should be
+% fairly recent.
+%
+\usepackage{pstricks-add}
+\usepackage[absolute,overlay]{textpos}
+
+\DeclareDocInfo
+{
+ title=The AeB Pro Package\texorpdfstring{\\[1ex]}{: }Layers and Rollovers,
+ author=D. P. Story,
+ university=Acro\negthinspace\TeX.Net,
+ email=dpstory@acrotex.net,
+ subject=Test file for the AeB Pro package,
+ keywords={Adobe Acrobat, JavaScript},
+ talksite=http://www.acrotex.net,
+ talkdate={January 12, 2007},
+ copyrightStatus=True,
+ copyrightNotice={Copyright (C) \the\year, D. P. Story},
+ copyrightInfoURL=http://www.acrotex.net
+}
+\talkdateLabel{Published:}
+
+\newcommand{\cs}[1]{\texttt{\char`\\#1}}
+\newcommand\newtopic{\par\ifdim\lastskip>0pt\relax\vskip-\lastskip\fi
+\vskip\medskipamount\noindent}
+\newenvironment{sverbatim}
+{\par\footnotesize\verbatim}{\endverbatim}
+\def\AcroTeX{Acro\negthinspace\TeX}
+
+\begin{document}
+
+\maketitle
+
+\section{Layers}
+
+When the \texttt{uselayers} option is taken, the necessary code is
+input to produce layers (Optional Content Groups). The
+\textcolor{blue}{{\AcroTeX} Presentation Bundle} (APB), which has a
+very sophisticated method of control over layers, by comparison, the
+\textcolor{blue}{AeB Pro} layer support is very primitive indeed. As
+a rule, after you create a layer, you will need a control of that
+layer. This could be a button or a link that executes JavaScript.
+
+The basic command for creating a layer is \cs{xBld}. The content of
+the layer is set off by the \cs{xBld}/\cs{eBld} pair. The command
+\cs{xBld} takes two parameters: (1) the first is optional,
+\texttt{true} if the layer is initially visible or \texttt{false},
+the default, if the layer is hidden initially; (2) the name of the
+layer, this is used to reference the layer, to make it visible or
+hidden.
+
+The creation and control of layers are illustrated in the two
+subsequent sections.
+
+\newtopic When constructing a layer, there are two possible scenarios:
+\begin{enumerate}
+ \item The layer takes up ``tex'' space
+ \item The layer does not take up ``tex'' space
+\end{enumerate}
+Let's look at each of these in turn.
+
+\subsection{Layer takes up space}
+
+A layer that takes up space in tex is the easiest case. For
+example, guess what I'm thinking thinking about: I'm thinking about
+my formerly favorite number, \xBld{mythoughts}the number is the
+value of the integral $\int_0^4 4x + \frac14\,dx$. \eBld Want a
+hint? \setLink[%
+\A{\JS{%
+ var oLayer = getxBld("mythoughts");
+ if ( oLayer != null )
+ oLayer.state = !oLayer.state;
+ }}
+]{\textcolor{red}{Click here}} I hope that hint worked for you.
+Click on the link to hide the layer again.
+
+\newtopic For those viewing this document in PDF, the relevant code
+code is seen below.
+
+First the layer is enclosed in a \cs{xBld}/\cs{eBld} pair, the
+default state is hidden, so we don't supply the optional parameter.
+The require (second) parameter is the name used to refer to the
+layer.
+
+The link text has a JavaScript action. First we get the OCG object
+for this layer by calling the \texttt{getxBld} function (this is
+part of the AeB Pro JavaScript) then if non-null (you may not have
+spelled the name correctly) we toggle the current state,
+\texttt{oLayer.state = !oLayer.state}.
+\begin{sverbatim}
+\xBld{mythoughts}the number is the value of the integral
+$\int_0^4 4x + \frac14\,dx$. \eBld Want a hint?
+\setLink[\A{\JS{%
+ var oLayer = getxBld("mythoughts");
+ if ( oLayer != null )
+ oLayer.state = !oLayer.state;
+ }}
+]{\textcolor{red}{Click here}}
+\end{sverbatim}
+
+An advantage of the layers approach is that the content of the
+layers are latexed as part of the content of the tex file;
+consequently, you can include virtually anything in your layer that
+tex can handle, math, figures, PSTricks, etc. Acrobat Pro 7.0 (and
+distiller) or later is required to build the layers, but only Adobe
+Reader 7.0 or later is needed to view the document, once
+constructed.
+
+\NewPage
+\subsection{Layer takes no space}\label{nospace}
+
+Perhaps the easiest way of creating layers that do not take up any tex space is to use a
+package such as \textsf{textpos}. In the preamble of this document, I've placed the following
+command:
+
+\begin{sverbatim}
+\usepackage{pstricks-add,pstricks}
+\usepackage[absolute,overlay]{textpos}
+\end{sverbatim}
+
+\begin{textblock*}{.67\linewidth}[.5,.5](.5\paperwidth,.5\paperheight)
+\xBld{crossinggraphcs}\psshadowbox[framesep=0pt]{\fcolorbox{red}{cornsilk}{%
+\parbox{\linewidth}
+{%
+\begin{center}
+\begin{pspicture}(-0.5,-1,0)(7,5)
+ \pscustom[linewidth=1pt,fillstyle=hlines,hatchcolor=red]{
+ \psplot[linewidth=1pt]{2}{5}{%
+ x x mul neg x 6 mul add 5 sub}
+ \psplot[linewidth=1pt]{5}{2}{%
+ x x mul neg 3 div x 4 mul 3 div add 5 3 div add}
+ }
+ \pscustom[linewidth=1pt,fillstyle=vlines,hatchcolor=blue]{
+ \psline(0,1.666667)
+ \psplot[linewidth=1pt]{0}{2}{%
+ x x mul neg 3 div x 4 mul 3 div add 5 3 div add}
+ \psplot[linewidth=1pt]{2}{1}{%
+ x x mul neg x 6 mul add 5 sub}
+ }
+ \psaxes{->}(0,0)(-0.5,-0.5)(7,5)
+ \uput[-90](7,0){$x$}
+ \uput[0](0,5){$y$}
+ \psplot[linewidth=1pt]{0.75}{5.25}{%
+ x x mul neg x 6 mul add 5 sub}
+ \psplot[linewidth=1pt]{0}{5.25}{%
+ x x mul neg 3 div x 4 mul 3 div add 5 3 div add}
+ \rput(5,2){$f$}
+ \rput(3,2){$g$}
+\end{pspicture}
+\end{center}
+}}}\eBld
+\end{textblock*}
+
+Now we can create a layer that takes up no space, but is overlaid on top of the tex content.
+We use the \textsf{textpos} commands to place the layer. Once created and placed, we must
+have a way of showing it and hiding it. This time, we'll use a button:
+\pushButton[
+ \CA{Push}
+\A{\JS{%
+ toggleSetThisLayer("crossinggraphcs");
+}}]{crossinggraphcsBtn}{}{12bp}
+
+\newtopic As you can see from this example, you must be very careful in the placement of your
+layers vis-\`{a}-vis the button. Form fields are laid on top of
+content, and a layer is considered part of the content. This particular layer could be move to the
+upper left corner, for example, Let's see how a link works, shall we? \setLink[%
+\A{\JS{%
+ toggleSetThisLayer("crossinggraphcs");
+}}]{\textcolor{red}{Click here}}! The link is active even through the layer, you just have to find it!
+I could have set this link to that it has a visible bounding box, in which case the border of the
+bounding box shows through the layer, but hey, at least you can find the link!
+
+One thing you need to keep in mind is the placement of the code,
+within the \texttt{textblock} environment. The overlaid material
+will appear on whatever page the \texttt{textblock} ends up on.
+Should you add more material before the \texttt{textblock}, the
+controls may drop off to the next page. When the user presses the
+control, nothing happens, actually, the layer is appearing on the previous page.
+Sometimes it makes sense to insert a \cs{newpage} to ensure the proper placement
+of the overlay relative to the placement of the controls.
+
+\NewPage % this is \newpage when for screen, does nothing when forpaper, defined in web
+
+\defineRC{help1}
+{%
+\psset{llx=-12pt, lly=-12pt,urx =12pt,ury =12pt,xAxisLabel=$x$,yAxisLabel=$y$}
+\begin{psgraph*}[arrows=->,trigLabels=true,trigLabelBase=2,dx=\psPiH](0,0)(-.5,-1.5)(6.75,1.5){.75\linewidth}{.25\linewidth}
+ \psset{algebraic=true}%
+ \rput(4,1){$y=\sin(x)$}%
+ \psplot[linecolor=blue]{0}{TwoPi}{sin(x)}
+\end{psgraph*}
+}
+
+\begin{rollover}
+\begin{textblock*}{.4\linewidth}[.5,.5](.5\paperwidth,.5\paperheight)
+\xBld{help1}\psshadowbox[framesep=0pt]{\fcolorbox{red}{cornsilk}{%
+\parbox{\linewidth}{\insertRC{help1}}}}\eBld
+\end{textblock*}
+\end{rollover}
+\begin{printRollover}
+\definePR{help1}{\parbox{.4\linewidth}{\insertRC{help1}}}\insertPR{help1}
+\end{printRollover}
+
+\section{Rollovers}
+
+The AeB Pro package offers you two rollovers, which ostensibly provides
+help to the document consumer.
+
+\subsection{\texorpdfstring{\protect\cs{texHelp}}{\textbackslash{texHelp}} uses Layers}
+
+The rollover is a special case of the techniques discussed in
+\hyperref[nospace]{section~\ref*{nospace}}. For a rollover, you
+create a form field, enclosing a word, when the user rolls across
+the word, a help box opens. For example, recall the graph of the
+\texHelp{help1}{$\sin(x)$,} isn't it pretty? Try rolling over the
+word that is tagged with the `\texHelpIndicator{}' symbol.
+
+You will have to look at the source file to see what goes on here,
+suffice it to say that the command \cs{texHelp} was used to create
+the rollover, the symbol that appears is defined in the
+\textsf{aeb\_pro} package by \cs{texHelpIndicator}, this command can
+be re-defined to have a different symbol.
+
+\subsection{\texorpdfstring{\protect\cs{pdfHelp}}{\textbackslash pdfHelp} does not}
+
+There is another type of rollover, \cs{pdfHelp}. The command takes three arguments,
+the first one is the name of the button field that is enclose around the third argument,
+the second argument is the help text. The help text is not part of the {\LaTeX} content
+of the document is is not compiled by the {\TeX} compiler, so it should be text. For example,
+can you remember the inventor of \pdfHelp{knuth}{Donald Knuth}{\TeX?}
+
+As with \cs{texHelp}, the symbol that tags the word as a help word
+is defined in \textsf{aeb\_pro.dtx} by the command
+\cs{pdf\-Help\-Indicator}. This command can be re-defined as needed.
+
+\section{Layers and Animation}
+
+Let's see if we can conjure up a little animation, shall we?
+
+\noindent\begin{minipage}{.65\linewidth}\centering
+\DeclareAnime{sinegraph}{10}{40}
+\def\thisframe{\animeBld\psplot[linecolor=red]{0}{\xi}{sin(x)}\eBld}
+\psset{llx =-12pt,lly=-12pt,urx =12pt,ury =12pt} % ,trigLabels=true,labelFontSize=\small
+\begin{psgraph*}[arrows=->,trigLabels=true,trigLabelBase=2,dx=\psPiH](0,0)(-.5,-1.5)(6.75,1.5){164pt}{70pt}
+ \psset{algebraic=true}%
+ \rput(4,1){$y=\sin(x)$}
+ \FPdiv{\myDelta}{\psPiTwo}{\nFrames}%
+ \def\xi{0}%
+ \multido{\i=1+1}{\nFrames}{\FPadd{\xi}{\xi}{\myDelta}\thisframe}
+\end{psgraph*}
+\end{minipage}\hfill
+\begin{minipage}{.3\linewidth}%\centering
+\backAnimeBtn{24bp}{12bp}\kern1bp\clearAnimeBtn{24bp}{12bp}\kern1bp\forwardAnimeBtn{24bp}{12bp}
+\end{minipage}
+
+\newtopic It is possible to combine the techniques of
+\hyperref[nospace]{section~\ref*{nospace}} with those of animation, to create
+an anime that pops up. We leave this as an exercise for the reader, that's you.
+
+\NewPage
+
+\newtopic\xBld{dialog1}This page illustrates how you can create a series of
+steps, all controlled by a button. \eBld\xBld{dialog2}Let us begin by
+drawing the $\sin(x)$ curve. \eBld\xBld{dialog3}Do you think that I can do it?
+\eBld\xBld{dialog4} Well, here goes!\eBld
+
+\begin{center}
+\DeclareAnime{graph}{10}{40}
+\def\frame{\animeBld\psplot[linecolor=red]{0}{\xi}{sin(x)}\eBld}
+\psset{llx=-12pt, lly=-12pt,urx =12pt,ury =12pt,xAxisLabel=$x$,yAxisLabel=$y$}
+\begin{psgraph*}[arrows=->,trigLabels=true,trigLabelBase=2,dx=\psPiH](0,0)(-.5,-1.5)(6.75,1.5){.5\linewidth}{.25\linewidth}
+ \psset{algebraic=true}%
+ \rput(4,1){$y=\sin(x)$}%
+ \FPdiv{\myDelta}{\psPiTwo}{\nFrames}%
+ \def\xi{0}%
+ \multido{\i=1+1}{\nFrames}{\FPadd{\xi}{\xi}{\myDelta}\frame}
+ \xBld{step1}\psplot[linecolor=blue]{0}{Pi 2 div}{sin(x)}\eBld
+ \xBld{step2}\psplot[linecolor=webgreen]{Pi 2 div}{Pi}{sin(x)}\eBld
+ \xBld{step3}\psplot[linecolor=Plum]{Pi}{3 Pi mul 2 div}{sin(x)}\eBld
+ \xBld{step4}\psplot[linecolor=yellow]{3 Pi mul 2 div}{TwoPi}{sin(x)}\eBld
+\end{psgraph*}
+\end{center}
+
+\newtopic\xBld{step1}Notice that the function increases from $[\,0, \pi/2\,]$
+and attains it maximum value of $1$ at $ x = \pi/2$. \eBld\xBld{step2}The
+sine function then decreases to zero over the interval $[\,\pi/2, \pi\,]$.
+\eBld \xBld{step3}Continuing its sinusoidal path it decreases on the
+interval $[\,\pi,3\pi/2\,]$ down to its minimum value of $-1$ at $ x =
+3\pi/2$. \eBld \xBld{step4}Finally, it increases up to $0$ over the
+interval $[\,3\pi/2, 2\pi\,]$ completing the first cycle of its
+graph.\eBld
+
+\newtopic\xBld{wrapup}Try \texttt{shift-click} too. dps\eBld
+
+\begin{defineJS}[\catcode`*=0]{\stepwise}
+if ( typeof stepcounter == "undefined" ) stepcounter = 0;
+if ( !event.shift ) stepcounter++;
+if ( stepcounter > 10 ) stepcounter = 11;
+if ( stepcounter < 1 ) stepcounter = 0;
+switch (stepcounter)
+{
+ case 1: toggleSetThisLayer("dialog1", !event.shift); break;
+ case 2: toggleSetThisLayer("dialog2", !event.shift); break;
+ case 3: toggleSetThisLayer("dialog3", !event.shift); break;
+ case 4: toggleSetThisLayer("dialog4", !event.shift); break;
+ case 5: if (event.shift) aebAnimeLayersBackward(*animSpeed,*nFrames,"*animBaseName");
+ else aebAnimeLayersForward(*animSpeed,*nFrames,"*animBaseName");
+ break;
+ case 6: toggleSetThisLayer("step1", !event.shift); break;
+ case 7: toggleSetThisLayer("step2", !event.shift); break;
+ case 8: toggleSetThisLayer("step3", !event.shift); break;
+ case 9: toggleSetThisLayer("step4", !event.shift); break;
+ case 10: toggleSetThisLayer("wrapup",!event.shift); break;
+ default:
+}
+if ( event.shift ) stepcounter--;
+\end{defineJS}
+
+\medskip
+\begin{center}
+ \pushButton[\CA{Step Through}\TU{Step Through}\A{\JS{\stepwise}}]%
+ {stepthru}{}{12bp}
+\end{center}
+
+
+\end{document}