summaryrefslogtreecommitdiff
path: root/texmf-dist/source/latex/opacity-pro/opacity-pro.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'texmf-dist/source/latex/opacity-pro/opacity-pro.dtx')
-rw-r--r--texmf-dist/source/latex/opacity-pro/opacity-pro.dtx283
1 files changed, 283 insertions, 0 deletions
diff --git a/texmf-dist/source/latex/opacity-pro/opacity-pro.dtx b/texmf-dist/source/latex/opacity-pro/opacity-pro.dtx
new file mode 100644
index 00000000..f40f0c1a
--- /dev/null
+++ b/texmf-dist/source/latex/opacity-pro/opacity-pro.dtx
@@ -0,0 +1,283 @@
+% \iffalse
+%<*copyright>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% opacity-pro.sty 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 %%
+%% tje License, or (at your option) any later version. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</copyright>
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{opacity-pro}
+%<package> [2018/05/13 v1.1 Provides support for transparency (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
+\let\app\textsf
+\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{opacity-pro}{Inputting aebdocfmt.def}}
+ {\def\IndexOpt{\DescribeMacro}\def\IndexKey{\DescribeMacro}\let\setupFullwidth\relax
+ \PackageInfo{opacity-pro}{aebdocfmt.def cannot be found}}
+\begin{document}
+ \GetFileInfo{opacity-pro.sty}
+ \title{\texorpdfstring{\protect\pkg{opacity-pro}\\}{opacity-pro: }as suggested by J\"{u}rgen Gilg}
+ \author{D. P. Story\\
+ Email: \texttt{dpstory@acrotex.net}}
+ \date{processed \today}
+ \maketitle
+ \tableofcontents
+ \DocInput{opacity-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 opacity-pro.ind opacity-pro.idx}\\[3pt]
+ on the command line and recompile \texttt{opacity-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 opacity-pro.gls opacity-pro.glo}\\[3pt]
+ on the command line and recompile \texttt{opacity-pro.dtx}.}
+\end{document}
+%</driver>
+% \fi
+% \MakeShortVerb{|}
+% \InputIfFileExists{aebdonotindex.def}{\PackageInfo{opacity-pro}{Inputting aebdonotindex.def}}
+% {\PackageInfo{opacity-pro}{cannot find aebdonotindex.def}}
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+% This is a short package that provides one command and one
+% environment: \cs{settransparency} and \texttt{settransparency}.
+% They are used to set the opacity and blend of an object. The reader
+% interested in transparency should read Chapter 7 of the \textsl{PDF
+% Reference, Sixth Edition} for Version 1.7. The techniques used in
+% this package were derived from the \textsl{pdfmark Reference}
+% (Adobe Acrobat 8.0 SDK), pages 38--43.
+%
+% As the suffix ``\texttt{pro}'' might suggest, this package is for
+% those who use distiller version 6.0 or greater to produce PDFs. The
+% \textsf{opacity-pro} uses distiller with the \textsf{Adobe PDF
+% Settings} set to process the transparency operator. For your
+% convenience, the \textsf{Adobe PDF Settings} file
+% \texttt{Standard\_transparency.joboptions} is included in the
+% distribution. Place this file wherever distiller looks for the
+% \texttt{.joboptions} files.\footnote{Go to \texttt{Settings > Edit
+% Adobe PDF Settings ...} in the Distiller application window, then
+% click the \texttt{SaveAs} button. A \textsf{Save Adobe PDF Settings
+% As} dialog box opens, and you can then see where Distiller likes to
+% save its \texttt{.joboptions} file. Copy the provided
+% \texttt{.joboptions} to the folder and restart Distiller, the
+% \texttt{Standard\_transparency} should now be visible in the drop
+% down \textsf{Default Settings} list.}
+%
+% The package doesn't really require other packages, but normally, it
+% is used with the color or the graphicx packages. It does require
+% that a .dvi to .ps converter be used that recognizes the special
+% \verb!\special{ps: ...}!. This includes, of course,
+% \textsf{dvips}.
+% %
+% \section{Package Options}
+%
+% \begin{macrocode}
+\DeclareOption{dvips}{\def\op@driver{0}}
+\DeclareOption{dvipsone}{\def\op@driver{1}}
+\def\op@driver{0}
+\@ifundefined{l@tex@@@@driver}{\ExecuteOptions{dvips}}
+ {\ExecuteOptions{dvipsone}}
+\ProcessOptions
+% \end{macrocode}
+% \section{Some documentation}
+% There is a command and an environment version for setting
+% transparency. Use the environment when the content contains
+% verbatim text, for example; otherwise, the content is taken in as one of the
+% parameters. The syntax of these two are,
+%\begin{flushleft}\ttfamily
+%\qquad\string\settransparency*[\ameta{BM\,}]\darg{\ameta{ca}}\darg{\ameta{CA}}[\ameta{PDFKVs}]\darg{\ameta{content}}\\[6pt]
+%\qquad\string\begin\darg{settransparency}[\ameta{BM\,}]\darg{\ameta{ca}}\darg{\ameta{CA}}[\ameta{PDFKVs}]\\
+% \qquad\quad\ameta{contents}\\
+%\qquad\string\end\darg{settransparency}\\[3pt]
+%\qquad\string\begin\darg{settransparency*}[\ameta{BM\,}]\darg{\ameta{ca}}\darg{\ameta{CA}}[\ameta{PDFKVs}]\\
+% \qquad\quad\ameta{contents}\\
+%\qquad\string\end\darg{settransparency*}
+%\end{flushleft}
+%The parameters are
+%\begin{quote}
+%\begin{enumerate}
+% \item[\texttt*] (optional) If present, the PDF entries \textbf{ca} and \textbf{CA}
+% are set as \texttt{/ca \ameta{ca}} and \texttt{/CA \ameta{CA}};
+% otherwise, the algorithm for setting the \textbf{ca} and \textbf{CA}
+% entries into the PDF is used. The algorithm is described in the
+% paragraph \textbf{\nameref{algorithm}} below.
+% \item[\ameta{BM\,}:] Current blend mode. Names recognized are \texttt{Normal}, \texttt{Multiply},
+% \texttt{Screen}, \texttt{Overlay}, \texttt{Darken},
+% \texttt{Lighten}, \texttt{ColorDodge}, \texttt{ColorBurn},
+% \texttt{HardLight}, \texttt{SoftLight}, \texttt{Difference},
+% \texttt{Exclusion}, \texttt{Hue}, \texttt{Color}, \texttt{Saturation} and
+% \texttt{Luminosity}. See the accompanying file \texttt{blend\-modes.tex} for a description
+% of each.
+% \item[\ameta{ca}:] Current alpha constant, specifying the constant
+% shape or constant opacity value to be used for \emph{non-stroking operations}.
+% A number between 0 and 1, inclusive. Default is 1.0.
+% \item[\ameta{CA}:] Current stroking alpha constant, specifying the constant
+% shape or constant opacity value to be used for \emph{stroking operations}.
+% A number between 0 and 1, inclusive. Default is 1.0.
+% \item[\ameta{PDFKVs}] (optional) These pairs can be inserted using the optional
+% fourth parameter (see page 38 of the \textsl{pdfmark Reference, Version
+% 8.0}, for a listing of these other key-value pairs).
+% \item[\ameta{contents}] The target object, this can be text, pictures, color boxes, and so on.
+% \ameta{contents} is either the fifth argument of the command version, or the contents of the environment
+% version.
+%\end{enumerate}
+%\end{quote}
+% In the environment case, the last parameter
+% is optional, so {\LaTeX} will be looking for a left brace `\texttt{[}', if the contents
+% of the environment begin with a command, that command will get expanded while {\LaTeX} looks for
+% a left brace; if this is a potential problem. As a workaround, simply put an empty optional argument `\texttt{[]}'
+% to make {\LaTeX} happy.
+%
+% \section{The main code}
+% Below you will find the code for this package.
+% \begin{macrocode}
+\let\op@YES=y \let\op@NO=n \def\op@mark{[\space}%]
+\def\settransparency@env{settransparency}
+\def\settransparency@envs{settransparency*}
+\let\op@isEnv\op@NO
+\let\op@isStar\op@NO
+% \end{macrocode}
+% \begin{macro}{\settransparency}
+% The command sets transparency for its fifth argument \ameta{contents}
+% \begin{environment}{settransparency}
+% When the content to be operated on is large, or contains verbatim text, use
+% the environment version.
+% \begin{environment}{settransparency*}
+% When the star-option is present for the command, or the \env{settransparency*} environment is used,
+% the algorithm (\textbf{\nameref{algorithm}}) is bypassed.
+% \begin{macrocode}
+\newenvironment{settransparency}{%
+ \@ifstar{\let\op@isStar\op@YES\settransparency@next}
+ {\let\op@isStar\op@NO\settransparency@next}%
+}{\special{ps:grestore}}
+\newenvironment{settransparency*}{\let\op@isStar\op@YES
+ \settransparency@next}{\endsettransparency}
+\newcommand{\settransparency@next}[3][Normal]{%
+ \@ifnextchar[%]
+ {\settransparencyi{#1}{#2}{#3}}%
+ {\settransparencyi{#1}{#2}{#3}[]}}%
+\long\def\settransparencyi#1#2#3[#4]{%
+ \ifx\@currenvir\settransparency@env
+ \let\op@next\settransparencyii@env\else
+ \ifx\@currenvir\settransparency@envs
+ \let\op@next\settransparencyii@env\else
+ \let\op@next\settransparencyii\fi\fi\op@next{#1}{#2}{#3}{#4}%
+}
+\def\settransparencyii#1#2#3#4#5{\op@ck@defs{#2}{#3}\leavevmode
+ \special{ps:gsave \op@mark\op@ca\op@CA/BM/#1#4/SetTransparency
+ pdfmark}#5\special{ps:grestore}%
+}
+\def\settransparencyii@env#1#2#3#4{\op@ck@defs{#2}{#3}\leavevmode
+ \special{ps:gsave \op@mark\op@ca\op@CA/BM/#1#4/SetTransparency
+ pdfmark}%
+}
+% \end{macrocode}
+%\paragraph*{Algorithm for assigning \textbf{ca} and \textbf{CA} entries}\label{algorithm}
+% Recall that $\mbox{\texttt{ca}} = \mbox{filling}$ (non-stroking) and $\mbox{\texttt{CA}} = \mbox{stroking}$. The \app{dvipsone} strokes some paths that
+% \app{dvips} fills. If the star-option is not taken, as a workaround, we always assure that $\mbox{\texttt{ca}} = \mbox{\texttt{CA}}$,
+% provided the \app{dvips} driver is used.
+% \begin{macrocode}
+\def\op@ck@defs#1#2{\def\op@argi{#1}\def\op@argii{#2}%
+ \ifx\op@argii\@empty
+ \let\op@CA\@empty\else\def\op@CA{/CA #2}\fi
+ \ifx\op@argi\@empty\let\op@ca\@empty
+ \else\def\op@ca{/ca #1}%
+% \end{macrocode}
+% If the star-option is taken, we skip this part; otherwise, we apply the algorithm
+% only if the driver is \app{dvips}.
+% \begin{macrocode}
+ \ifx\op@isStar\op@NO
+ \if\op@driver0\relax
+ \ifx\op@argii\@empty\else
+ \def\op@ca{/ca #2}\fi
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+% \end{macro}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+% \Finale
+\endinput
+
+\def\op@ck@defs#1#2{\def\op@argi{#1}\def\op@argii{#2}%
+ \ifx\op@argii\@empty
+ \let\op@CA\@empty\else\def\op@CA{/CA #2}\fi
+ \ifx\op@argi\@empty\let\op@ca\@empty
+ \else\def\op@ca{/ca #1}\fi
+}
+
+
+\def\op@ck@defs#1#2{\def\op@argi{#1}\def\op@argii{#2}%
+ \def\op@ca{\@empty}\def\op@CA{\@empty}%
+ \ifx\op@argii\@empty
+ \else
+ \def\op@CA{/CA #2}%
+ \fi
+ \if\op@driver0\relax
+ \ifx\op@argi\@empty
+ \edef\op@ca{\noexpand\def\noexpand\op@ca{\op@CA}}%
+ \lowercase\expandafter{\op@ca}% ca = CA
+ \else
+ % ca nonempty
+ \ifx\op@argii\@empty
+ \def\op@ca{/ca #1}%
+ \def\op@CA{/CA #1}% CA = ca
+ \else % CA nonempty
+ % in this case, we set ca = CA, even though
+ % there is a value for ca
+ \def\op@ca{/ca #2}% ca = CA
+ \fi
+ \fi
+ \else
+ \def\op@ca{/ca #1}%
+ \fi
+}
+
+\def\op@ck@defs#1#2{\def\op@argi{#1}\def\op@argii{#2}%
+ \ifx\op@argii\@empty
+ \let\op@CA\@empty\else
+ \def\op@CA{/CA #2}\fi
+ \ifx\op@argi\@empty
+ \let\op@ca\@empty\else
+ \def\op@ca{/ca #1}\fi
+}
+\def\op@ck@defs#1#2{%
+ \def\op@argii{#2}\ifx\op@argii\@empty
+ \let\op@CA\@empty\else\def\op@CA{/CA #2}\fi
+ \def\op@argi{#1}%
+ \ifx\op@argi\@empty\let\op@ca\op@CA\else
+ \if\op@driver0\relax
+ \ifx\op@argii\@empty\else
+ \def\op@ca{/ca #2}\fi
+ \else
+ \def\op@ca{/ca #1}\fi
+ \fi
+}