diff options
Diffstat (limited to 'macros/latex/contrib/oberdiek/attachfile2.dtx')
-rw-r--r-- | macros/latex/contrib/oberdiek/attachfile2.dtx | 3290 |
1 files changed, 0 insertions, 3290 deletions
diff --git a/macros/latex/contrib/oberdiek/attachfile2.dtx b/macros/latex/contrib/oberdiek/attachfile2.dtx deleted file mode 100644 index 6a0dfdc5de..0000000000 --- a/macros/latex/contrib/oberdiek/attachfile2.dtx +++ /dev/null @@ -1,3290 +0,0 @@ -% \iffalse meta-comment -% -% File: attachfile2.dtx -% Version: 2019/07/24 v2.9 -% Info: Attach files into PDF -% -% Copyright (C) 2005-2010, 2012 by -% Heiko Oberdiek <heiko.oberdiek at googlemail.com> -% 2019 -% https://github.com/ho-tex/oberdiek/issues -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either -% version 1.3c of this license or (at your option) any later -% version. This version of this license is in -% https://www.latex-project.org/lppl/lppl-1-3c.txt -% and the latest version of this license is in -% https://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of -% LaTeX version 2005/12/01 or later. -% -% This work has the LPPL maintenance status "maintained". -% -% The Current Maintainers of this work are -% Heiko Oberdiek and the Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% This work consists of the main source file attachfile2.dtx -% and the derived files -% attachfile2.sty, attachfile2.pdf, attachfile2.ins, attachfile2.drv, -% atfi-dvips.def, atfi-pdftex.def, atfi-dvipdfmx.def,atfi-luatex.def -% pdfatfi.pl. -% -% Distribution: -% CTAN:macros/latex/contrib/oberdiek/attachfile2.dtx -% CTAN:macros/latex/contrib/oberdiek/attachfile2.pdf -% -% Unpacking: -% (a) If attachfile2.ins is present: -% tex attachfile2.ins -% (b) Without attachfile2.ins: -% tex attachfile2.dtx -% (c) If you insist on using LaTeX -% latex \let\install=y\input{attachfile2.dtx} -% (quote the arguments according to the demands of your shell) -% -% Documentation: -% (a) If attachfile2.drv is present: -% latex attachfile2.drv -% (b) Without attachfile2.drv: -% latex attachfile2.dtx; ... -% The class ltxdoc loads the configuration file ltxdoc.cfg -% if available. Here you can specify further options, e.g. -% use A4 as paper format: -% \PassOptionsToClass{a4paper}{article} -% -% Programm calls to get the documentation (example): -% pdflatex attachfile2.dtx -% makeindex -s gind.ist attachfile2.idx -% pdflatex attachfile2.dtx -% makeindex -s gind.ist attachfile2.idx -% pdflatex attachfile2.dtx -% -% Installation: -% TDS:tex/latex/oberdiek/attachfile2.sty -% TDS:tex/latex/oberdiek/atfi-dvips.def -% TDS:tex/latex/oberdiek/atfi-pdftex.def -% TDS:tex/latex/oberdiek/atfi-dvipdfmx.def -% TDS:tex/latex/oberdiek/atfi-luatex.def -% TDS:scripts/oberdiek/pdfatfi.pl (exec flag) -% TDS:doc/latex/oberdiek/attachfile2.pdf -% TDS:source/latex/oberdiek/attachfile2.dtx -% -%<*ignore> -\begingroup - \catcode123=1 % - \catcode125=2 % - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase 0\ifx\install y1\fi\expandafter - \ifx\csname processbatchFile\endcsname\relax\else1\fi - \ifx\fmtname\x\else 1\fi\relax -\else\csname fi\endcsname -%</ignore> -%<*install> -\input docstrip.tex -\Msg{************************************************************************} -\Msg{* Installation} -\Msg{* Package: attachfile2 2019/07/24 v2.9 Attach files into PDF (HO)} -\Msg{************************************************************************} - -\keepsilent -\askforoverwritefalse - -\let\MetaPrefix\relax -\preamble - -This is a generated file. - -Project: attachfile2 -Version: 2019/07/24 v2.9 - -Copyright (C) 2005-2010, 2012 by - Heiko Oberdiek <heiko.oberdiek at googlemail.com> - -This work may be distributed and/or modified under the -conditions of the LaTeX Project Public License, either -version 1.3c of this license or (at your option) any later -version. This version of this license is in - https://www.latex-project.org/lppl/lppl-1-3c.txt -and the latest version of this license is in - https://www.latex-project.org/lppl.txt -and version 1.3 or later is part of all distributions of -LaTeX version 2005/12/01 or later. - -This work has the LPPL maintenance status "maintained". - -The Current Maintainers of this work are -Heiko Oberdiek and the Oberdiek Package Support Group -https://github.com/ho-tex/oberdiek/issues - - -This work consists of the main source file attachfile2.dtx -and the derived files - attachfile2.sty, attachfile2.pdf, attachfile2.ins, attachfile2.drv, - atfi-dvips.def, atfi-pdftex.def, atfi-dvipdfmx.def, - pdfatfi.pl. - -\endpreamble -\let\MetaPrefix\DoubleperCent - -\generate{% - \file{attachfile2.ins}{\from{attachfile2.dtx}{install}}% - \file{attachfile2.drv}{\from{attachfile2.dtx}{driver}}% - \usedir{tex/latex/oberdiek}% - \file{attachfile2.sty}{\from{attachfile2.dtx}{package}}% - \file{atfi-dvips.def}{\from{attachfile2.dtx}{dvips}}% - \file{atfi-pdftex.def}{\from{attachfile2.dtx}{pdftex}}% - \file{atfi-luatex.def}{\from{attachfile2.dtx}{luatex}}% - \file{atfi-dvipdfmx.def}{\from{attachfile2.dtx}{dvipdfmx}}% - \nopreamble - \nopostamble - \usedir{scripts/oberdiek}% - \csname execfiletrue\endcsname - \file{pdfatfi.pl}{\from{attachfile2.dtx}{pdfatfi}}% -% \usedir{source/latex/oberdiek/catalogue}% -% \file{attachfile2.xml}{\from{attachfile2.dtx}{catalogue}}% -} - -\catcode32=13\relax% active space -\let =\space% -\Msg{************************************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move the following} -\Msg{* files into a directory searched by TeX:} -\Msg{*} -\Msg{* attachfile2.sty, atfi-dvips.def, atfi-pdftex.def,} -\Msg{* atfi-dvipdfmx.def} -\Msg{*} -\Msg{* And install the following script file:} -\Msg{*} -\Msg{* pdfatfi.pl} -\Msg{*} -\Msg{* To produce the documentation run the file `attachfile2.drv'} -\Msg{* through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing!} -\Msg{*} -\Msg{************************************************************************} - -\endbatchfile -%</install> -%<*ignore> -\fi -%</ignore> -%<*driver> -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile{attachfile2.drv}% - [2019/07/24 v2.9 Attach files into PDF (HO)]% -\documentclass{ltxdoc} -\usepackage{holtxdoc}[2011/11/22] -\begin{document} - \DocInput{attachfile2.dtx}% -\end{document} -%</driver> -% \fi -% -% -% \CharacterTable -% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z -% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z -% Digits \0\1\2\3\4\5\6\7\8\9 -% Exclamation \! Double quote \" Hash (number) \# -% Dollar \$ Percent \% Ampersand \& -% Acute accent \' Left paren \( Right paren \) -% Asterisk \* Plus \+ Comma \, -% Minus \- Point \. Solidus \/ -% Colon \: Semicolon \; Less than \< -% Equals \= Greater than \> Question mark \? -% Commercial at \@ Left bracket \[ Backslash \\ -% Right bracket \] Circumflex \^ Underscore \_ -% Grave accent \` Left brace \{ Vertical bar \| -% Right brace \} Tilde \~} -% -% \GetFileInfo{attachfile2.drv} -% -% \title{The \xpackage{attachfile2} package} -% \date{2019/07/24 v2.9} -% \author{Heiko Oberdiek\thanks -% {Please report any issues at \url{https://github.com/ho-tex/oberdiek/issues}}} -% -% \maketitle -% -% \begin{abstract} -% This package can be used to attach files to a PDF document. -% It is a further development of Scott Pakin's package -% \xpackage{attachfile} for \pdfTeX. Apart from bug fixes, -% package \xpackage{attachfile2} adds support for \xoption{dvips}, -% some new options, gets and writes meta information data about -% the attached files. -% \end{abstract} -% -% \tableofcontents -% -% \section{Documentation} -% -% \subsection{Introduction} -% -% The PDF format (\cite{pdfspec}) allows the inclusion of files -% inside the PDF document. The included files can be bound to an -% annotation on a page. Or they can be recorded in a sorted -% list of embedded files. The packages \xpackage{attachfile} -% or \xpackage{attachfile2} follow the first approach, -% package \xpackage{embedfile} uses the latter method. -% -% \subsubsection{Future development} -% -% My dream is a large package that merges the features of -% all these packages meantioned before: -% \begin{itemize} -% \item Files can be attached to a page. -% \item Files can be attached to the document. -% \item An easy user interface for simple, common tasks and -% beginners. -% \item An interface for the advanced users that want to setup -% every detail. -% \item Support of many drivers (pdftex, dvips, dvipdfm, \dots). -% \item \dots -% \end{itemize} -% However, I have not managed to take the time for this project. -% Instead: -% \begin{itemize} -% \item First I experimented with package \xpackage{attachfile}, -% adding driver support, fixing bugs, \dots. The result is -% currently named as \xpackage{attachfile2}. It uses an external -% script to get file properties (size, date, checksum, \dots). -% \item In order to avoid an external program for getting basic -% file properties I provided a patch ``EscapeAndOther'' for -% pdfTeX that was accepted for version 1.30. -% \item Package \xpackage{embedfile} closes a gap left by the -% packages for attaching -% files and allows the embedding of files to the document. -% Also it makes use of the new primitives of \pdfTeX. -% \end{itemize} -% Until this future becomes true, I provide the intermediate -% step \xpackage{attachfile2} at its current state. -% There are many things to do: -% \begin{itemize} -% \item Documentation, documentation, \dots -% \item Improving portability of the Perl script \xfile{pdfatfi.pl} -% (Windows, non-GNU, \dots). -% \item Comfortable program for extracting embeddd files. -% \item Embedding files to the document, see package \xpackage{embedfile}. -% \item Additionally use featurs of \pdfTeX\ 1.30. With a recent -% \pdfTeX\ the Perl script step is then obsolete. -% \item GoToE links. -% \item Layout of PinPush, especially the tip does not scale well. -% \item Driver for \xoption{dvipsone}, similar to \xoption{dvips}, changes: -% \begin{itemize} -% \item coordinate transformation need to be fixed here, -% \xfile{hdvipson.def} contains: -% \begin{quote} -%\begin{verbatim} -%/DvipsToPDF { 65781 div } def -%/PDFToDvips { 65781 mul } def -%\end{verbatim} -% \end{quote} -% \item Syntax for \cs{special}: \xfile{hdvipson.def} contains -% both \verb|\special{! #1}| and -% \verb|\special{headertext= #1}|. Are bothe the same? -% \end{itemize} -% \item File name conversion, see PDF specification: -% \begin{quote} -% \verb|c:\somewhere\foobar.txt| $\rightarrow$ -% \verb|/c/somewhere/foobar.txt| -% \end{quote} -% \item Option \xoption{scale} for icons? -% \item Compatibility for \plainTeX. -% \item ToDos for \xfile{atfidvips.def}. -% \end{itemize} -% -% \subsection{User interface} -% -% Basically this package \xpackage{attachfile2} follows the -% user interface of package \xpackage{attachfile}, -% look into its documentation (\cite{attachfile}). -% -% \subsubsection{New options} -% \begin{itemize} -% \item Driver options \xoption{dvips}, \xoption{pdftex}, -% \xoption{dvipdfmx} and \xoption{xetex} that is an -% alias for \xoption{dvipdfmx}. -% \item Option \xoption{driverfallback} specifies a DVI driver -% if the driver cannot be detected automatically. -% \item New options \xoption{final} and \xoption{draft}. -% \item New option \xoption{scale} for scaling the annotation rectangle. -% \item Options \xoption{file} and \xoption{nofile} for controlling -% the generation of the auxiliary file \xfile{.atfi}. -% \item New option \xoption{ucfilespec} for file names with -% characters outside ASCII (PDF 1.7). -% \end{itemize} -% -% \subsubsection{Option \xoption{color}} -% -% Package \xpackage{attachfile}'s option \xoption{color} only -% understands explicit RGB values as three space separated -% real numbers in the range from 0 to 1. -% -% This package \xpackage{attachfile2} extends the syntax. -% The usual color specifications of packages \xpackage{color} -% or \xpackage{xcolor} may be used. The latter one requires -% that package \xpackage{xcolor} is loaded. -% Without package \xpackage{xcolor} a limited range of -% explicit color specifications are supported, the color models -% \texttt{rgb} and \texttt{gray} (and \texttt{cmyk} if -% package \xpackage{hyperref}'s option \xoption{pdfversion} is set -% to \texttt{1.7} or greater. -% -% Example without package \xpackage{xcolor}: -%\begin{quote} -%\begin{verbatim} -%\documentclass{article} -%\usepackage[color={1 0 .5}]{attachfile2} -% % Spaces in option values in \usepackage or \documentclass -% % must be protected by curly braces. Otherwise LaTeX strips -% % the spaces and the package would see `color=10.5'. -% % This protection is not necessary for \attachfilesetup. -%\attachfilesetup{color=1 0 .5} -%\attachfilesetup{color=[rgb]{1,0,.5}} -%\attachfilesetup{color=[gray]{.5}} -%\end{verbatim} -%\end{quote} -% -% The following example with package \xpackage{xcolor} shows -% additional color specifications: -%\begin{quote} -%\begin{verbatim} -%\documentclass{article} -%\usepackage{xcolor} -%\definecolor{attachfilecolor}{cmyk}{.1,.2,.3,.4} -%\usepackage{color=red}{attachfile2} -%\attachfilesetup{color=red} -%\attachfilesetup{color=attachfilecolor} -%\end{verbatim} -%\end{quote} -% -% \paragraph{For experts.}% -% If the color is used in annotations, the color is converted -% with the help of package \xpackage{xcolor} to RGB. -% PDF versions 1.7 or later also understand color models Gray and -% CMYK. The PDF version is detected if the experimental -% option \xoption{pdfversion} -% of package \xpackage{hyperref} is used, example: -%\begin{quote} -%\begin{verbatim} -%\documentclass{article} -%\usepackage[pdfversion=1.7]{hyperref} -%\usepackage{attachfile2} -%\end{verbatim} -%\end{quote} -% However, currently only driver \xoption{pdftex} also supports -% the actual setting of the PDF version in the output PDF file. -% -% \subsubsection{Perl script \xfile{pdfatfi.pl}} -% -% This package also tries to get and add meta information data, -% such as file size, file date, checksum, \dots. -% As package \xpackage{embedfile} shows the new features -% of \pdfTeX\ 1.30 are very useful for getting this kind of -% data. Since version 2.6 these data are used if available. -% -% For older versions of \pdfTeX\ and \XeTeX\ the Perl script -% \xfile{pdfatfi.pl} is provided to get this data. -% The use of the Perl script is not mandatory. This data can be shown -% by PDF viewers, but they are not a requirement of the PDF specification. -% -% Package \xpackage{attachfile2} and the Perl script communicate -% via an auxiliary file with file extension \xfile{.atfi}. The script -% is used between two \LaTeX\ runs and updates the auxiliary file, -% example for \xoption{dvips}: -% \begin{quote} -%\begin{verbatim} -%latex test -%pdfatfi test -%latex test -%dvips test -%ps2pdf test.ps test.pdf -%\end{verbatim} -% \end{quote} -% -% \subsection{Changes to \xpackage{attachfile}} -% -% Some of the changes I can remember: -% \begin{itemize} -% \item Support for dvips. -% \item Support for dvipdfmx/\XeTeX. -% \item Setting and filling the /Param entry for files -% (file date, file size, \dots). -% \item Perl script \xfile{pdfatfi.pl}. -% \item New options. -% \item Bug fixes. -% \item \dots -% \end{itemize} -% -% \StopEventually{ -% } -% -% \section{Implementation} -% -% \subsection{Package} -% -% \begin{macrocode} -%<*package> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{attachfile2}% - [2019/07/24 v2.9 Attach files into PDF (HO)]% -% \end{macrocode} -% -% \subsubsection{Loading of packages} -% -% \begin{macrocode} -\RequirePackage{ifpdf}[2009/04/10] -\RequirePackage{ifxetex} -\RequirePackage{ifluatex}[2009/04/10] -\RequirePackage{keyval} -\RequirePackage{color} -\RequirePackage{infwarerr}[2010/04/08] -\RequirePackage{ltxcmds}[2010/04/26] -\RequirePackage{kvoptions}[2009/07/21] -\RequirePackage{pdftexcmds}[2010/04/01] -\RequirePackage{pdfescape}[2007/11/11] -% \end{macrocode} -% Package \xpackage{hyperref} is needed because of \cs{pdfstringdef}. -% \begin{macrocode} -\RequirePackage{hyperref} -\RequirePackage{hycolor}[2008/07/29] -% \end{macrocode} -% -% \subsubsection{Value checking} -% -% \begin{macro}{\atfi@Match} -% \begin{macrocode} -\ltx@IfUndefined{pdfmatch}{% - \def\atfi@Match#1#2#3#4#5{}% -}{% - \def\atfi@Match#1#2#3{% - \begingroup - \edef\^{\ltx@backslashchar\string^}% - \edef\.{\ltx@backslashchar.}% - \let\#\ltx@hashchar - \edef\[{\ltx@backslashchar[}% ]] - \edef\${\ltx@backslashchar$}% - \let\%\ltx@percentchar - \edef\&{\string&}% - \edef\({\ltx@backslashchar(}% - \edef\){\ltx@backslashchar)}% - \edef\|{\ltx@backslashchar|}% - \edef\*{\ltx@backslashchar*}% - \edef\+{\ltx@backslashchar+}% - \edef\?{\ltx@backslashchar?}% - \edef\{{\ltx@backslashchar\ltx@leftbracechar}% - \edef\}{\ltx@rightbracechar}% - \edef\\{\ltx@backslashchar\ltx@backslashchar}% - \edef\~{\string~}% - \ifcase\pdfmatch#3{#2}{#1} % - \endgroup - \expandafter\ltx@secondoftwo - \or - \endgroup - \expandafter\ltx@firstoftwo - \else - \atfi@Warning{% - Internal error: Wrong pattern!\MessageBreak - --> #2 <--\MessageBreak - Pattern check ignored% - }% - \endgroup - \expandafter\ltx@firstoftwo - \fi - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@PatToken} -% \begin{macrocode} - \def\atfi@PatToken{% - [% - -% first character - !% - \#$\%\&'% - \*\+\.% - 0-9% - A-Z% - \^_`% - a-z% - \{\}\|\~% - ]+% - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@CR} -% \begin{macrocode} - \begingroup - \lccode64=13 % @ - \lowercase{\endgroup - \def\atfi@CR{@}% - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@PatQuotedString} -% \begin{macrocode} - \def\atfi@PatQuotedString{% - "% - ([^"\\\atfi@CR]|\\.)*% - "% - }% -% \end{macrocode} -% \end{macro} -% \begin{macrocode} - \ltx@ifpackagelater{ltxcmds}{2010/09/11}{}{% -% \end{macrocode} -% \begin{macro}{\atfi@ltx@leftbracechar} -% \begin{macrocode} - \begingroup - \lccode`0=`\{\relax - \lowercase{\endgroup - \def\ltx@leftbracechar{0}% - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ltx@rightbracechar} -% \begin{macrocode} - \begingroup - \lccode`0=`\}\relax - \lowercase{\endgroup - \def\ltx@rightbracechar{0}% - }% -% \end{macrocode} -% \end{macro} -% \begin{macrocode} - }% -} -% \end{macrocode} -% -% \begin{macro}{\atfi@Warning} -% \begin{macrocode} -\def\atfi@Warning{\PackageWarning{attachfile2}} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Option declarations} -% -% \begin{macrocode} -\SetupKeyvalOptions{% - family=AtFi,% - prefix=atfi@% -} -% \end{macrocode} -% \begin{macro}{\atfi@setup} -% \begin{macrocode} -\def\atfi@setup{\setkeys{AtFi}} -% \end{macrocode} -% \end{macro} -% -% Options \xoption{draft} and \xoption{final}. -% \begin{macrocode} -\DeclareBoolOption{draft} -\DeclareComplementaryOption{final}{draft} -% \end{macrocode} -% -% Option \xoption{mimetype}. -% \begin{macro}{\atfi@mimetype} -% \begin{macrocode} -\def\atfi@mimetype{} -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\define@key{AtFi}{mimetype}{% - \edef\atfi@mimetype{#1}% - \ifx\atfi@mimetype\ltx@empty - \else - \atfi@Match\atfi@mimetype{% - ^(application|audio|image|model|text|video|x-\atfi@PatToken)% - /% - ([a-z\-\+_\.0-9]+)% - (; ?\atfi@PatToken=(\atfi@PatToken|\atfi@PatQuotedString))*$% - }{icase}{}{% - \atfi@Warning{% - Invalid value `\atfi@mimetype'\MessageBreak - of option `mimetype'.\MessageBreak - Value is discarded% - }% - \let\atfi@mimetype\ltx@empty - }% - \fi - \ifx\atfi@mimetype\ltx@empty - \else - \EdefEscapeName\atfi@mimetype{\atfi@mimetype}% - \edef\atfi@mimetype{/Subtype/\atfi@mimetype}% - \fi -} -% \end{macrocode} -% -% Option \xoption{icon} -% \begin{macrocode} -\define@key{AtFi}{icon}{% - \def\atfi@icon{/Name/#1}% - \def\atfi@icon@icon{#1}% -} -\atfi@setup{icon=PushPin} -% \end{macrocode} -% -% Option \xoption{color} -% \begin{macrocode} -\define@key{AtFi}{color}{% - \HyColor@AttachfileColor{#1}% - \atfi@color@tex\atfi@color@inline\atfi@color@annot - {attachfile2}{color}% -} -\atfi@setup{color=1 0.9255 0.7765} -% \end{macrocode} -% -% time options timezone and date -% \begin{macro}{\atfi@pad@ii} -% \begin{macrocode} -\def\atfi@pad@ii#1{% - \ifnum#1>9 % - \number#1% - \else - 0\number#1% - \fi% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{atfi@timezone} -% \begin{macrocode} -\let\atfi@timezone\ltx@empty -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\define@key{AtFi}{timezone}{\def\atfi@timezone{#1}} -% \end{macrocode} -% \begin{macro}{\atfi@time} -% \begin{macrocode} -\edef\atfi@time{\the\time} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@hours} -% \begin{macrocode} -\def\atfi@hours{% - \numexpr\dimexpr0.01667\dimexpr\atfi@time sp\relax\relax\relax -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@minutes} -% \begin{macrocode} -\def\atfi@minutes{% - \numexpr\atfi@time-60*\atfi@hours\relax -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@seconds} -% \begin{macrocode} -\def\atfi@seconds{0} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@date} -% \begin{macrocode} -\def\atfi@date{% - /M(D:\the\year - \atfi@pad@ii\month - \atfi@pad@ii\day - \atfi@pad@ii\atfi@hours - \atfi@pad@ii\atfi@minutes - \atfi@pad@ii\atfi@seconds - \atfi@timezone)% -} -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\define@key{AtFi}{date}{% - \EdefEscapeString\atfi@date{#1}% - \edef\atfi@date{/M(\atfi@date)}% -} -% \end{macrocode} -% -% Text options author, description, and subject -% \begin{macro}{\atfi@pdfstringdef} -% \begin{macrocode} -\DeclareRobustCommand{\atfi@pdfstringdef}[2]{% - \pdfstringdef\atfi@temp@string{#2}% - \edef#1{\atfi@temp@string}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\atfi@NoValue} -% \begin{macrocode} -\def\atfi@NoValue{\NoValue} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\atfi@DefNoValueName} -% \begin{macrocode} -\def\atfi@DefNoValueName#1#2#3{% - \def#1{#3}% - \ifx#1\atfi@NoValue - \let#1\ltx@empty - \else - \atfi@pdfstringdef#1{#1}% - \edef#1{/#2(#1)}% - \fi -} -% \end{macrocode} -% \end{macro} -% -% Name for annotation to be used in GoToE actions -% \begin{macro}{\atfi@annotname} -% \begin{macrocode} -\let\atfi@annotname\ltx@empty -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\define@key{AtFi}{annotname}[\NoValue]{% - \atfi@DefNoValueName\atfi@annotname{NM}{#1}% -} -% \end{macrocode} -% -% Option \xoption{author}. -% \begin{macro}{\atfi@author} -% \begin{macrocode} -\def\atfi@author{} -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\define@key{AtFi}{author}[\NoValue]{% - \atfi@DefNoValueName\atfi@author{T}{#1}% -} -% \end{macrocode} -% -% Option \xoption{description}. -% \begin{macro}{\atfi@description} -% \begin{macrocode} -\def\atfi@description{} -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\define@key{AtFi}{description}[\NoValue]{% - \atfi@DefNoValueName\atfi@description{Contents}{#1}% -} -% \end{macrocode} -% -% Option \xoption{subject}. -% \begin{macro}{\atfi@subject} -% \begin{macrocode} -\def\atfi@subject{} -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\define@key{AtFi}{subject}[\NoValue]{% - \atfi@DefNoValueName\atfi@subject{Subj}{#1}% -} -% \end{macrocode} -% -% Option \xoption{print}. -% \begin{macrocode} -\DeclareBoolOption[true]{print} -% \end{macrocode} -% -% Option \xoption{zoom}. -% \begin{macrocode} -\DeclareBoolOption[true]{zoom} -% \end{macrocode} -% -% Option \xoption{appearance}. -% \begin{macrocode} -\DeclareBoolOption[true]{appearance} -% \end{macrocode} -% -% Option \xoption{scale}. -% \begin{macrocode} -\DeclareStringOption[1]{scale} -% \end{macrocode} -% -% Option \xoption{ucfilespec}. -% \begin{macro}{\atfi@ucfilespec} -% \begin{macrocode} -\def\atfi@ucfilespec{} -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\define@key{AtFi}{ucfilespec}[1]{% - \def\atfi@ucfilespec{#1}% - \ifx\atfi@ucfilespec\ltx@empty - \else - \atfi@pdfstringdef\atfi@ucfilespec{#1}% - \fi -} -% \end{macrocode} -% -% Option \xoption{nofiles}. -% \begin{macrocode} -\DeclareBoolOption{nofiles} -% \end{macrocode} -% -% Driver options. -% \begin{macrocode} -\let\atfi@driver\ltx@empty -\def\atfi@driver@pdftex{pdftex} -\def\atfi@driver@luatex{luatex} -\def\atfi@driver@dvips{dvips} -\def\atfi@driver@dvipdfmx{dvipdfmx} -% \end{macrocode} -% \begin{macrocode} -\DeclareVoidOption{pdftex}{% - \ifpdf - \let\atfi@driver\atfi@driver@pdftex - \else - \let\atfi@driver\ltx@empty - \PackageError{attachfile2}{% - Wrong driver option `pdftex',\MessageBreak - because pdfTeX in PDF mode is not detected% - }\@ehc - \fi -} -\DeclareVoidOption{luatex}{% - \let\atfi@driver\atfi@driver@luatex -} -\DeclareVoidOption{dvips}{% - \let\atfi@driver\atfi@driver@dvips -} -\DeclareVoidOption{dvipdfmx}{% - \let\atfi@driver\atfi@driver@dvipdfmx -} -\DeclareVoidOption{xetex}{% - \let\atfi@driver\atfi@driver@dvipdfmx -} -% \end{macrocode} -% \begin{macrocode} -\DeclareStringOption{driverfallback} -% \end{macrocode} -% -% \begin{macro}{\attachfilesetup} -% \begin{macrocode} -\DeclareRobustCommand{\attachfilesetup}[1]{\setkeys{AtFi}{#1}} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\DeclareLocalOptions{% - annotname,% - appearance,% - author,% - color,% - date,% - description,% - icon,% - mimetype,% - nofiles,% - print,% - scale,% - subject,% - timezone,% - ucfilespec,% - zoom,% -} -% \end{macrocode} -% -% \subsubsection{Option calling} -% -% Timezone setting, \dots -% \begin{macrocode} -\InputIfFileExists{attachfile.cfg}{}{} -% \end{macrocode} -% \begin{macrocode} -\ProcessKeyvalOptions* -% \end{macrocode} -% -% \begin{macro}{\atfi@DisableOption} -% \begin{macrocode} -\def\atfi@DisableOption{% - \DisableKeyvalOption[action=error,package=attachfile2]{AtFi}% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Evaluate driver options} -% -% \begin{macrocode} -\ifpdf - \ifluatex - \let\atfi@driver\atfi@driver@luatex - \else - \let\atfi@driver\atfi@driver@pdftex - \fi -\else - \ifxetex - \let\atfi@driver\atfi@driver@dvipdfmx - \else - \ifx\atfi@driver\ltx@empty - \ifx\atfi@driverfallback\ltx@empty - \else - \expandafter\let\expandafter\atfi@driver - \csname atfi@driver@\atfi@driverfallback\endcsname - \ifx\atfi@driver\atfi@driver@dvips - \else - \ifx\atfi@driver\atfi@driver@dvipdfmx - \else - \let\atfi@driver\ltx@empty - \PackageWarningNoLine{attachfile2}{% - Option `driverfallback' with unsupported\MessageBreak - DVI driver (\atfi@driverfallback)% - }% - \fi - \fi - \fi - \ifx\atfi@driver\ltx@empty - \PackageWarningNoLine{attachfile2}{% - Driver is not specified,\MessageBreak - enforce draft settings% - }% - \atfi@drafttrue - \fi - \fi - \fi -\fi -% \end{macrocode} -% \begin{macrocode} -\atfi@DisableOption{pdftex} -\atfi@DisableOption{dvips} -\atfi@DisableOption{dvipdfmx} -\atfi@DisableOption{xetex} -\atfi@DisableOption{driverfallback} -% \end{macrocode} -% -% \subsubsection{Evaluate options \xoption{draft}/\xoption{final}} -% -% \begin{macro}{\notextattachfile} -% \begin{macrocode} -\DeclareRobustCommand{\notextattachfile}[2][]{% - \begingroup - \atfi@setup{#1}% - \ifatfi@print - \leavevmode - \begingroup - \HyColor@UseColor\atfi@color@tex - #2\strut - \endgroup - \else - \sbox\ltx@zero{#2\strut}% - \makebox[\wd0]{}% - \fi - \endgroup -} -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\atfi@DisableOption{draft}% -\atfi@DisableOption{final}% -\ifatfi@draft - \def\atfi@dummy@pushpin{% - \raisebox{-1.25bp}{\parbox[b][14bp]{24bp}{}}% - }% - \DeclareRobustCommand{\textattachfile}[3][]{% - \notextattachfile[{#1}]{#3}% - }% - \DeclareRobustCommand{\noattachfile}[1][]{% - \notextattachfile[{#1}]{\atfi@dummy@pushpin}% - }% - \DeclareRobustCommand{\attachfile}[2][]{% - \noattachfile[{#1}]% - }% - \expandafter\endinput -\fi -% \end{macrocode} -% -% \subsubsection{Load driver file} -% -% \begin{macrocode} -\input{atfi-\atfi@driver.def} -% \end{macrocode} -% -% \subsubsection{Graphics} -% -% \begin{macro}{\atfi@acroGraph@data} -% \begin{macrocode} -\def\atfi@acroGraph@data{% - \atfi@GSAVE - 0.5 \atfi@SETGRAYFILL - 1.1133 0 20.7202 18.2754 \atfi@RECTFILL - 0 \atfi@SETFLAT - 0.5 \atfi@SETLINEWIDTH - 4 \atfi@SETMITERLIMIT - \atfi@RECTSTROKEFILL{% - 1 \atfi@SETGRAYFILL - }{% - 0 \atfi@SETGRAYSTROKE - }{% - 0.25 1.6453 20.145 17.7715 % - }% - 0 \atfi@SETGRAYFILL - 2.7319 4.1367 3.9571 13.8867 \atfi@RECTFILL - 8.7031 4.1367 3.9571 9.8867 \atfi@RECTFILL - 14.7471 4.1367 3.9571 11.8867 \atfi@RECTFILL - \atfi@color@inline{FILL}% - 1.689 3.0938 3.9571 13.8867 \atfi@RECTFILL - 7.6602 3.0938 3.9571 9.8867 \atfi@RECTFILL - 13.7041 3.0938 3.9571 11.8867 \atfi@RECTFILL - \atfi@GRESTORE -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@acroGraph} -% \begin{macrocode} -\def\atfi@acroGraph{% - \raisebox{-1.5bp}{\parbox[b][20bp]{22bp}{% - \rule{0pt}{0pt}\atfi@literal{\atfi@acroGraph@data}}% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@acroPaperclip@data} -% \begin{macrocode} -\newcommand{\atfi@acroPaperclip@data}{% - \atfi@GSAVE - 0.75 \atfi@SETGRAYSTROKE - 0 \atfi@SETFLAT - 2.5 \atfi@SETLINEWIDTH - 1 \atfi@SETLINECAP - 4 \atfi@SETMITERLIMIT - 1.9619 11.7559 \atfi@MOVETO - 1.9619 3.3037 1.9619 2.5059 \atfi@CURVETOV - 1.9619 1.707 4.0947 1.25 \atfi@CURVETOY - 7.4141 1.25 \atfi@LINETO - 9.4292 1.8223 9.4292 3.3066 \atfi@CURVETOV - 9.4292 4.79 9.4292 16.8945 \atfi@CURVETOY - 9.7852 18.1514 8.481 18.1514 \atfi@CURVETOV - 7.1768 18.1514 5.1616 18.1514 \atfi@CURVETOY - 3.8574 17.9209 3.8574 16.8945 \atfi@CURVETOV - 3.8574 15.8652 3.8574 6.6172 \atfi@CURVETOY - 4.3325 5.418 5.1025 5.418 \atfi@CURVETOV - 5.8726 5.418 6.5845 5.418 \atfi@CURVETOY - 7.6812 5.6455 7.6812 6.4736 \atfi@CURVETOV - 7.6812 7.3027 7.6812 11.5264 \atfi@CURVETOY - \atfi@STROKE - 0 \atfi@SETGRAYSTROKE - 1.2495 12.4404 \atfi@MOVETO - 1.2495 3.9883 1.2495 3.1895 \atfi@CURVETOV - 1.2495 2.3906 3.3833 1.9326 \atfi@CURVETOY - 6.7026 1.9326 \atfi@LINETO - 8.7178 2.5068 8.7178 3.9902 \atfi@CURVETOV - 8.7178 5.4736 8.7178 17.5781 \atfi@CURVETOY - 9.0732 18.834 7.769 18.834 \atfi@CURVETOV - 6.4653 18.834 4.4497 18.834 \atfi@CURVETOY - 3.146 18.6055 3.146 17.5781 \atfi@CURVETOV - 3.146 16.5498 3.146 7.3018 \atfi@CURVETOY - 3.6201 6.1016 4.3911 6.1016 \atfi@CURVETOV - 5.1611 6.1016 5.873 6.1016 \atfi@CURVETOY - 6.9692 6.3301 6.9692 7.1572 \atfi@CURVETOV - 6.9692 7.9863 6.9692 12.21 \atfi@CURVETOY - \atfi@STROKE - \atfi@color@inline{STROKE}% - 1 \atfi@SETLINEWIDTH - 1.2495 12.4404 \atfi@MOVETO - 1.2495 3.9883 1.2495 3.1895 \atfi@CURVETOV - 1.2495 2.3906 3.3833 1.9326 \atfi@CURVETOY - 6.7026 1.9326 \atfi@LINETO - 8.7178 2.5068 8.7178 3.9902 \atfi@CURVETOV - 8.7178 5.4736 8.7178 17.5781 \atfi@CURVETOY - 9.0732 18.834 7.769 18.834 \atfi@CURVETOV - 6.4653 18.834 4.4497 18.834 \atfi@CURVETOY - 3.146 18.6055 3.146 17.5781 \atfi@CURVETOV - 3.146 16.5498 3.146 7.3018 \atfi@CURVETOY - 3.6201 6.1016 4.3911 6.1016 \atfi@CURVETOV - 5.1611 6.1016 5.873 6.1016 \atfi@CURVETOY - 6.9692 6.3301 6.9692 7.1572 \atfi@CURVETOV - 6.9692 7.9863 6.9692 12.21 \atfi@CURVETOY - \atfi@STROKE - \atfi@GRESTORE -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@acroPaperclip} -% \begin{macrocode} -\def\atfi@acroPaperclip{% - \raisebox{-1.25bp}{\parbox[b][21bp]{12bp}{% - \rule{0pt}{0pt}\atfi@literal{\atfi@acroPaperclip@data}}% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@acroPushPin@data} -% \begin{macrocode} -\def\atfi@acroPushPin@data{% - \atfi@GSAVE - 1 \atfi@SETLINEWIDTH - 1 6 \atfi@MOVETO - 11 6 \atfi@LINETO - 11 13 \atfi@LINETO - 12 13 \atfi@LINETO - 14 11 \atfi@LINETO - 21 11 \atfi@LINETO - 22 12 \atfi@LINETO - 23 12 \atfi@LINETO - 23 2 \atfi@LINETO - 22 2 \atfi@LINETO - 21 3 \atfi@LINETO - 14 3 \atfi@LINETO - 12 1 \atfi@LINETO - 11 1 \atfi@LINETO - 11 6 \atfi@LINETO - \atfi@FILLSTROKE{% - \atfi@color@inline{FILL}% - }{% - 0 \atfi@SETGRAYSTROKE - }% - 0.5 \atfi@SETGRAYSTROKE - 0 7 \atfi@MOVETO - 10 7 \atfi@LINETO - 10 8 \atfi@LINETO - 1 8 \atfi@LINETO - \atfi@STROKE - 1 \atfi@SETGRAYSTROKE - 12 12 \atfi@MOVETO - 14 10 \atfi@LINETO - 22 10 \atfi@LINETO - 22 11 \atfi@LINETO - \atfi@STROKE - \atfi@GRESTORE -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@acroPushPin} -% \begin{macrocode} -\def\atfi@acroPushPin{% - \raisebox{-1.25bp}{\parbox[b][14bp]{24bp}{% - \rule{0pt}{0pt}\atfi@literal{\atfi@acroPushPin@data}}% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@acroTag@data} -% \begin{macrocode} -\def\atfi@acroTag@data{% - \atfi@GSAVE - 0.5 \atfi@SETGRAYFILL - 10.0542 14.9873 \atfi@MOVETO - 24.27 14.9873 \atfi@LINETO - 25.252 14.0059 \atfi@LINETO - 25.252 1.1455 \atfi@LINETO - 24.1064 0 \atfi@LINETO - 9.9609 0 \atfi@LINETO - 6.0327 6.0088 \atfi@LINETO - 6.0327 9.002 \atfi@LINETO - 10.0542 14.9873 \atfi@LINETO - 9.3994 9.376 \atfi@MOVETO - 8.5215 9.376 7.8096 8.5596 7.8096 7.5527 \atfi@CURVETO - 7.8096 6.5449 8.5215 5.7285 9.3994 5.7285 \atfi@CURVETO - 10.2778 5.7285 10.9897 6.5449 10.9897 7.5527 \atfi@CURVETO - 10.9897 8.5596 10.2778 9.376 9.3994 9.376 \atfi@CURVETO - \atfi@CLOSEPATH - \atfi@FILL - 0 \atfi@SETFLAT - 0.5 \atfi@SETLINEWIDTH - 4 \atfi@SETMITERLIMIT - 1 \atfi@SETLINEJOIN - 8.5107 16.5313 \atfi@MOVETO - 22.7266 16.5313 \atfi@LINETO - 23.7085 15.5488 \atfi@LINETO - 23.7085 2.6895 \atfi@LINETO - 22.563 1.543 \atfi@LINETO - 8.4175 1.543 \atfi@LINETO - 4.4893 7.5527 \atfi@LINETO - 4.4893 10.5449 \atfi@LINETO - 8.5107 16.5313 \atfi@LINETO - 7.856 10.9199 \atfi@MOVETO - 6.978 10.9199 6.2661 10.1035 6.2661 9.0957 \atfi@CURVETO - 6.2661 8.0879 6.978 7.2715 7.856 7.2715 \atfi@CURVETO - 8.7344 7.2715 9.4463 8.0879 9.4463 9.0957 \atfi@CURVETO - 9.4463 10.1035 8.7344 10.9199 7.856 10.9199 \atfi@CURVETO - \atfi@CLOSEPATH - \atfi@FILLSTROKE{% - \atfi@color@inline{FILL}% - }{% - 0 \atfi@SETGRAYSTROKE - }% - 1 \atfi@SETLINEWIDTH - 12.3291 12.2656 \atfi@MOVETO - 21.1206 12.2656 \atfi@LINETO - \atfi@STROKE - 12.3291 9.1797 \atfi@MOVETO - 21.1206 9.1797 \atfi@LINETO - \atfi@STROKE - 12.3291 6.1875 \atfi@MOVETO - 21.1206 6.1875 \atfi@LINETO - \atfi@STROKE - % 0 \atfi@SETGRAYSTROKE % redundant? - 0.5 \atfi@SETLINEWIDTH - 0 9.0488 \atfi@MOVETO - 6.2661 9.0957 \atfi@LINETO - \atfi@STROKE - 1.4028 5.2148 \atfi@MOVETO - 1.4028 9.6094 \atfi@LINETO - 1.6831 10.6387 2.4316 10.6387 \atfi@CURVETOV - 3.6475 10.6387 3.5542 9.0488 \atfi@CURVETOY - \atfi@STROKE - \atfi@GRESTORE -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@acroTag} -% \begin{macrocode} -\def\atfi@acroTag{% - \raisebox{-1.6bp}{\parbox[b][17bp]{25bp}{% - \rule{0pt}{0pt}\atfi@literal{\atfi@acroTag@data}}% - }% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Reading the \xext{atfi} file} -% -% Commands used in \cs{jobname}\xext{atfi}: -% \begin{itemize} -% \item |attachfile@timezone{<timezone in PDF format>}| -% \item -%\begin{verbatim} -%\attachfile@file[ -% Size=<size>, -% CreationDate=<date>, % <date> local time without "D:" and timezone -% ModDateTZ=<date+TZ>, -% ModDate=<date>, -% CheckSum=<checksum> -%]{<filename as hex string>} -%\end{verbatim} -% \end{itemize} -% -% \begin{macro}{\attachfile@timezone} -% \begin{macrocode} -\def\attachfile@timezone#1{% - \ifx\\#1\\% - % no timezone information given - \else - \def\atfi@timezone{#1}% - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\attachfile@file} -% \begin{macrocode} -\newcommand*{\attachfile@file}[2][]{% - \EdefUnescapeHex\atfi@filename{#2}% - \ifx\atfi@filename\ltx@empty - \PackageError{attachfile2}{Empty file name}\@ehc - \else - \@namedef{atfi@file@\atfi@filename}{#1}% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\InputIfFileExists{\jobname.atfi}{}{}% -% \end{macrocode} -% -% \begin{macrocode} -\newif\ifatfi@checksum -\define@key{AtFi@file}{CheckSum}{% - \atfi@checksumtrue - \edef\atfi@params{\atfi@params/CheckSum<#1>}% -} -% \end{macrocode} -% \begin{macrocode} -\newif\ifatfi@creationdate -\define@key{AtFi@file}{CreationDateTZ}{% - \ifatfi@creationdate - \else - \atfi@creationdatetrue - \edef\atfi@params{% - \atfi@params - /CreationDate(#1)% - }% - \fi -} -% \end{macrocode} -% \begin{macrocode} -\define@key{AtFi@file}{CreationDate}{% - \ifatfi@creationdate - \else - \atfi@creationdatetrue - \edef\atfi@params{% - \atfi@params - /CreationDate(#1\atfi@timezone)% - }% - \fi -} -% \end{macrocode} -% \begin{macrocode} -\newif\ifatfi@moddate -\define@key{AtFi@file}{ModDateTZ}{% - \ifatfi@moddate - \else - \atfi@moddatetrue - \edef\atfi@params{% - \atfi@params - /ModDate(#1)% - }% - \fi -} -% \end{macrocode} -% \begin{macrocode} -\define@key{AtFi@file}{ModDate}{% - \ifatfi@moddate - \else - \atfi@moddatetrue - \edef\atfi@params{% - \atfi@params - /ModDate(D:#1\atfi@timezone)% - }% - \fi -} -% \end{macrocode} -% -% \begin{macro}{\atfi@pdftexdata} -% \begin{macrocode} -\let\atfi@temp\ltx@one -\ltx@IfUndefined{pdf@filesize}{% - \let\atfi@temp\ltx@zero -}{} -\ltx@IfUndefined{pdf@filemoddate}{% - \let\atfi@temp\ltx@zero -}{} -\ltx@IfUndefined{pdf@filemdfivesum}{% - \let\atfi@temp\ltx@zero -}{} -\ifcase\atfi@temp - \let\atfi@pdftexdata\ltx@gobble -\or - \def\atfi@pdftexdata#1{% - \edef\atfi@temp{\pdf@filesize{#1}}% - \ifx\atfi@temp\ltx@empty - \else - \setkeys{AtFi@file}{Size=\atfi@temp}% - \edef\atfi@temp{\pdf@filemoddate{#1}}% - \ifx\atfi@temp\ltx@empty - \else - \setkeys{AtFi@file}{ModDateTZ=\atfi@temp}% - \fi - \edef\atfi@temp{\pdf@filemdfivesum{#1}}% - \ifx\atfi@temp\ltx@empty - \else - \setkeys{AtFi@file}{CheckSum=\atfi@temp}% - \fi - \fi - }% -\fi -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Writing the \xext{atfi} file} -% -% Respect \cs{nofiles} and option \xoption{nofiles}. -% \cs{nofiles} has more weight than option \xoption{nofiles}. -% \begin{macrocode} -\if@filesw -\else - \atfi@nofilestrue -\fi -\ifatfi@nofiles - \PackageInfo{attachfile2}{% - File `\jobname.atfi' will not be written because of\MessageBreak - \string\nofiles\space or option `nofiles'% - }% -% \end{macrocode} -% \begin{macro}{\atfi@writefile} -% \begin{macrocode} - \let\atfi@writefile\ltx@gobble -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\else -% \end{macrocode} -% \begin{macro}{\atfi@stream} -% \begin{macrocode} - \newwrite\atfi@stream -% \end{macrocode} -% \end{macro} -% \begin{macrocode} - \immediate\openout\atfi@stream=\jobname.atfi\relax - \immediate\write\atfi@stream{% - \string\attachfile@timezone{\atfi@timezone}% - }% -% \end{macrocode} -% \begin{macro}{\atfi@writefile} -% \begin{macrocode} - \def\atfi@writefile#1{% - \begingroup - \EdefEscapeHex\atfi@temp{#1}% - \immediate\write\atfi@stream{% - \string\attachfile@file[% - \ltx@ifundefined{atfi@file@#1}{}{\@nameuse{atfi@file@#1}}% - ]{\atfi@temp}% - }% - \endgroup - }% -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\fi -\atfi@DisableOption{nofiles} -% \end{macrocode} -% -% \begin{macro}{\atfi@attachfile} -% \begin{macrocode} -\def\atfi@attachfile#1#2{% - \ltx@IfUndefined{atfi@fileobj@#2}{% - \atfi@writefile{#2}% - }{% - % don't need duplicates - }% - \atfi@setup{#1}% - \atfi@embedfile{#2}% - \atfi@set@appearance@icon - \atfi@flags@to@int - \atfi@insert@file@annot{#2}% - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Annotation appearance} -% -% \begin{macro}{\atfi@appearancewidth} -% \begin{macrocode} -\newlength{\atfi@appearancewidth} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@appearanceheight} -% \begin{macrocode} -\newlength{\atfi@appearanceheight} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@appearancedepth} -% \begin{macrocode} -\newlength{\atfi@appearancedepth} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@appearancebox} -% \begin{macrocode} -\newsavebox{\atfi@appearancebox} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\atfi@set@appearance@icon} -% \begin{macrocode} -\def\atfi@set@appearance@icon{% - \ltx@IfUndefined{atfi@appobj@\atfi@icon@icon}{% - \savebox{\atfi@appearancebox}{% - \@nameuse{atfi@acro\atfi@icon@icon}% - }% - \expandafter - \xdef\csname atfi@appwidth@\atfi@icon@icon\endcsname{% - \the\wd\atfi@appearancebox - }% - \expandafter - \xdef\csname atfi@appheight@\atfi@icon@icon\endcsname{% - \the\ht\atfi@appearancebox - }% - \expandafter - \xdef\csname atfi@appdepth@\atfi@icon@icon\endcsname{% - \the\dp\atfi@appearancebox - }% - \atfi@xform@icon - \global\expandafter\let - \csname atfi@appobj@\atfi@icon@icon\endcsname - \atfi@appearanceobj - }{% - }% - % optimization: \setlength dropped - \atfi@appearancewidth=% - \@nameuse{atfi@appwidth@\atfi@icon@icon}\relax - \atfi@appearanceheight=% - \@nameuse{atfi@appheight@\atfi@icon@icon}\relax - \atfi@appearancedepth=% - \@nameuse{atfi@appdepth@\atfi@icon@icon}\relax - \expandafter\let\expandafter\atfi@appearanceobj - \csname atfi@appobj@\atfi@icon@icon\endcsname -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\atfi@set@appearance} -% \begin{macrocode} -\def\atfi@set@appearance#1{% - \savebox{\atfi@appearancebox}{#1}% - \atfi@appearancewidth=\wd\atfi@appearancebox - \atfi@appearanceheight=\ht\atfi@appearancebox - \atfi@appearancedepth=\dp\atfi@appearancebox - \atfi@xform -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\newcounter{atfi@flags} -% \end{macrocode} -% \begin{macro}{\atfi@flags@to@int} -% \begin{macrocode} -\DeclareRobustCommand{\atfi@flags@to@int}{% - \setcounter{atfi@flags}{0}% - \ifatfi@print - \addtocounter{atfi@flags}{4}% - \fi% - \ifatfi@zoom - \else - \addtocounter{atfi@flags}{8}% - \fi% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\atfi@textattachfile} -% \begin{macrocode} -\def\atfi@textattachfile#1#2{% - \endgroup - \atfi@textattachfile@i{#1}{#2}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@textattachfile@i} -% \begin{macrocode} -\def\atfi@textattachfile@i#1#2#3{% - \ltx@IfUndefined{atfi@fileobj@#2}{% - \atfi@writefile{#2}% - }{% - % don't need duplicates - }% - \atfi@setup{#1}% - \atfi@embedfile{#2}% - \atfi@set@appearance{% - \leavevmode - \begingroup - \HyColor@UseColor\atfi@color@tex - #3\strut - \endgroup - }% - \atfi@flags@to@int - \atfi@insert@file@annot{#2}% - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\attachfile} -% \begin{macrocode} -\DeclareRobustCommand{\attachfile}[1][]{% - \begingroup - \let\do\@makeother - \dospecials - \catcode`\{=1\relax - \catcode`\}=2\relax - \atfi@attachfile{#1}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\textattachfile} -% \begin{macrocode} -\DeclareRobustCommand{\textattachfile}[1][]{% - \begingroup - \begingroup - \let\do\@makeother - \dospecials - \catcode`\{=1\relax - \catcode`\}=2\relax - \atfi@textattachfile{#1}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\noattachfile} -% \begin{macrocode} -\DeclareRobustCommand{\noattachfile}[1][]{% - \begingroup - \atfi@setup{#1}% - \atfi@set@appearance@icon - \ifatfi@print - \expandafter - \atfi@refxform\csname atfi@appobj@\atfi@icon@icon\endcsname - \else - \makebox[\atfi@appearancewidth]{}% - \fi - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%</package> -% \end{macrocode} -% -% \subsection{Drivers} -% -% \subsubsection{\pdfTeX} -% -% \begin{macrocode} -%<*pdftex> -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile{atfi-pdftex.def}% - [2019/07/24 v2.9 attachfile2 driver for pdfTeX (HO)]% -% \end{macrocode} -% -% \paragraph{Macros for graphics data} -% -% \begin{macro}{\atfi@literal} -% \begin{macrocode} -\let\atfi@literal\pdfliteral -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\def\atfi@GSAVE{q } -\def\atfi@GRESTORE{Q } -\def\atfi@SETLINEWIDTH{w } -\def\atfi@LINETO{l } -\def\atfi@MOVETO{m } -\def\atfi@STROKE{S } -\def\atfi@FILL{f } -% \atfi@FILLSTROKE{<fill color>}{<stroke color>} -\def\atfi@FILLSTROKE#1#2{#1#2B } -% \end{macrocode} -% color: uppercase are stroke colors, lowercase non-stroke (fill) colors -% PS, however, does not different between stroke and not-stroke colors -% \begin{macrocode} -\def\atfi@SETRGBCOLORSTROKE{RG } -\def\atfi@SETRGBCOLORFILL{rg } -\def\atfi@SETGRAYSTROKE{G } -\def\atfi@SETGRAYFILL{g } -\def\atfi@SETCMYKCOLORSTROKE{K } -\def\atfi@SETCMYKCOLORFILL{k } -\def\atfi@RECTFILL{re f } -\def\atfi@RECTSTROKEFILL#1#2#3{#1#2#3re B } -\def\atfi@SETMITERLIMIT{M } -\def\atfi@SETFLAT{i } -\def\atfi@SETLINECAP{J } -\def\atfi@CURVETO{c } -\def\atfi@CURVETOV{v } -\def\atfi@CURVETOY{y } -\def\atfi@CLOSEPATH{h } -\def\atfi@SETLINEJOIN{j } -% \end{macrocode} -% -% \paragraph{File embedding} -% -% \begin{macrocode} -\define@key{AtFi@file}{Size}{% - \edef\atfi@params{\atfi@params/Size #1}% -} -% \end{macrocode} -% \begin{macro}{\atfi@embedfile} -% \begin{macrocode} -\def\atfi@embedfile#1{% - \ltx@IfUndefined{atfi@fileobj@#1}{% - \begingroup - \let\atfi@params\ltx@empty - \expandafter\let\expandafter\atfi@temp - \csname atfi@file@#1\endcsname - \ifx\atfi@temp\ltx@empty - \let\atfi@temp\relax - \fi - \ifx\atfi@temp\relax - \atfi@pdftexdata{#1}% - \else - \edef\x{% - \noexpand\setkeys{AtFi@file}{\@nameuse{atfi@file@#1}}% - }% - \x - \fi - \ifx\atfi@params\ltx@empty - \else - \edef\atfi@params{/Params<<\atfi@params>>}% - \fi - \immediate\pdfobj stream attr {% - /Type/EmbeddedFile% - \atfi@mimetype - \atfi@params - } file {#1}% - \expandafter - \xdef\csname atfi@fileobj@#1\endcsname{\the\pdflastobj}% - \endgroup - }{% - % file already embedded - }% -} -% \end{macrocode} -% \end{macro} -% -% \paragraph{Annotation appearance} -% -% \begin{macro}{\atfi@xform} -% input: \cs{atfi@appearancebox}, output: \cs{atfi@appearanceobj} -% \begin{macrocode} -\def\atfi@xform{% - \immediate\pdfxform\atfi@appearancebox - \edef\atfi@appearanceobj{\the\pdflastxform}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@xform@icon} -% \begin{macrocode} -\let\atfi@xform@icon\atfi@xform -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\atfi@refxform} -% \begin{macrocode} -\def\atfi@refxform#1{% - \pdfrefxform#1\relax -} -% \end{macrocode} -% \end{macro} -% -% \paragraph{File attachment annotation} -% -% \begin{macro}{\atfi@insert@file@annot} -% \begin{macrocode} -\def\atfi@insert@file@annot#1{% - \rule{0pt}{0pt}% - \ifatfi@appearance - \def\atfi@appearance@dict{% - /AP<<% - /N \atfi@appearanceobj\space 0 R% - /R \atfi@appearanceobj\space 0 R% - /D \atfi@appearanceobj\space 0 R% - >>% - }% - \else - \let\atfi@appearance@dict\ltx@empty - \fi - \ltx@IfUndefined{atfi@fsobj@#1}{% - \begingroup - \hypersetup{unicode=false}% - \atfi@pdfstringdef\atfi@file{#1}% - \immediate\pdfobj{% - <<% - /Type/Filespec% - /F(\atfi@file)% - \ifx\atfi@ucfilespec\ltx@empty - \else - /UF(\atfi@ucfilespec)% - \fi - /EF<<% - /F \@nameuse{atfi@fileobj@#1} 0 R% - >>% - >>% - }% - \expandafter\xdef\csname atfi@fsobj@#1\endcsname{% - \the\pdflastobj - }% - \endgroup - }{% - }% - \pdfannot width \atfi@scale\atfi@appearancewidth - height \atfi@scale\atfi@appearanceheight - depth \atfi@scale\atfi@appearancedepth {% - /Subtype/FileAttachment% - \atfi@icon - \atfi@color@annot - \atfi@author - \atfi@date - \atfi@annotname - \atfi@description - \atfi@subject - \atfi@appearance@dict - /F \theatfi@flags - /FS \@nameuse{atfi@fsobj@#1} 0 R% - }% - \rule{0pt}{\atfi@appearanceheight}% - \rule[-\atfi@appearancedepth]{0pt}{\atfi@appearancedepth}% - \rule{\atfi@appearancewidth}{0pt}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%</pdftex> -% \end{macrocode} -% -% \subsection{luatex} -% \begin{macrocode} -%<*luatex> -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile{atfi-luatex.def}% - [2019/07/24 v2.9 attachfile2 driver for luaTeX (HO)]% -\protected\def\atfi@literal {\pdfextension literal} -\def\atfi@GSAVE{q } -\def\atfi@GRESTORE{Q } -\def\atfi@SETLINEWIDTH{w } -\def\atfi@LINETO{l } -\def\atfi@MOVETO{m } -\def\atfi@STROKE{S } -\def\atfi@FILL{f } -\def\atfi@FILLSTROKE#1#2{#1#2B } -\def\atfi@SETRGBCOLORSTROKE{RG } -\def\atfi@SETRGBCOLORFILL{rg } -\def\atfi@SETGRAYSTROKE{G } -\def\atfi@SETGRAYFILL{g } -\def\atfi@SETCMYKCOLORSTROKE{K } -\def\atfi@SETCMYKCOLORFILL{k } -\def\atfi@RECTFILL{re f } -\def\atfi@RECTSTROKEFILL#1#2#3{#1#2#3re B } -\def\atfi@SETMITERLIMIT{M } -\def\atfi@SETFLAT{i } -\def\atfi@SETLINECAP{J } -\def\atfi@CURVETO{c } -\def\atfi@CURVETOV{v } -\def\atfi@CURVETOY{y } -\def\atfi@CLOSEPATH{h } -\def\atfi@SETLINEJOIN{j } -\define@key{AtFi@file}{Size}{% - \edef\atfi@params{\atfi@params/Size #1}% -} -\def\atfi@embedfile#1{% - \ltx@IfUndefined{atfi@fileobj@#1}{% - \begingroup - \let\atfi@params\ltx@empty - \expandafter\let\expandafter\atfi@temp - \csname atfi@file@#1\endcsname - \ifx\atfi@temp\ltx@empty - \let\atfi@temp\relax - \fi - \ifx\atfi@temp\relax - \atfi@pdftexdata{#1}% - \else - \edef\x{% - \noexpand\setkeys{AtFi@file}{\@nameuse{atfi@file@#1}}% - }% - \x - \fi - \ifx\atfi@params\ltx@empty - \else - \edef\atfi@params{/Params<<\atfi@params>>}% - \fi - \immediate\pdfextension obj stream attr {% - /Type/EmbeddedFile% - \atfi@mimetype - \atfi@params - } file {#1}% - \expandafter - \xdef\csname atfi@fileobj@#1\endcsname{\the\numexpr\pdffeedback lastobj\relax}% - \endgroup - }{% - % file already embedded - }% -} -\def\atfi@xform{% - \immediate\saveboxresource\atfi@appearancebox - \edef\atfi@appearanceobj{\the\lastsavedboxresourceindex}% -} -\let\atfi@xform@icon\atfi@xform -\def\atfi@refxform#1{% - \useboxresource#1\relax -} -\def\atfi@insert@file@annot#1{% - \rule{0pt}{0pt}% - \ifatfi@appearance - \def\atfi@appearance@dict{% - /AP<<% - /N \atfi@appearanceobj\space 0 R% - /R \atfi@appearanceobj\space 0 R% - /D \atfi@appearanceobj\space 0 R% - >>% - }% - \else - \let\atfi@appearance@dict\ltx@empty - \fi - \ltx@IfUndefined{atfi@fsobj@#1}{% - \begingroup - \hypersetup{unicode=false}% - \atfi@pdfstringdef\atfi@file{#1}% - \immediate\pdfextension obj{% - <<% - /Type/Filespec% - /F(\atfi@file)% - \ifx\atfi@ucfilespec\ltx@empty - \else - /UF(\atfi@ucfilespec)% - \fi - /EF<<% - /F \@nameuse{atfi@fileobj@#1} 0 R% - >>% - >>% - }% - \expandafter\xdef\csname atfi@fsobj@#1\endcsname{% - \the\numexpr\pdffeedback lastobj\relax - }% - \endgroup - }{% - }% - \pdfextension annot width \atfi@scale\atfi@appearancewidth - height \atfi@scale\atfi@appearanceheight - depth \atfi@scale\atfi@appearancedepth {% - /Subtype/FileAttachment% - \atfi@icon - \atfi@color@annot - \atfi@author - \atfi@date - \atfi@annotname - \atfi@description - \atfi@subject - \atfi@appearance@dict - /F \theatfi@flags - /FS \@nameuse{atfi@fsobj@#1} 0 R% - }% - \rule{0pt}{\atfi@appearanceheight}% - \rule[-\atfi@appearancedepth]{0pt}{\atfi@appearancedepth}% - \rule{\atfi@appearancewidth}{0pt}% -} -%</luatex> -% \end{macrocode} -% -% \subsubsection{dvips} -% -% \begin{macrocode} -%<*dvips> -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile{atfi-dvips.def}% - [2019/07/24 v2.9 attachfile2 driver for dvips (HO)]% -% \end{macrocode} -% -% \paragraph{Macros for graphics data} -% -% \begin{macro}{\atfi@literal} -% \begin{macrocode} -\def\atfi@literal#1{% - \special{ps:atfi_dict begin{#1}atfi_?pdfmark end}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@header} -% \begin{macrocode} -\def\atfi@header#1{% - \special{! #1}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\atfi@header{% - userdict begin 20 dict dup /atfi_dict exch def end begin% - /atfi_?pdfmark systemdict % - dup/pdfmark known% - {% - /exec get def% - }{% - /pop get def% - } ifelse% - {% - % - % x y width height atfi_re -> - languagelevel 2 ge {% - /atfi_rectfill { rectfill } bind def% - /atfi_rectstroke { rectstroke } bind def% - }{% - /atfi_rect {% - /atfi_height exch def% - /atfi_width exch def% - /atfi_x exch def% - /atfi_y exch def % - newpath % - atfi_x atfi_y moveto % - atfi_x atfi_width add atfi_y lineto % - atfi_x atfi_width add atfi_y atfi_height add lineto % - atfi_x atfi_y atfi_height add lineto % - closepath% - } bind def% - /atfi_rectfill {% - atfi_rect fill% - } bind def% - /atfi_rectstroke {% - atfi_rect stroke% - } bind def% - } ifelse% - /atfi_curveto_v {% - currentpoint 6 2 roll curveto% - } bind def% - /atfi_curveto_y {% - 2 copy curveto% - } bind def% - % - % help macro for atfi_convert_date - /atfi_two {% - dup 10 lt% - {% - 1 string cvs % - exch 1 add exch% - }{% - 2 string cvs% - } ifelse % - putinterval% - } bind def% - % - % <seconds since 1970-01-01> atfi_convert_date -> (D:...Z) - /atfi_convert_date {% - dup% - /atfi_days exch 3600 idiv 24 idiv def% - % calc date part - /atfi_year 1970 def% - {% - atfi_year 400 mod 0 eq % - atfi_year 100 mod 0 ne % - atfi_year 4 mod 0 eq % - and or% - {366} {365} ifelse % - dup atfi_days lt% - {% - atfi_days exch sub /atfi_days exch def% - /atfi_year atfi_year 1 add def% - }{% - exit% - } ifelse% - } loop% - /atfi_month 1 def% - /atfi_days atfi_days 1 add def % - 31 atfi_days lt% - {% - atfi_days 31 sub /atfi_days exch def% - /atfi_month atfi_month 1 add def % - 366 eq {29} {28} ifelse dup atfi_days lt% - {% - atfi_days exch sub /atfi_days exch def% - /atfi_month atfi_month 1 add def % - 31 atfi_days lt% - {% - atfi_days 31 sub /atfi_days exch def% - /atfi_month atfi_month 1 add def % - 30 atfi_days lt% - {% - atfi_days 30 sub /atfi_days exch def% - /atfi_month atfi_month 1 add def % - 31 atfi_days lt% - {% - atfi_days 31 sub /atfi_days exch def% - /atfi_month atfi_month 1 add def % - 30 atfi_days lt% - {% - atfi_days 30 sub /atfi_days exch def% - /atfi_month atfi_month 1 add def % - 31 atfi_days lt% - {% - atfi_days 31 sub /atfi_days exch def% - /atfi_month atfi_month 1 add def % - 31 atfi_days lt% - {% - atfi_days 31 sub /atfi_days exch def% - /atfi_month atfi_month 1 add def % - 30 atfi_days lt% - {% - atfi_days 30 sub /atfi_days exch def% - /atfi_month atfi_month 1 add def % - 31 atfi_days lt% - {% - atfi_days 31 sub /atfi_days exch def% - /atfi_month atfi_month 1 add def % - 30 atfi_days lt% - {% - atfi_days 30 sub /atfi_days exch def% - /atfi_month atfi_month 1 add def % - 31 atfi_days lt% - {% - atfi_days 31 sub /atfi_days exch def% - /atfi_month atfi_month 1 add def% - } if% - } if% - } if% - } if% - } if% - } if% - } if% - } if% - } if% - } if% - } { pop } ifelse% - }{ pop } ifelse % - % calc time part - 3600 24 mul mod % - dup 3600 idiv dup /atfi_hour exch def % - 3600 mul sub % - dup 60 idiv dup /atfi_min exch def % - 60 mul sub % - /atfi_sec exch def% - (D:19700101000000Z)% - dup 2 atfi_year 4 string cvs putinterval % - dup 6 atfi_month atfi_two % - dup 8 atfi_days atfi_two % - dup 10 atfi_hour atfi_two % - dup 12 atfi_min atfi_two % - dup 14 atfi_sec atfi_two% - } bind def % - % - % <filename> atfi_calc_checksum -> /CheckSum <checksum> - % or returns nothing, if MD5Encode is not given - false % - languagelevel 2 ge {% - (MD5Encode)% - { pop true or }% - (MD5Encode) length string% - /Filter % - resourceforall% - } if% - {% - /atfi_calc_checksum {% - /atfi_checksum 16 string def% - /atfi_file exch (r) file def% - /atfi_md5sum atfi_checksum /MD5Encode filter def % - % not too efficient to read and write byte by byte, - % using a buffer is probably faster - atfi_size {% - atfi_file read% - {% - atfi_md5sum exch write% - } if% - } repeat % - atfi_md5sum closefile % - atfi_file closefile% - /CheckSum atfi_checksum% - } bind def% - }{% - /atfi_calc_checksum { pop } bind def% - } ifelse% - % - /atfi_pttobp { 72.27 div 72 mul } bind def% - /atfi_pdftodvipsx { 72.27 div Resolution mul } bind def% - /atfi_pdftodvipsy { 72.27 div VResolution mul } bind def% - % - } atfi_?pdfmark % - end% -} -% \end{macrocode} -% \begin{macrocode} -\def\atfi@GSAVE{gsave } -\def\atfi@GRESTORE{grestore } -\def\atfi@SETLINEWIDTH{setlinewidth } -\def\atfi@LINETO{lineto } -\def\atfi@MOVETO{moveto } -\def\atfi@STROKE{stroke } -\def\atfi@FILL{fill } -\def\atfi@FILLSTROKE#1#2{gsave #1 fill grestore #2 stroke } -\def\atfi@SETRGBCOLORSTROKE{setrgbcolor } -\def\atfi@SETRGBCOLORFILL{setrgbcolor } -\def\atfi@SETGRAYSTROKE{setgray } -\def\atfi@SETGRAYFILL{setgray } -\def\atfi@SETCMYKCOLORSTROKE{setcmykcolor } -\def\atfi@SETCMYKCOLORFILL{setcmykcolor } -\def\atfi@RECTFILL{atfi_rectfill } -\def\atfi@RECTSTROKEFILL#1#2#3{% - #3% - #1% - gsave atfi_rectfill grestore % - #2% - #3% - atfi_rectstroke % - #1% -} -\def\atfi@SETMITERLIMIT{setmiterlimit } -\def\atfi@SETFLAT{setflat } -\def\atfi@SETLINECAP{setlinecap } -\def\atfi@CURVETO{curveto } -\def\atfi@CURVETOV{atfi_curveto_v } -\def\atfi@CURVETOY{atfi_curveto_y } -\def\atfi@CLOSEPATH{closepath } -\def\atfi@SETLINEJOIN{setlinejoin } -% \end{macrocode} -% -% \begin{macrocode} -\newcounter{atfi@obj} -\renewcommand*{\theatfi@obj}{% - {atfi_obj_\number\c@atfi@obj}% -} -% \end{macrocode} -% -% \paragraph{File embedding} -% -% Most values for Params dictionary found in the \xext{atfi} file -% have priority: -% \begin{itemize} -% \item Recalculation (md5sum, \dots) is avoided. -% \item An external script has more possibilities than programming -% at PostScript level (operating system, getting the date and -% time values of the file with correct interpretation. -% \item Exception: status is called to test file existence, thus -% we get the value of size for free. -% \end{itemize} -% \begin{macrocode} -\define@key{AtFi@file}{Size}{} -% \end{macrocode} -% \begin{macro}{\atfi@embedfile} -% \begin{macrocode} -\def\atfi@embedfile#1{% - \ltx@IfUndefined{atfi@fileobj@#1}{% - \atfi@pdfstringdef\atfi@psfilename{#1}% - \stepcounter{atfi@obj}% - \expandafter\xdef\csname atfi@fileobj@#1\endcsname{\theatfi@obj}% - \begingroup - \let\atfi@params\ltx@empty - \expandafter\let\expandafter\atfi@temp - \csname atfi@file@#1\endcsname - \ifx\atfi@temp\ltx@empty - \let\atfi@temp\relax - \fi - \ifx\atfi@temp\relax - \atfi@pdftexdata{#1}% - \else - \edef\x{% - \noexpand\setkeys{AtFi@file}{\@nameuse{atfi@file@#1}}% - }% - \x - \fi - \atfi@literal{% - /atfi_filename(\atfi@psfilename)def % - atfi_filename status% - {% -% \end{macrocode} -% ok: file found\\ -% save parameters of status command -% \begin{macrocode} - /atfi_created exch def% - /atfi_referenced exch def% - /atfi_size exch def % - pop % -% \end{macrocode} -%\begin{verbatim} -%drop parameter "pages" (storage space), never needed -%ghostscript: -% created: stat.st_ctime -% referenced: stat.st_mtime -% stat.st_ctime: interpretion depends on operating system: -% * unix: inode change time (not interesting) -% * win32: probably creation time -% --> /CreationDate -% stat.st_mtime: modification time --> /ModDate -% time values are seconds since 1970-01-01, GMT -%TODO: ghostscript offers "getenv" for getting the value -% of an environment variable. That could be used to -% to detect windows and settingthe /CreationDate entry. -%TODO: how are these values interpreted by other distiller -% programs? -%\end{verbatim} -% \begin{macrocode} - [% - /_objdef \theatfi@obj - /type/stream% - /OBJ pdfmark% - [% - \theatfi@obj - <<% - /Type/EmbeddedFile% - \atfi@mimetype - /Params% - <<% - \atfi@params - % - /Size atfi_size% - % - /product where% - {% - pop % -% \end{macrocode} -% check for ghostscript -% \begin{macrocode} - product (Ghostscript) search% - {% - pop pop pop % -% \end{macrocode} -% ghostscript is running -% \begin{macrocode} - \ifatfi@creationdate - \else - false % TODO: test for windows - {% - /CreationDate atfi_created atfi_convert_date% - } if% - \fi - \ifatfi@moddate - \else - /ModDate atfi_referenced atfi_convert_date% - \fi - } if% -% \end{macrocode} -% look for MD5Encode filter and calculate CheckSum -% \begin{macrocode} - } if % - \ifatfi@checksum - \else - atfi_filename atfi_calc_checksum% - \fi - >>% - >>% - /PUT pdfmark% - [% - \theatfi@obj - atfi_filename (r) file% - /PUT pdfmark% - [% - \theatfi@obj - /CLOSE pdfmark% - }{% -% \end{macrocode} -% error: file not found\\ -% currently nothing is done -% \begin{macrocode} - } ifelse% - }% - \endgroup - }{% -% \end{macrocode} -% file already embedded -% \begin{macrocode} - }% -} -% \end{macrocode} -% \end{macro} -% -% -% \paragraph{Annotation appearance} -% -% output: \cs{atfi@appearanceobj}\\ -% input: \cs{atfi@appearancebox}, \cs{atfi@icon@icon} -% \begin{macro}{atfi@xfrom@icon} -% \begin{macrocode} -\def\atfi@xform@icon{% - \stepcounter{atfi@obj}% - \edef\atfi@appearanceobj{\theatfi@obj}% - \atfi@literal{% - [% - /_objdef \atfi@appearanceobj - /BBox[% - 0 % - 0 % - \strip@pt\wd\atfi@appearancebox\space atfi_pttobp % - \strip@pt\dimexpr\dp\atfi@appearancebox - +\ht\atfi@appearancebox\relax\space atfi_pttobp% - ]% - /BP pdfmark % - \csname atfi@acro\atfi@icon@icon @data\endcsname - [% - /EP pdfmark% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@xform} -% output: \cs{atfi@appearanceobj}, -% input: \cs{atfi@appearancebox} -% \begin{macrocode} -\def\atfi@xform{% - \stepcounter{atfi@obj}% - \edef\atfi@appearanceobj{\theatfi@obj}% - \begingroup - \setbox\ltx@zero=\hbox{% - \atfi@literal{% - [% - /_objdef \atfi@appearanceobj - /BBox[% - currentpoint % - \strip@pt\dp\atfi@appearancebox\space sub % - currentpoint % - exch \strip@pt\wd\atfi@appearancebox\space add % - exch \strip@pt\ht\atfi@appearancebox\space add% - ]% - /BP pdfmark % - gsave % - currentpoint % - 2 copy translate % - 72.27 Resolution div 72.27 VResolution div neg scale % - exch neg exch neg translate% - }% - \usebox{\atfi@appearancebox}% - \atfi@literal{% - grestore% - [% - /EP pdfmark% - }% - }% - % do not allocate any space for xobject definition - \dp\ltx@zero=\z@ - \ht\ltx@zero=\z@ - \wd\ltx@zero=\z@ - \mbox{\usebox\ltx@zero}% - \endgroup -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@refxform} -% \begin{macrocode} -\def\atfi@refxform#1{% - \raisebox{-\atfi@appearancedepth}{% - \atfi@literal{% - gsave % - currentpoint translate % - Resolution 72 div VResolution neg 72 div scale% - [#1 /SP pdfmark % hash-ok - grestore% - }% - \makebox[\atfi@appearancewidth]{}% - }% - \rule{0pt}{\atfi@appearanceheight}% -} -% \end{macrocode} -% \end{macro} -% -% \paragraph{File attachment annotation} -% -% \begin{macro}{\atfi@insert@file@annot} -% \begin{macrocode} -\def\atfi@insert@file@annot#1{% - \rule{0pt}{0pt}% - \ifatfi@appearance - \def\atfi@appearance@dict{% - /AP<<% - /N \atfi@appearanceobj - /R \atfi@appearanceobj - /D \atfi@appearanceobj - >>% - }% - \else - \let\atfi@appearance@dict\ltx@empty - \fi - \ltx@IfUndefined{atfi@fsobj@#1}{% - \stepcounter{atfi@obj}% - \expandafter - \xdef\csname atfi@fsobj@#1\endcsname{\theatfi@obj}% - \begingroup - \hypersetup{unicode=false}% - \atfi@pdfstringdef\atfi@file{#1}% - \atfi@literal{% - [% - /_objdef \theatfi@obj - /type/dict% - /OBJ pdfmark% - [% - \theatfi@obj - <<% - /Type/Filespec% - /F(\atfi@file)% - \ifx\atfi@ucfilespec\ltx@empty - \else - /UF(\atfi@ucfilespec)% - \fi - /EF<<% - /F \csname atfi@fileobj@#1\endcsname - >>% - >>% - /PUT pdfmark% - }% - \endgroup - }{% - }% - \atfi@literal{% - [% - /Subtype/FileAttachment% - \atfi@icon - \atfi@color@annot - \atfi@author - \atfi@date - \atfi@annotname - \atfi@description - \atfi@subject - \atfi@appearance@dict - /F \theatfi@flags - /FS \csname atfi@fsobj@#1\endcsname - /Rect[% - currentpoint % - \strip@pt\dimexpr\atfi@scale\atfi@appearancedepth\relax - \space atfi_pdftodvipsy add % - currentpoint % - exch % - \strip@pt\dimexpr\atfi@scale\atfi@appearancewidth\relax - \space atfi_pdftodvipsx add % - exch % - \strip@pt\dimexpr\atfi@scale\atfi@appearanceheight\relax - \space atfi_pdftodvipsy sub % - ]% - /ANN pdfmark% - }% - \rule{0pt}{\atfi@appearanceheight}% - \rule[-\atfi@appearancedepth]{0pt}{\atfi@appearancedepth}% - \rule{\atfi@appearancewidth}{0pt}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%</dvips> -% \end{macrocode} -% -% \subsubsection{dvipdfmx} -% -% \begin{macrocode} -%<*dvipdfmx> -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile{atfi-dvipdfmx.def}% - [2019/07/24 v2.9 attachfile2 driver for dvipdfmx/XeTeX (HO)]% -% \end{macrocode} -% -% \paragraph{Macros for graphics data} -% -% \begin{macro}{\atfi@special} -% \begin{macrocode} -\def\atfi@special#1{% - \special{pdf:#1}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@literal} -% \begin{macrocode} -\def\atfi@literal#1{% - \atfi@special{content #1}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\def\atfi@GSAVE{q } -\def\atfi@GRESTORE{Q } -\def\atfi@SETLINEWIDTH{w } -\def\atfi@LINETO{l } -\def\atfi@MOVETO{m } -\def\atfi@STROKE{S } -\def\atfi@FILL{f } -\def\atfi@FILLSTROKE#1#2{#1#2B } -\def\atfi@SETRGBCOLORSTROKE{RG } -\def\atfi@SETRGBCOLORFILL{rg } -\def\atfi@SETGRAYSTROKE{G } -\def\atfi@SETGRAYFILL{g } -\def\atfi@SETCMYKCOLORSTROKE{K } -\def\atfi@SETCMYKCOLORFILL{k } -\def\atfi@RECTFILL{re f } -\def\atfi@RECTSTROKEFILL#1#2#3{#1#2#3re B } -\def\atfi@SETMITERLIMIT{M } -\def\atfi@SETFLAT{i } -\def\atfi@SETLINECAP{J } -\def\atfi@CURVETO{c } -\def\atfi@CURVETOV{v } -\def\atfi@CURVETOY{y } -\def\atfi@CLOSEPATH{h } -\def\atfi@SETLINEJOIN{j } -% \end{macrocode} -% -% \begin{macrocode} -\newcounter{atfi@obj} -\renewcommand*{\theatfi@obj}{% - @atfi_obj_\number\c@atfi@obj -} -% \end{macrocode} -% -% \paragraph{File embedding} -% -% \begin{macrocode} -\define@key{AtFi@file}{Size}{% - \edef\atfi@params{\atfi@params/Size #1}% -} -% \end{macrocode} -% \begin{macro}{\atfi@embedfile} -% \begin{macrocode} -\def\atfi@embedfile#1{% - \ltx@IfUndefined{atfi@fileobj@#1}{% - \stepcounter{atfi@obj}% - \begingroup - \let\atfi@params\ltx@empty - \expandafter\let\expandafter\atfi@temp - \csname atfi@file@#1\endcsname - \ifx\atfi@temp\ltx@empty - \let\atfi@temp\relax - \fi - \ifx\atfi@temp\relax - \atfi@pdftexdata{#1}% - \else - \edef\x{% - \noexpand\setkeys{AtFi@file}{\@nameuse{atfi@file@#1}}% - }% - \x - \fi - \ifx\atfi@params\ltx@empty - \else - \edef\atfi@params{/Params<<\atfi@params>>}% - \fi - \edef\atfi@FILE{#1}% - \filename@parse\atfi@FILE - \ifx\filename@area\ltx@empty - \edef\atfi@FILE{./\atfi@FILE}% - \fi - \EdefEscapeString\atfi@FILE{\atfi@FILE}% - \atfi@special{fstream % - \theatfi@obj - (\atfi@FILE)% - <<% - /Type/EmbeddedFile% - \atfi@mimetype - \atfi@params - >>% - }% - \atfi@special{close \theatfi@obj}% - \expandafter - \xdef\csname atfi@fileobj@#1\endcsname{\theatfi@obj}% - \endgroup - }{% - % file already embedded - }% -} -% \end{macrocode} -% \end{macro} -% -% \paragraph{Annotation appearance} -% -% \begin{macro}{\atfi@xform} -% input: \cs{atfi@appearancebox}, output: \cs{atfi@appearanceobj} -% \begin{macrocode} -\def\atfi@xform{% - \stepcounter{atfi@obj}% - \smash{% - \rlap{% - \atfi@special{bxobj \theatfi@obj\space - width \the\wd\atfi@appearancebox\space - height \the\ht\atfi@appearancebox\space - depth \the\dp\atfi@appearancebox - }% - \usebox\atfi@appearancebox - \atfi@special{exobj}% - }% - }% - \edef\atfi@appearanceobj{\theatfi@obj}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\atfi@xform@icon} -% \begin{macrocode} -\let\atfi@xform@icon\atfi@xform -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\atfi@refxform} -% \begin{macrocode} -\def\atfi@refxform#1{% - \leavevmode - \atfi@special{uxobj #1}% -} -% \end{macrocode} -% \end{macro} -% -% \paragraph{File attachment annotation} -% -% \begin{macro}{\atfi@insert@file@annot} -% \begin{macrocode} -\def\atfi@insert@file@annot#1{% - \rule{0pt}{0pt}% - \ifatfi@appearance - \def\atfi@appearance@dict{% - /AP<<% - /N \atfi@appearanceobj - /R \atfi@appearanceobj - /D \atfi@appearanceobj - >>% - }% - \else - \let\atfi@appearance@dict\ltx@empty - \fi - \ltx@IfUndefined{atfi@fsobj@#1}{% - \begingroup - \ifxetex - \let\atfi@temp\Hy@Warning - \let\Hy@Warning\ltx@gobble - \fi - \hypersetup{unicode=false}% - \ifxetex - \let\Hy@Warning\atfi@temp - \fi - \atfi@pdfstringdef\atfi@file{#1}% - \stepcounter{atfi@obj}% - \atfi@special{obj \theatfi@obj <<% - /Type/Filespec% - /F(\atfi@file)% - \ifx\atfi@ucfilespec\ltx@empty - \else - /UF(\atfi@ucfilespec)% - \fi - /EF<<% - /F \@nameuse{atfi@fileobj@#1}% - >>% - >>% - }% - \expandafter\xdef\csname atfi@fsobj@#1\endcsname{% - \theatfi@obj - }% - \endgroup - }{% - }% - \begingroup - \dimen@=\atfi@scale\atfi@appearancewidth - \edef\atfi@rule{width \the\dimen@}% - \dimen@=\atfi@scale\atfi@appearanceheight - \edef\atfi@rule{\atfi@rule\space height \the\dimen@}% - \dimen@=\atfi@scale\atfi@appearancedepth - \edef\atfi@rule{\atfi@rule\space depth \the\dimen@}% - \atfi@special{ann \atfi@rule - <<% - /Subtype/FileAttachment% - \atfi@icon - \atfi@color@annot - \atfi@author - \atfi@date - \atfi@annotname - \atfi@description - \atfi@subject - \atfi@appearance@dict - /F \theatfi@flags - /FS \@nameuse{atfi@fsobj@#1}% - >>% - }% - \endgroup - \rule{0pt}{\atfi@appearanceheight}% - \rule[-\atfi@appearancedepth]{0pt}{\atfi@appearancedepth}% - \rule{\atfi@appearancewidth}{0pt}% -} -% \end{macrocode} -% \end{macro} -% -% -% \begin{macrocode} -%</dvipdfmx> -% \end{macrocode} -% -% \subsection{Perl script \xfile{pdfatfi.pl}} -% -% \begin{macrocode} -%<*pdfatfi> -% \end{macrocode} -% \begingroup\small -% \SpecialEscapechar\| -% \begin{macrocode} -#!/usr/bin/env perl -use strict; -$^W=1; # turn warning on -# -# pdfatfi.pl -# -# Copyright (C) 2005-2010, 2012 Heiko Oberdiek. -# -# This work may be distributed and/or modified under the -# conditions of the LaTeX Project Public License, either -# version 1.3c of this license or (at your option) any later -# version. This version of this license is in -# https://www.latex-project.org/lppl/lppl-1-3c.txt -# and the latest version of this license is in -# https://www.latex-project.org/lppl.txt -# and version 1.3 or later is part of all distributions of -# LaTeX version 2005/12/01 or later. -# -# This work has the LPPL maintenance status "maintained". -# -# The Current Maintainers of this work are -Heiko Oberdiek and the Oberdiek Package Support Group -https://github.com/ho-tex/oberdiek/issues - -# -# See file "attachfile2.pdf" for a list of files that belong to -# this project. -# -# This file "pdfatfi.pl" may be renamed to "pdfatfi" -# for installation purposes. -# -my $prj = 'pdfatfi'; -my $file = "$prj.pl"; -my $program = uc($&) if $file =~ /^\w+/; -my $version = "2.9"; -my $date = "2019/07/24"; -my $author = "Heiko Oberdiek"; -my $copyright = "Copyright (c) 2005-2010, 2012 by $author."; -# -# History: -# 2005/05/21 v1.0: First release. -# 2006/08/16 v2.2: Included in DTX file of attachfile2.dtx. -# 2010/09/27 v2.6: Keys ModDateTZ and CreationDateTZ added. -# 2016/05/16 v2.8: Option --version added. -# 2019/07/24 v2.9: adapted version to attachfile2 version. -# - -use POSIX qw(strftime); # %z is used (GNU) -use Digest::MD5; - -### program identification -my $title = "$program $version, $date - $copyright\n"; - -### error strings -my $Error = "!!! Error:"; # error prefix - -### variables -my $atfifile; - -### option variables -my @bool = ("false", "true"); -$::opt_help = 0; -$::opt_quiet = 0; -$::opt_debug = 0; -$::opt_verbose = 0; -$::opt_version = 0; - -my $usage = <<"END_OF_USAGE"; -${title}Syntax: \L$program\E [options] <file[.atfi]> -Function: Help program for LaTeX package "attachfile2". -Options: (defaults:) - --help print usage - --version print version number - --(no)quiet suppress messages ($bool[$::opt_quiet]) - --(no)verbose verbose printing ($bool[$::opt_verbose]) - --(no)debug debug informations ($bool[$::opt_debug]) -END_OF_USAGE - -### process options -my @OrgArgv = @ARGV; -use Getopt::Long; -GetOptions( - "help!", - "version!", - "quiet!", - "debug!", - "verbose!", -) or die $usage; -!$::opt_help or die $usage; -if ($::opt_version) { - print "$prj $date v$version\n"; - exit(0); -} -@ARGV == 1 or die "$usage$Error Missing jobname!\n"; - -$::opt_quiet = 0 if $::opt_verbose; - -print $title unless $::opt_quiet; - -### get jobname -$atfifile = $ARGV[0]; -if (!-f $atfifile && -f "$atfifile.atfi") { - $atfifile .= ".atfi"; -} --f $atfifile or die "$Error File `$atfifile' not found!\n"; - -print "* job file = $atfifile\n" if $::opt_verbose; - -if ($::opt_debug) { - print <<"END_DEB"; -* OSNAME: $^O -* PERL_VERSION: $] -* ARGV: @OrgArgv -END_DEB -} - -my $tmpfile = $atfifile . ".tmp"; - -my $timezone = strftime "%z", localtime; - -sub gettz ($) { - my $time = shift; - my $tz = strftime "%z", localtime($time); - return '' unless $tz; - return 'Z' if $tz eq '+0000'; - $tz =~ s/^([+\-]\d\d)(\d\d)$/$1'$2'/; - return $tz; -} - -open(IN, $atfifile) or die "$Error Cannot open `$atfifile'!\n"; -open(OUT, ">$tmpfile") or die "$Error Cannot write `$tmpfile'!\n"; - -while(<IN>) { - # timezone - if (s/^(\\attachfile\@timezone\{).*(\})$/$1$timezone$2/) { - print "* timezone = $timezone\n" if $::opt_verbose; - } - - # file entry - if (/^\\attachfile\@file\[[^\]]*\]\{(.*)\}$/) { - my $hexfile = $1; - my $file = pack('H*', $hexfile); - my @s = stat($file); - if (@s == 0) { - print "!!! Warning: File `$file' not found!\n"; - } - else { - my $size = @s[7]; - my $mtime = @s[9]; - my $ctime = @s[10]; # inode change time - - my ($sec, $min, $hour, $mday, $mon, $year) = - localtime($mtime); - my $moddate = sprintf("%04d%02d%02d%02d%02d%02d", - $year + 1900, $mon + 1, $mday, - $hour, $min, $sec); - my $moddatetz = 'D:' . $moddate . gettz($mtime); - - # Manual page "perlport" says that "ctime" is creation - # time instead of inode change time for "Win32" and - # "Mac OS", but it is unsupported for "Mac OS X". - my $creationdate = ""; - my $creationdatetz = ""; - if ($^O eq 'MSWin32') { # cygwin? - ($sec, $min, $hour, $mday, $mon, $year) = - localtime($ctime); - $creationdate = sprintf("%04d%02d%02d%02d%02d%02d", - $year + 1900, $mon + 1, $mday, - $hour, $min, $sec); - $creationdatetz = - 'D:' . $creationdate . gettz($ctime); - } - - # md5 checksum - my $checksum = ""; - my $ctx = Digest::MD5->new; - if (open(FILE, $file)) { - $ctx->addfile(*FILE); - $checksum = $ctx->hexdigest; - close(FILE); - } - else { - print "!!! Warning: File `$file' cannot be read," - . " dropping checksum!\n"; - } - - $_ = "\\attachfile\@file[" - . "ModDateTZ=$moddatetz" - . ",Size=$size" - . ($checksum ? ",CheckSum=$checksum" : "") - . ($creationdatetz ? - ",CreationDateTZ=$creationdatetz" : - ($creationdate ? - ",CreationDate=$creationdate" : "")) - . "]{$hexfile}\n"; - if ($::opt_verbose) { - print "* file entry = $file\n"; - print " size = $size\n"; - print " moddate = $moddate\n"; - print " creationdate = $creationdate\n" - if $creationdate; - print " checksum = $checksum\n" if $checksum; - } - } - } - - print OUT $_; -} - -close(IN); -close(OUT); - -unlink($atfifile) or die "$Error Cannot delete old `$atfifile'!\n"; -rename $tmpfile, $atfifile - or die "$Error Cannot move `$tmpfile' to `$atfifile'!\n"; - -print "*** ready. ***\n" unless $::opt_quiet; - -__END__ -% \end{macrocode} -% \endgroup -% \begin{macrocode} -%</pdfatfi> -% \end{macrocode} -% -% -% \section{Installation} -% -% \subsection{Download} -% -% \paragraph{Package.} This package is available on -% CTAN\footnote{\CTANpkg{attachfile2}}: -% \begin{description} -% \item[\CTAN{macros/latex/contrib/oberdiek/attachfile2.dtx}] The source file. -% \item[\CTAN{macros/latex/contrib/oberdiek/attachfile2.pdf}] Documentation. -% \end{description} -% -% -% \paragraph{Bundle.} All the packages of the bundle `oberdiek' -% are also available in a TDS compliant ZIP archive. There -% the packages are already unpacked and the documentation files -% are generated. The files and directories obey the TDS standard. -% \begin{description} -% \item[\CTANinstall{install/macros/latex/contrib/oberdiek.tds.zip}] -% \end{description} -% \emph{TDS} refers to the standard ``A Directory Structure -% for \TeX\ Files'' (\CTAN{tds/tds.pdf}). Directories -% with \xfile{texmf} in their name are usually organized this way. -% -% \subsection{Bundle installation} -% -% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the -% TDS tree (also known as \xfile{texmf} tree) of your choice. -% Example (linux): -% \begin{quote} -% |unzip oberdiek.tds.zip -d ~/texmf| -% \end{quote} -% -% \paragraph{Script installation.} -% Check the directory \xfile{TDS:scripts/oberdiek/} for -% scripts that need further installation steps. -% Package \xpackage{attachfile2} comes with the Perl script -% \xfile{pdfatfi.pl} that should be installed in such a way -% that it can be called as \texttt{pdfatfi}. -% Example (linux): -% \begin{quote} -% |chmod +x scripts/oberdiek/pdfatfi.pl|\\ -% |cp scripts/oberdiek/pdfatfi.pl /usr/local/bin/| -% \end{quote} -% -% \subsection{Package installation} -% -% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting -% \docstrip\ archive. The files are extracted by running the -% \xfile{.dtx} through \plainTeX: -% \begin{quote} -% \verb|tex attachfile2.dtx| -% \end{quote} -% -% \paragraph{TDS.} Now the different files must be moved into -% the different directories in your installation TDS tree -% (also known as \xfile{texmf} tree): -% \begin{quote} -% \def\t{^^A -% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} -% attachfile2.sty & tex/latex/oberdiek/attachfile2.sty\\ -% atfi-dvips.def & tex/latex/oberdiek/atfi-dvips.def\\ -% atfi-pdftex.def & tex/latex/oberdiek/atfi-pdftex.def\\ -% atfi-dvipdfmx.def & tex/latex/oberdiek/atfi-dvipdfmx.def\\ -% pdfatfi.pl & scripts/oberdiek/pdfatfi.pl\\ -% attachfile2.pdf & doc/latex/oberdiek/attachfile2.pdf\\ -% attachfile2.dtx & source/latex/oberdiek/attachfile2.dtx\\ -% \end{tabular}^^A -% }^^A -% \sbox0{\t}^^A -% \ifdim\wd0>\linewidth -% \begingroup -% \advance\linewidth by\leftmargin -% \advance\linewidth by\rightmargin -% \edef\x{\endgroup -% \def\noexpand\lw{\the\linewidth}^^A -% }\x -% \def\lwbox{^^A -% \leavevmode -% \hbox to \linewidth{^^A -% \kern-\leftmargin\relax -% \hss -% \usebox0 -% \hss -% \kern-\rightmargin\relax -% }^^A -% }^^A -% \ifdim\wd0>\lw -% \sbox0{\small\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\footnotesize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\scriptsize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\tiny\t}^^A -% \ifdim\wd0>\linewidth -% \lwbox -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \end{quote} -% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's -% TDS installing feature, then some files can already be in the right -% place, see the documentation of \docstrip. -% -% \subsection{Refresh file name databases} -% -% If your \TeX~distribution -% (\teTeX, \mikTeX, \dots) relies on file name databases, you must refresh -% these. For example, \teTeX\ users run \verb|texhash| or -% \verb|mktexlsr|. -% -% \subsection{Script installation} -% This package comes with a Perl script \xfile{pdfatfi.pl}. -% Install it somewhere so that it is executed, when it is called -% as \verb|pdfatfi| on the command line. Example for -% installing it under Linux: -% \begin{quote} -%\begin{verbatim} -%cp pdfatfi.pl /usr/local/bin/pdfatfi -%chmod +x /usr/local/bin/pdfatfi -%\end{verbatim} -% \end{quote} -% -% -% \subsection{Some details for the interested} -% -% \paragraph{Unpacking with \LaTeX.} -% The \xfile{.dtx} chooses its action depending on the format: -% \begin{description} -% \item[\plainTeX:] Run \docstrip\ and extract the files. -% \item[\LaTeX:] Generate the documentation. -% \end{description} -% If you insist on using \LaTeX\ for \docstrip\ (really, -% \docstrip\ does not need \LaTeX), then inform the autodetect routine -% about your intention: -% \begin{quote} -% \verb|latex \let\install=y\input{attachfile2.dtx}| -% \end{quote} -% Do not forget to quote the argument according to the demands -% of your shell. -% -% \paragraph{Generating the documentation.} -% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate -% the documentation. The process can be configured by the -% configuration file \xfile{ltxdoc.cfg}. For instance, put this -% line into this file, if you want to have A4 as paper format: -% \begin{quote} -% \verb|\PassOptionsToClass{a4paper}{article}| -% \end{quote} -% An example follows how to generate the -% documentation with pdf\LaTeX: -% \begin{quote} -%\begin{verbatim} -%pdflatex attachfile2.dtx -%makeindex -s gind.ist attachfile2.idx -%pdflatex attachfile2.dtx -%makeindex -s gind.ist attachfile2.idx -%pdflatex attachfile2.dtx -%\end{verbatim} -% \end{quote} -% -% \begin{thebibliography}{9} -% \bibitem{attachfile} -% Scott Pakin: \textit{The \xpackage{attachfile} package}; -% 2005/02/20 v1.2; -% \CTANpkg{attachfile}. -% -% \bibitem{embedfile} -% Heiko Oberdiek: \textit{The \xpackage{embedfile} package}; -% 2006/08/16 v1.0; -% \CTAN{macros/latex/contrib/oberdiek/embedfile.pdf}. -% -% \bibitem{pdfspec} -% Adobe Systems Incorporated: -% \href{https://www.adobe.com/devnet/pdf/pdf_reference.html}% -% {\textit{PDF Reference, Version 1.7}},% -% -% \bibitem{mime} -% Network Working Group: RFC 2046, \textit{Multipurpose Internet Mail Extensions (MIME) Part Two: -% Media Types}, November 1996; \url{http://www.rfc-editor.org/}. -% -% \bibitem{types} -% IANA (Internet Assigned Numbers Authority): -% \textit{MIME Media Types}, May 2006; -% \url{http://www.iana.org/assignments/media-types/}. -% -% \end{thebibliography} -% -% \begin{History} -% \begin{Version}{2005/02/23 v2.0} -% \item -% New options: \xoption{draft}/\xoption{final}. -% \item -% New option scale for scaling the annotation rectangle. -% \item -% Supported driver options: \xoption{pdftex}, \xoption{dvips}. -% \item -% Configuration file `attachfile.cfg' supported. -% \item -% Dependency of package calc dropped. -% \item -% \eTeX\ (\cs{numexpr}, \cs{dimexpr}) used. -% \item -% New auxiliary file \cs{jobname.atfi} to get data unavailable -% by (pdf)\TeX, controlled by \cs{nofiles} and option nofiles. -% \item -% Use of package \xpackage{prokvopt} (never released). -% \end{Version} -% \begin{Version}{2005/10/07 v2.1} -% \item -% Option \xoption{annotname} for naming annotations -% (this name can be used for embedded go-to actions). -% \end{Version} -% \begin{Version}{2006/08/17 v2.2} -% \item -% Use of package \xpackage{kvoptions} instead of \xpackage{prokvopt}. -% \item -% DTX framework. -% \item -% A little documentation. -% \end{Version} -% \begin{Version}{2007/04/11 v2.3} -% \item -% Line ends sanitized. -% \end{Version} -% \begin{Version}{2008/07/29 v2.4} -% \item -% Improved color support. Option \xoption{color} now understands -% the usual color specifications if package \xpackage{xcolor} is -% loaded. -% \end{Version} -% \begin{Version}{2009/09/25 v2.5} -% \item -% New option \xoption{ucfilespec} (since PDF 1.7). -% \item -% Fix: \xpackage{hyperref}'s option \xoption{unicode} is disabled -% for file names except for \xoption{ucfilespec}. -% \end{Version} -% \begin{Version}{2010/09/27 v2.6} -% \item -% Support for dvipdfmx added, new option \xoption{dvipdfmx} -% and alias option \xoption{xetex}. -% (Thanks Will Robertson for pointing to |\special{pdf:fstream ...}|). -% \item -% New option \xoption{driverfallback}. -% \item -% All options except driver options are local options, -% that means they are ignored as global options. -% \item -% Some options are disabled after they are used -% (driver options, \xoption{draft}, \xoption{final}, \xoption{nofiles}). -% \item -% Driver files renamed from \texttt{atfi<driver>.def} to -% \texttt{atfi-<driver>.def}. -% \item -% Bug fix: \cs{textattachfile} now adds an entry into -% the \xext{atfi} file. -% \item -% Program \xfile{pdfatfi.pl} sets modification and creation time with -% time zone, because the time zone offset might differ with -% the file date. -% \end{Version} -% \begin{Version}{2012/04/18 v2.7} -% \item -% Program \xfile{pdfatfi.pl}: Option \xoption{version} added. -% \end{Version} -% \begin{Version}{2016/05/16 v2.8} -% \item -% Documentation updates. -% \end{Version} -% \begin{Version}{2019/07/24 v2.9} -% \item -% Added luatex driver (UF, issue 69) -% \end{Version} -% \end{History} -% -% \PrintIndex -% -% \Finale -\endinput |