% \iffalse %<*copyright> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% digicap-pro package, %% %% Copyright (C) 2008--2018 %% %% dpstory@acrotex.net %% %% %% %% This program can redistributed and/or modified under %% %% the terms of the LaTeX Project Public License %% %% Distributed from CTAN archives in directory %% %% macros/latex/base/lppl.txt; either version 1.2 of the %% %% License, or (at your option) any later version. %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{digicap-pro} % [2018/05/13 v1.3 Transparent Captions with Photos (dps)] %<*driver> \documentclass{ltxdoc} \usepackage[colorlinks,hyperindex=false]{hyperref} \pdfstringdefDisableCommands{\let\\\textbackslash}% \def\CMD#1{\textbackslash{#1}}\def\EXCL{!} \let\opt\texttt \let\app\textsf \let\pkg\textsf \let\env\texttt \OnlyDescription % comment out for implementation details \EnableCrossrefs \CodelineIndex \RecordChanges \bgroup\ttfamily \gdef\brpr#1{\char123\relax#1\char125\relax}\egroup \let\darg\brpr \let\env\texttt \let\opt\texttt \def\visispace{\symbol{32}} \def\ameta#1{\ensuremath{\langle\textit{\texttt{#1}}\rangle}} \def\meta#1{\textsl{\texttt{#1}}} \def\SUB#1{\ensuremath{{}_{\mbox{\scriptsize\ttfamily#1}}}} \InputIfFileExists{aebdocfmt.def}{\PackageInfo{digicap-pro}{Inputting aebdocfmt.def}} {\def\IndexOpt{\DescribeMacro}\def\IndexKey{\DescribeMacro}\let\setupFullwidth\relax \PackageInfo{digicap-pro}{aebdocfmt.def cannot be found}} \begin{document} \GetFileInfo{digicap-pro.sty} \title{The \texorpdfstring{\protect\pkg{digicap-pro}}{digicap-pro} Package} \author{D. P. Story\\ Email: \texttt{dpstory@acrotex.net}} \date{processed \today} \maketitle \tableofcontents \DocInput{digicap-pro.dtx} \IfFileExists{\jobname.ind}{\newpage\setupFullwidth\par\PrintIndex}{\paragraph*{Index} The index goes here. Execute\\[3pt]\null\qquad \texttt{makeindex -s gind.ist -o digicap-pro.ind digicap-pro.idx}\\[3pt] on the command line and recompile \texttt{digicap-pro.dtx}.} \IfFileExists{\jobname.gls}{\PrintChanges}{\paragraph*{Change History} The list of changes goes here. Execute\\[3pt]\null\qquad \texttt{makeindex -s gglo.ist -o digicap-pro.gls digicap-pro.glo}\\[3pt] on the command line and recompile \texttt{digicap-pro.dtx}.} \end{document} % % \fi % \MakeShortVerb{|} % \InputIfFileExists{aebdonotindex.def}{\PackageInfo{digicap-pro}{Inputting aebdonotindex.def}} % {\PackageInfo{digicap-pro}{cannot find aebdonotindex.def}} % \begin{macrocode} %<*package> % \end{macrocode} % \section{Introduction} % This is a package that can create fancy, transparent captions to photos,\footnote % {Transparent here means having an opacity between 0 and 1.} or any graphics file. % The captions can be set to be continually visible, or only visible on roll-over. Captions can be % placed horizontally and vertically with optional arguments. A visible, possibly transparent, border % can be placed around the caption as well. % % \section{Package Options} % % The \IndexOpt{display1}\opt{display1} option is used to create a photo album, a single PDF that % contains many photos with captions which are accessible by clicking thumbnails. % \begin{macrocode} \DeclareOption{display1}{\AtEndOfPackage{\dc@input@displayi}} \def\dc@input@displayi{\InputIfFileExists{digi-p1.def}{}{}} \ProcessOptions % \end{macrocode} % \section{Code} % % Let's get this show on the road! % % \subsection{Required Packages} % The package builds on packages developed as part of \textsf{AeB} or \textsf{AeB~Pro}: %\begin{itemize} % \item\textsf{aeb\_pro}: supplies support for layers and JavaScript management of layers % \item\textsf{graphicxbox}: places a graphic as the background of a box % \item\textsf{opacity-pro}: creates the transparency effects % \item\textsf{eforms}: use to create Acrobat form buttons with a roll-over action to make % roll-over captions visible or hidden. %\end{itemize} %The graphicx package is also used to import digital photos, or other graphics. % \begin{macrocode} \RequirePackage{eforms} \RequirePackage{graphicx} \RequirePackage{graphicxbox} \RequirePackage{opacity-pro} % \end{macrocode} % % \subsection{\texorpdfstring{\protect\cs{opcolorbox}}{\CMD{opcolorbox}}} % % The following are the definitions of the key-value pairs used by \cs{opcolorbox}. A brief % description of their purpose appears in the section devoted to \cs{opcolorbox}. % % \begin{macrocode} \def\dc@nocolor{nocolor} \define@key{opcolorbox}{borderwidth}[2pt]{\def\opcb@borderwidth{#1}} \define@key{opcolorbox}{fboxsep}[6pt]{\def\opcb@fboxsep{#1}} \define@key{opcolorbox}{width}[\linewidth]{\def\opcb@width{#1}} \define@key{opcolorbox}{bordercolor}[black]{\def\opcb@bordercolor{#1}} \define@key{opcolorbox}{bgcolor}[white]{\def\opcb@bgcolor{#1}} \define@key{opcolorbox}{borderop}[.5]{\def\opcb@borderop{#1}} \define@key{opcolorbox}{bordertextop}[1]{\def\opcb@bordertextop{#1}} \define@key{opcolorbox}{bgop}[.5]{\def\opcb@bgop{#1}} \define@key{opcolorbox}{textop}[1]{\def\opcb@textop{#1}} \define@key{opcolorbox}{borderblend}[Normal]{% \def\opcb@borderblendmode{#1}} \define@key{opcolorbox}{bgblend}[Normal]{\def\opcb@bgblendmode{#1}} \setkeys{opcolorbox}{borderwidth,fboxsep,width,bordercolor,bgcolor,% bordertextop,borderop,bgop,textop,borderblend,bgblend} % \end{macrocode} % \begin{macro}{\opcolorbox} % % A general purpose color box that creates two color boxes, a larger one with a % smaller one centered vertically and horizontally inside the larger one. Transparent % options allow separate control over the opacity settings of the larger and smaller % rectangle as well as the text that is written within the smaller rectangle. % %\paragraph*{Optional key-values for the first parameter} %\begin{description} % \item[\texttt{borderwidth}:] The border width. The default is \texttt{2pt} % \item[\texttt{fboxsep}:] The space between the border and the text, the default is \texttt{6pt} % \item[\texttt{width:}] The width of \cs{parbox}, the default is \cs{linewidth} % \item[\texttt{bordercolor}:] A named color of border, the default is \texttt{black}. A special value % of \texttt{nocolor} is recognized, in that case, no color is applied. % \item[\texttt{bgcolor:}] A named color of background, the default is \texttt{white}. A special value % of \texttt{nocolor} is recognized, in that case, no color is applied. % \item[\texttt{borderop:}] A number type, the opacity for border $0 \le \mbox{number} \le 1$, the default is~$.5$ % \item[\texttt{bgop:}] A number type, the opacity for background $0 \le \mbox{number} \le 1$, the default is~$.5$ % \item[\texttt{textop:}] A number type, the opacity for text $0 \le \mbox{number} \le 1$, the default is~$1$ % \item[\texttt{borderblend:}] The blend mode for the border, the default is \texttt{Normal} % \item[\texttt{bgblend:}] The blend mode for the background, the default is \texttt{Normal} %\end{description} % %\paragraph*{Second parameter, required.} The text that goes within the box. % % \begin{macrocode} \def\dc@mark{[\space}%] \newcommand{\opcolorbox}[2][]{\begingroup \edef\dc@tmp@exp{\noexpand\setkeys{opcolorbox}{#1}}\dc@tmp@exp \ifx\opcb@bgcolor\dc@nocolor\let\opcb@set@bgcolor\mbox \else\def\opcb@set@bgcolor{\colorbox{\opcb@bgcolor}}\fi \ifx\opcb@bordercolor\dc@nocolor\let\opcb@set@bordercolor\mbox \else\def\opcb@set@bordercolor{\colorbox{\opcb@bordercolor}}\fi \setlength{\fboxsep}{\opcb@borderwidth}\setlength{\fboxrule}{0pt}% \begin{settransparency}[\opcb@borderblendmode]{\opcb@bordertextop}% {\opcb@borderop}% \opcb@set@bordercolor{\parbox[c]{\opcb@width}{% \setlength{\fboxsep}{\opcb@fboxsep}\setlength{\fboxrule}{0pt}% \begin{settransparency}[\opcb@bgblendmode]{\opcb@textop}% {\opcb@bgop}% \opcb@set@bgcolor{\parbox[c]{\linewidth-2\fboxsep}{% % \end{macrocode} % for dvips, CA is not recognized since dvips does not stroke backgrounds, % so we insert another layer of transparency, with ca=CA=\cs{opcb@textop} % \begin{macrocode} \begin{settransparency}{\opcb@textop}{\opcb@textop}% #2% \end{settransparency}% }}% \end{settransparency}}}% \end{settransparency}% \endgroup } % \end{macrocode} % \end{macro} % % \subsection{\texorpdfstring{\protect\cs{digiCap} and \protect\cs{digiCap*}} % {\CMD{digiCap} and \CMD{digiCap*}}} % % The \cs{digiCap} command is defined in this section; there is an \texttt* % option that changes the caption into a rollover. Before we get started, we define % several commands that support some of the options for this command. % % The \cs{dc@vCaptionPlacement} command accomplishes two things: It records the document author's choice % for vertical placement of the caption (saving it in \cs{aeb@captionPlacement}), % and calculates the amount of vertical displacement needed to overlay % the rollover form field correctly over the picture. Possible values for \texttt{\#1} % and \texttt{b}, \texttt{c}, and \texttt{t}. The default is \texttt{b}. % This command is called when the author sets \texttt{vcaption}, % a key belonging to the \texttt{dc@commands} family. Defined below. % \begin{macrocode} \def\dc@vCaptionPlacement#1{\def\dc@captionPlacement{#1}% \def\dc@@captionPlacement{0pt}% \if\dc@captionPlacement c% \def\dc@@captionPlacement{-\dc@graphicHalfHeight+3pt}\else \if\dc@captionPlacement t% \def\dc@@captionPlacement{-\dc@graphicHeight}% \else \def\dc@captionPlacement{b}% \def\dc@@captionPlacement{0pt}% \fi\fi } \dc@vCaptionPlacement{b} % \end{macrocode} % We set the horizontal placement of the caption, possible values are \texttt{l}, \texttt{c}, and \texttt{r}. % The default is \texttt{c}. This command is called when the author sets \texttt{hcaption}, % a key belonging to the \texttt{dc@commands} family. Defined below. % \begin{macrocode} \def\dc@hCaptionPlacement#1{\def\dc@argi{#1}% \if\dc@argi l\def\dc@Hplacement{\relax}\else \if\dc@argi c\def\dc@Hplacement{\hfil}\else \if\dc@argi r\def\dc@Hplacement{\hfill}\else \def\dc@Hplacement{\relax}\fi\fi\fi } \dc@hCaptionPlacement{c} % \end{macrocode} % \begin{macrocode} \def\dc@calc@adj@width#1{{% \edef\dc@tmp@exp{\noexpand\setkeys{opcolorbox}{#1}}\dc@tmp@exp \setlength{\linewidth}{\dc@graphicWidth-2\fboxsep}% \setlength{\dimen@}{\opcb@width}% \setlength{\dimen@ii}{\opcb@borderwidth}% \setlength{\dimen@}{\dimen@-2\dimen@ii}% \xdef\dc@adj@width{\the\dimen@}% }} % \end{macrocode} % This is the command that inserts the caption %\begin{verbatim} % #1=path to graphic % #2=box content (#3-#5 are included in the box content) % #3=KVPairs of \opcolorbox % #4=content of \opcolorbox % #5=either empty or \eBld, if layers used %\end{verbatim} % \begin{macrocode} \long\def\dc@insert@graphicx@opcolor@boxes#1#2#3#4#5{% \graphicxbox{#1}{#2\parbox[\dc@captionPlacement]% [\dc@graphicHeight-2\fboxsep]{\dc@graphicWidth-2\fboxsep}% {\vskip0pt\dc@Hplacement\opcolorbox[#3,width=\dc@adj@width]% {#4}\par\kern0pt}#5}% } % \end{macrocode} % \begin{macro}{\graphicHeight} % \begin{macro}{\graphicWidth} % These two commands may be used within the \texttt{} argument % of the command \cs{digiCap}. \cs{graphicHeight} is used % to set the height of a \texttt{minipage} of \cs{parbox} for a vertically oriented caption. % An example appears in the demo file. % \begin{macrocode} \def\graphicHeight{\dc@graphicHeight-2\fboxsep-% \dc@outerboxsep-\dc@outerboxsep-\opcb@borderwidth-\opcb@borderwidth} \def\graphicWidth{\dc@graphicWidth-2\fboxsep-% \dc@outerboxsep-\dc@outerboxsep-\opcb@borderwidth-\opcb@borderwidth} % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\digiCap} % A command that places a picture as background of a box, and places a, possibly, transparent % caption, optionally, with a border. The syntax is\dots %\begin{verbatim} % \digiCap[] % {}[]{} %\end{verbatim} % or %\begin{verbatim} % \digiCap*[] % {}[]{} %\end{verbatim} % If the optional \texttt{*} appears, then \cs{dc@digiCapRollover} is called, otherwise, % \cs{dc@digiCap}. % % The \texttt{dc@commands} \texttt{xkeyval} family is defined below. %\paragraph*{Optional key-values for the first parameter.} This set of parameters % control the placement of the caption on top of the background picture. There is % also a parameter to set the \cs{includegraphics} options, and the underlying % form field name, in the case of a rollover. %\begin{description} %\item[\texttt{outerboxsep}:] The space the surrounds the boundary of the caption, the default is \texttt{3pt} %\item[\texttt{vcaption}:] The vertical placement of the caption on the background graphic, possible % values are \texttt{b}, \texttt{c}, and \texttt{t}. The default is \texttt{b}. %\item[\texttt{hcaption}:] The horizontal placement of the caption on the background graphic, possible % values are \texttt{l}, \texttt{c}, and \texttt{r}. The default is \texttt{c}. %\item[\texttt{inclgraphicx}:] The value of this key is a list of key-value pairs that are passed on to the % underlying \cs{includegraphics} command. %\item[\texttt{rollovername}:] The basename of the push button form field that is used for a rollover effect. % This command is used only with \cs{digiCap*}, ignored otherwise. For the \cs{digiCap*} % command, this key is optional, if not present, this package supplies a name. %\end{description} %\paragraph*{Second parameter, required.} The second parameter \texttt{} is the path to the graphic to be % use as a background to this box. %\paragraph*{Optional key-values for the third parameter.} The options for the underlying \cs{opcolorbox}. See above % for a listing and description. %%\paragraph*{Fourth parameter, required.} The content of the caption. % \begin{macrocode} \define@key{dc@commands}{outerboxsep}[3pt]{\def\dc@outerboxsep{#1}} \define@key{dc@commands}{vcaption}[b]{\dc@vCaptionPlacement{#1}} \define@key{dc@commands}{hcaption}[c]{\dc@hCaptionPlacement{#1}} \define@key{dc@commands}{inclgraphicx}[]{% \def\dc@inclgraphicx{#1\dc@incgfx@addkeys}} \let\dc@incgfx@addkeys\@empty \define@key{dc@commands}{rollovername}[]{{% \gdef\dc@rollovername{#1}% \ifx\dc@rollovername\@empty {\count0=\dc@rollover@cnt\advance\count0by1\relax \xdef\dc@rollover@cnt{\the\count0}% \xdef\dc@rollovername{Cnt\dc@rollover@cnt}}% \fi }} \let\dc@rollovername\@empty \def\dc@rollover@cnt{0}% \setkeys{dc@commands}{outerboxsep,vcaption,hcaption,inclgraphicx} % \end{macrocode} % \begin{macrocode} \newcommand{\digiCap}{\@ifstar{\dc@digiCapRollover} {\dc@digiCap}} % \end{macrocode} % \paragraph*{\cs{dc@digiCap}} This creates a digital photo with caption, no rollover. % \begin{macrocode} \newcommand{\dc@digiCap}[2][]{\begingroup \edef\dc@tmp@exp{\noexpand\setkeys{dc@commands}{#1}}\dc@tmp@exp \def\dc@filename{#2}\setlength{\fboxsep}{\dc@outerboxsep}% \dc@@digiCap } \newcommand{\dc@@digiCap}[2][]{% \edef\dc@tmp@exp{\noexpand\setkeys{Gin}{\dc@inclgraphicx}}% \dc@tmp@exp\edef\dc@tmp@exp{\setbox0= \hbox{\noexpand\includegraphics[draft,\dc@inclgraphicx]% {\dc@filename}}}\dc@tmp@exp\dimen@=\dp0 \advance\dimen@\ht0 \edef\dc@graphicHeight{\the\dimen@}% \edef\dc@graphicWidth{\the\wd0}% \dc@calc@adj@width{#1}\parbox{\dc@graphicWidth}{% \dc@insert@graphicx@opcolor@boxes{\dc@filename}{}{#1}{#2}{}}% \endgroup} % \end{macrocode} % \end{macro} % \paragraph*{\cs{dc@digiCap*}} Same as \cs{dc@digiCap}, but the caption is placed in a layer and a rollover % effect is use to make the caption appear. The syntax is\dots % \begin{macrocode} \newcommand{\dc@digiCapRollover}[2][]{\begingroup \edef\dc@tmp@exp{\noexpand\setkeys{dc@commands}{#1}}% \dc@tmp@exp\def\dc@filename{#2}% \setlength{\fboxsep}{\dc@outerboxsep}% \ifx\dc@rollovername\@empty\setkeys{dc@commands}{rollovername}\fi \dc@@digiCapRollover } \newcommand{\dc@@digiCapRollover}[2][]{% \edef\dc@tmp@exp{\noexpand\setkeys{Gin}{\dc@inclgraphicx}}% \dc@tmp@exp\edef\dc@tmp@exp{\setbox0=\hbox{% \noexpand\includegraphics[draft,\dc@inclgraphicx]% {\dc@filename}}}\dc@tmp@exp\dimen@=\dp0\advance\dimen@\ht0 \edef\dc@graphicHeight{\the\dimen@}\dimen@=.5\dimen@ \edef\dc@graphicHalfHeight{\the\dimen@}% \edef\dc@graphicWidth{\the\wd0}% \dc@calc@adj@width{#1}\parbox{\dc@graphicWidth}{% \raisebox{\dc@@captionPlacement}[0pt][0pt]{\rlap {\pushButton[\presets{\digiCapsPresets{\dc@rollovername}}% \presets{\hiddenPresets}]{dcRollover.\dc@rollovername}% {\dc@graphicWidth}{\dc@graphicHeight}}}% \dc@insert@graphicx@opcolor@boxes{\dc@filename}% {\xBld{\dc@rollovername}}{#1}{#2}{\eBld}% }\global\let\dc@rollovername\@empty% \endgroup} % \end{macrocode} % This is a listing of options to be used by the push button that % supplies the rollover effect. % \begin{macrocode} \def\digiCapsPresets#1{\W0\BG{}\BC{}\H{N}\autoCenter{n}% rollover mod \AA{\AAMouseEnter{\JS{toggleSetThisLayer("#1",true);}}% \AAMouseExit{\JS{toggleSetThisLayer("#1",false);}}}} \def\hiddenPresets{} % \end{macrocode} % \begin{macrocode} % % \end{macrocode} % \begin{macrocode} %<*digidisplay1> % \end{macrocode} % % \subsection{A Layout for Digital Display (Photo album)} % % This segment of code provides for a layout to display digital images. Thumbnails of the % images are lined up in rows or columns. When the user rolls over a thumb, a large version % of that photo appears in the display area. The photos can optionally contain a short caption, % and a longer caption. This latter caption appears on a transparent background on top of the photo % (|\digiCap| is used here). % % \subsubsection{Embedding Images/Creating Thumb Appearances} % % Embed each image using |\embedEPS|, then create other images of that digital % in normal, rollover and down appearances. These are used % for the form field thumbnails. % % \begin{macro}{\PicsThisDoc} % This command is executed in the preamble of the document. The one argument is a % comma delimited list of four parameters: %\begin{verbatim} % \PicsThisDoc % {% % {}{}{}{}, % {}{}{}{}, % ... % {}{}{}{} % } %\end{verbatim} % We pass each set of four arguments on to \cs{dc@setPicsAndCaptions} for processing. % \begin{macrocode} \newcommand{\PicsThisDoc}[1]{% \@for\@args:=#1\do{\expandafter\dc@setPicsAndCaptions\@args}% } % \end{macrocode} % \end{macro} % This command takes the four arguments passed to it from \cs{PicsThisDoc}, and passes the % required args to the commands \cs{dc@embedEPSCreateAppearances} and to \cs{dc@defTheseCaptions}. % \begin{macrocode} \def\dc@setPicsAndCaptions#1#2#3#4{% \dc@embedEPSCreateAppearances{#1}{#2}% \dc@defTheseCaptions{#1}{#3}{#4}% } % \end{macrocode} % This command embeds the graphic file \texttt{\#2}, names that file as \texttt{\#1}. The name % \texttt{\#1} is later used to show the figure. The \textsf{grahicxsp} package is used here. % This command also builds images used in the appearance states of the thumbnail images. The % appearance states can be redefined, as desired. % \begin{macro}{\setThumbAppearances} % Set the appearances of the thumbnail images. There are three appearances: normal, rollover and % push. The settings for these parameters are use in the command \cs{dc@embedEPSCreateAppearances}. % % There is one optional argument, the value of this optional argument is the name of one of the % photos; in this case, the second argument is used only for that picture. This way, you can % change the appearance of the thumbs. Normally, they would all look the same. % \begin{macrocode} \newcommand{\setThumbAppearances}[2][]{% \def\dc@argi{#1}\ifx\dc@argi\@empty\def\dc@thumbApprs{#2}% \setkeys{dc@ro@appr}{#2}\else \expandafter\def\csname dc@thumbApprs@#1\endcsname{#2}\fi } \define@key{dc@ro@appr}{normalop}[.5]{\def\dc@ro@appr@normalopacity{#1}} \define@key{dc@ro@appr}{rolloverop}[1]% {\def\dc@ro@appr@rolloveropacity{#1}} \define@key{dc@ro@appr}{downop}[.3]% {\def\dc@ro@appr@downopacity{#1}} \define@key{dc@ro@appr}{boundarywidth}[30]% {\def\dc@ro@appr@boundarywidth{#1}} \define@key{dc@ro@appr}{rgbcolor}[]{% \def\dc@ro@appr@rgbcolor{#1}\ifx\dc@ro@appr@rgbcolor\@empty \else \expandafter\ef@isitnamed\dc@ro@appr@rgbcolor\ef@nil \ifx\ef@latex@color\ef@y\expandafter \HyColor@XZeroOneThreeFour \expandafter{\dc@ro@appr@rgbcolor}{\dc@ro@appr@rgbcolor}{}{}% \edef\dc@ro@appr@rgbcolor{\dc@ro@appr@rgbcolor}\fi \fi} \let\dc@ro@appr@rgbcolor\@empty % {\def\dc@ro@appr@rgbcolor{#1}} \define@key{dc@ro@appr}{cmykcolor}[0 0 1 0]{% \def\dc@ro@appr@cmykcolor{#1}\ifx\dc@ro@appr@cmykcolor\@empty \else \expandafter\ef@isitnamed\dc@ro@appr@cmykcolor\ef@nil \ifx\ef@latex@color\ef@y\expandafter \HyColor@XZeroOneThreeFour \expandafter{\dc@ro@appr@cmykcolor}{\dc@ro@appr@cmykcolor}{}{}% \edef\dc@ro@appr@cmykcolor{\dc@ro@appr@cmykcolor}\fi \fi} \def\dc@ro@appr@cmykcolor{0 0 1 0} % {\def\dc@ro@appr@cmykcolor{#1}} % \end{macrocode} % Set the default values for these key-value pairs. % \begin{macrocode} \setThumbAppearances{normalop,rolloverop,downop,boundarywidth,% rgbcolor,cmykcolor} % \end{macrocode} % \end{macro} % This command embeds the graphic file \texttt{\#2}, names that file as \texttt{\#1}. The name % \texttt{\#1} is later used to show the figure. The \textsf{grahicxsp} package is used here. % This command also builds images used in the appearance states of the thumbnail images. The % appearance states can be redefined, as desired. % \begin{macrocode} \def\dc@embedEPSCreateAppearances#1#2{% \embedEPS[transparencyGroup]{#1}{#2}% \@ifundefined{dc@thumbApprs@#1}{\edef\dc@tmp@exp% {\noexpand\setkeys{dc@ro@appr}{\dc@thumbApprs}}}% {\edef\dc@tmp@exp{\noexpand\setkeys{dc@ro@appr}% {\csname dc@thumbApprs@#1\endcsname}}}\dc@tmp@exp \begin{createImage}{\bboxOf{#1}}{n#1} gsave \dc@mark/ca \dc@ro@appr@normalopacity /SetTransparency pdfmark \urxOf{#1} .1 mul \uryOf{#1} .1 mul moveto currentpoint translate .8 .8 scale \dc@mark{#1} /SP pdfmark grestore \end{createImage} \begin{createImage}{\bboxOf{#1}}{r#1} \dc@mark/ca \dc@ro@appr@rolloveropacity /CA \dc@ro@appr@rolloveropacity /SetTransparency pdfmark \dc@mark{#1} /SP pdfmark \dc@ro@appr@boundarywidth\space setlinewidth \ifx\dc@ro@appr@rgbcolor\@empty \dc@ro@appr@cmykcolor\space setcmykcolor\else \dc@ro@appr@rgbcolor\space setrgbcolor\fi\space currentlinewidth 2 div dup \urxOf{#1} currentlinewidth sub \uryOf{#1} currentlinewidth sub rectstroke \end{createImage} \begin{createImage}{\bboxOf{#1}}{d#1} \dc@mark/ca \dc@ro@appr@downopacity /CA \dc@ro@appr@downopacity/SetTransparency pdfmark \dc@mark{#1} /SP pdfmark \dc@ro@appr@boundarywidth\space setlinewidth \ifx\dc@ro@appr@rgbcolor\@empty \dc@ro@appr@cmykcolor\space setcmykcolor\else \dc@ro@appr@rgbcolor\space setrgbcolor\fi\space currentlinewidth 2 div dup \urxOf{#1} currentlinewidth sub \uryOf{#1} currentlinewidth sub rectstroke \end{createImage} } % \end{macrocode} % This command takes that short and long captions and saves them in a text macro % under the name \texttt{\#1Caption} and \texttt{\#1Text}, where \texttt{\#1} is % the graphic name. % \begin{macrocode} \def\dc@defTheseCaptions#1#2#3{% \expandafter\gdef\csname #1Caption\endcsname{#2}% \expandafter\gdef\csname #1Text\endcsname{#3}% } % \end{macrocode} % % \subsubsection{Placing the elements on the page} % % This section of the code is devoted to defining the commands to insert the % various elements on the page: the photos, the captions, and the thumbs. % \begin{macro}{\presentationOrder} % A command to create a text macro. The argument is a comma delimited list % of photo names. % \begin{macrocode} \newcommand{\presentationOrder}[1]{\def\dc@presentationOrder{#1}} % \end{macrocode} % \end{macro} % \begin{macro}{\dcFirstOpt} % \begin{macro}{\dcSecondOpt} % These two commands are used to pass optional arguments to \cs{digiCap}. % \cs{} % with various required arguments). These controls for the appearance, transparancy, and positioning of the long caption box. % These \cs{dcFirstOpt} and \cs{dcSecondOpt} are passed as the first optional parameter and third % parameters of the \cs{digiCap} command. % \begin{macrocode} \newcommand{\dcFirstOpt}[2][]{% \def\dc@argi{#1}\ifx\dc@argi\@empty\def\dc@icontrol{#2}\else \expandafter\def\csname dc@icontrol@#1\endcsname{#2}\fi} \newcommand{\dcSecondOpt}[2][]{% \def\dc@argi{#1}\ifx\dc@argi\@empty\def\dc@iicontrol{#2}\else \expandafter\def\csname dc@iicontrol@#1\endcsname{#2}\fi} % \end{macrocode} % The following are the default settings for these controls. The values for the % macros \cs{digiDSWidth} and \cs{digiDSHeight} are defined in \cs{digiDisplaySpace}. % \begin{macrocode} \dcFirstOpt{vcaption=b,hcaption=c,outerboxsep=0pt} \dcSecondOpt{borderwidth=0bp,fboxsep=10bp,bordercolor=nocolor,bgop=.7} % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\useRollovers} % \begin{macro}{\noRollovers} % Execute these commands to create rollovers for the long captions. The default % is to use no rollovers. % \begin{macrocode} \def\useRollovers{\def\dc@use@Rollover{*}% \def\hiddenPresets{\F{\FHidden}}} \def\noRollovers{\let\dc@use@Rollover\@empty \def\hiddenPresets{}} \let\dc@use@Rollover\@empty % \end{macrocode} % Don't ask what this is. % \begin{macrocode} \def\dc@fudge{\llap{.\hskip20in}} % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\longCapFmt} % Use this command to apply a global format to the long captions. For example, % |\longCapFmt{\bfseries\scriptsize}|. The default setting does nothing. % \begin{macrocode} \newcommand{\longCapFmt}[1]{% \def\dc@longCapFmt{#1}} \longCapFmt{} % \end{macrocode} % \end{macro} % \begin{macro}{\dc@showPic} % This is the command that places the large digital image in the display area. % \begin{macrocode} \def\dc@showPic#1{\leavevmode\xBld{#1}\dc@fudge \vbox to0pt{\vss\hbox to0pt{\hss % \end{macrocode} % The \texttt{inclgraphicx} of the \texttt{dc@commands} family has a secret % macro named \cs{gc@incgfx@addkeys} inserted in its definition. By default, \cs{gc@incgfx@addkeys} % is \cs{let} equal to \cs{@empty}. We change that definition % here to include the \texttt{name} of the graphic, so the document author does not have % to bother. We also scale the picture to fit in the display space. % \begin{macrocode} \def\dc@incgfx@addkeys{width=\digiDSWidth,% height=\digiDSHeight,keepaspectratio,name=#1}% % \end{macrocode} % If there is a custom control for this image, we swap off the default one % with the custom one. % \begin{macrocode} \@ifundefined{dc@icontrol@#1}{}{\expandafter\let\expandafter \dc@icontrol\expandafter=\csname dc@icontrol@#1\endcsname}% % \end{macrocode} % If there is a custom control for this image for the second optional argument, we swap off the default one % with the custom one. % \begin{macrocode} \@ifundefined{dc@iicontrol@#1}{}{\expandafter\let\expandafter \dc@iicontrol\expandafter=\csname dc@iicontrol@#1\endcsname}{}% % \end{macrocode} % Finally, we are ready to execute the appropriate graphic caption command, with or without rollover. % \begin{macrocode} \expandafter\digiCap\dc@use@Rollover% % \end{macrocode} % After determining which control for the first optional argument % we insert |rollovername=ro#1| to give the rollover a pre-determined % name that we know and can use to give the rollover effect for the % long caption, if requested. The rollover key is ignored, if % \cs{digiCap*} is not used. % \begin{macrocode} [\dc@icontrol,rollovername=ro#1]{\null}[\dc@iicontrol]% {\dc@longCapFmt\csname#1Text\endcsname}% \hss}\vss}\eBld} % \end{macrocode} % \end{macro} % \begin{macro}{\digiDisplaySpace} % A simple command to define a space to place the digital images into. The images % are centered both horizontally and vertically in the display space. % The first parameter is the height of the digital display, the second is the width. % These dimensions are recorded in the macros \cs{digiDSHeight} and \cs{digiDSWidth} % This command can be redefined, but the developer needs to define these two macros. % \begin{macrocode} \newcommand{\digiDisplaySpace}[2]{% \def\digiDSHeight{#1}\def\digiDSWidth{#2}% \parbox[c][#1]{#2}{\centering\insertPhotos}% } % \end{macrocode} % \end{macro} % \begin{macro}{\insertPhotos} % This is a user-interface to inserting the photos into the display area. % Used by \cs{digiDisplaySpace}. % \begin{macrocode} \newcommand{\insertPhotos}{\edef\dc@tmp@exp{\noexpand\@for \noexpand\@args:=\dc@presentationOrder}\dc@tmp@exp\do{% \edef\dc@tmp@exp{\noexpand\dc@showPic{\@args}}\dc@tmp@exp}% } % \end{macrocode} % \end{macro} % \begin{macro}{\shortCapFmt} % User-interface to formatting the short captions. % \begin{macrocode} \newcommand{\shortCapFmt}[1]{% \def\dc@showCaption##1##2{\makebox[0pt][c]{\xBld{##1}#1##2\eBld}}} % \end{macrocode} % The default caption formatting is given below. % \begin{macrocode} \shortCapFmt{\sffamily\bfseries\color{blue}} % \end{macrocode} % \end{macro} % \begin{macro}{\insertCaptions} % The main command for inserting captions, these can be placed above or below the display area. % \begin{macrocode} \newcommand{\insertCaptions}{\dc@fudge\edef\dc@tmp@exp{\noexpand\@for \noexpand\@args:=\dc@presentationOrder}\dc@tmp@exp\do{% \edef\dc@tmp@exp{\noexpand\dc@showCaption{\@args}% {\noexpand\csname\@args Caption\noexpand\endcsname}}% \dc@tmp@exp}% } % \end{macrocode} % \end{macro} % \begin{macro}{\insertThumbs} % \begin{macro}{\setWidthOfThumbs} % \begin{macro}{\addvspacetorows} % The command to insert the thumbs in a tabular environment. The % first argument is the number of rows, and second argument is the % number of columns. % \begin{macrocode} \newcommand{\setWidthOfThumbs}[1]{{% \setlength{\dimen0}{#1}% \xdef\dc@thumbwidth{\the\dimen0}% }} \setWidthOfThumbs{0pt} \newcommand{\addvspacetorows}[1]{\def\dc@addvspacetorows{#1}} \addvspacetorows{1ex}% \def\eq@tabSep{&} \def\insertThumbs#1#2{\begingroup \count0=0\relax\count2=0\relax \def\dc@maxRows{#1}\def\dc@maxCols{#2}% \setlength{\dimen0}{\dc@thumbwidth}\ifdim\dimen0=0pt \setWidthOfThumbs{\linewidth/(\dc@maxCols)-\tabcolsep*2}\fi \edef\dc@thisArg{\dc@presentationOrder,}% \def\dc@insThumb@cr{\\[\dc@addvspacetorows]}% \kern0pt\begin{tabular}{*{#2}{m{\dc@thumbwidth}}}% \@whilenum\count0<#1\do{% \@whilenum\count2<#2\do{% \ifx\dc@thisArg\@empty \global\let\dc@insThumb@cr\relax \global\count0=\dc@maxRows \global\count2=\dc@maxCols\else \expandafter\dc@getNextArg\dc@thisArg\@nil \global\advance\count2by1\relax \ifx\dc@testArg\@empty \else\ifnum\count2=\dc@maxCols \else\eq@tabSep\fi\fi\fi }\dc@insThumb@cr \global\count2=0\relax\global\advance\count0by1\relax }% \end{tabular}% \endgroup} \def\dc@getNextArg#1,#2\@nil{\dc@digi@thumbs{#1}\gdef\dc@thisArg{#2}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \subsubsection{Form fields and JavaScript} % % We define a push button with a normal, rollover and push appearance. The JavaScript actions % makes the picture in the display space visible, and making the previous picture hidden. % % The command, \cs{dc@digi@thumbs}, creates a push button with normal, down and rollover appearances. % The JavaScript actions is to show execute the function \texttt{showThisPicture()}, % which is defined as document JavaScript, below. The function manages the hiding and % showing of layers, and if the \cs{useRollovers} is in effect, manages the rollover field % created by \cs{digiCap*} command. % \begin{macrocode} \def\normalAppr#1{n#1} \def\downAppr#1{d#1} \def\rolloverAppr#1{r#1} \def\dc@digi@thumbs#1{\hfil% {\dimen0=\widthOf{#1}bp\relax\dimen2=\heightOf{#1}bp\relax \ifdim\dimen0<\dimen2\relax \edef\dc@argi{\string!}\edef\dc@argii{\dc@thumbwidth}\else \edef\dc@argi{\dc@thumbwidth}\edef\dc@argii{\string!}\fi \xdef\dc@tmp@exp{\noexpand\resizebox{\dc@argi}{\dc@argii}}% }\dc@tmp@exp{\pushButton[% \autoCenter{n}\BC{}\BG{}\S{S}\W0 \A{\JS{% showThisPicture("#1");\r lastPicture="#1";\r this.dirty=false; }}\I{\normalAppr{#1}}\RI{\downAppr{#1}}\IX{\rolloverAppr{#1}} \TP{1}\FB{true}]{pb#1}{\widthOf{#1}bp}{\heightOf{#1}bp}}} % \end{macrocode} % The JavaScript function manages the hiding and showing of layers, % and if the \cs{useRollovers} is in effect, manages the rollover % field. The argument \texttt{name} is the name of the graph to be % shown. The name one to be hidden is saved as the value of % \texttt{lastPicture}. % \begin{macrocode} \begin{insDLJS}[showThisPicture]{digidjs1}{Show This Picture} var lastPicture=""; function showThisPicture(name) { if (lastPicture != "") { var f = this.getField("dcRollover.ro"+lastPicture); if ( f != null ) f.display=display.hidden; toggleSetThisLayer(lastPicture,false); } var f = this.getField("dcRollover.ro"+name); if ( f != null ) f.display=display.visible; toggleSetThisLayer(name); } try { app.runtimeHighlight=false; app.focusRect=false; } catch(e) {}; \end{insDLJS} % % \end{macrocode} % \Finale \endinput % \begin{macrocode} %<*package> % % \end{macrocode}