diff options
Diffstat (limited to 'texmf-dist/source/latex/digicap-pro/digicap-pro.dtx')
-rw-r--r-- | texmf-dist/source/latex/digicap-pro/digicap-pro.dtx | 783 |
1 files changed, 783 insertions, 0 deletions
diff --git a/texmf-dist/source/latex/digicap-pro/digicap-pro.dtx b/texmf-dist/source/latex/digicap-pro/digicap-pro.dtx new file mode 100644 index 00000000..00e23502 --- /dev/null +++ b/texmf-dist/source/latex/digicap-pro/digicap-pro.dtx @@ -0,0 +1,783 @@ +% \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. %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%</copyright> +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{digicap-pro} +%<package> [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} +%</driver> +% \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{<caption>} 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[<dc@commands_kvps>] +% {<file>}[<opcolorbox_fam_kvps>]{<caption>} +%\end{verbatim} +% or +%\begin{verbatim} +% \digiCap*[<dc@commands_kvps>] +% {<file>}[<opcolorbox_fam_kvps>]{<caption>} +%\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{<file>} 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} +%</package> +% \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 +% {% +% {<embed_name>}{<graphic_path>}{<short_caption>}{<long_caption>}, +% {<embed_name>}{<graphic_path>}{<short_caption>}{<long_caption>}, +% ... +% {<embed_name>}{<graphic_path>}{<short_caption>}{<long_caption>} +% } +%\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} +%</digidisplay1> +% \end{macrocode} +% \Finale +\endinput +% \begin{macrocode} +%<*package> +%</package> +% \end{macrocode} |