diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/oberdiek/attachfile2.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/oberdiek/attachfile2.sty | 584 |
1 files changed, 320 insertions, 264 deletions
diff --git a/Master/texmf-dist/tex/latex/oberdiek/attachfile2.sty b/Master/texmf-dist/tex/latex/oberdiek/attachfile2.sty index 20f5ef0e689..3098ffaefca 100644 --- a/Master/texmf-dist/tex/latex/oberdiek/attachfile2.sty +++ b/Master/texmf-dist/tex/latex/oberdiek/attachfile2.sty @@ -8,7 +8,7 @@ %% %% This is a generated file. %% -%% Copyright (C) 2005-2009 by +%% Copyright (C) 2005-2010 by %% Heiko Oberdiek <heiko.oberdiek at googlemail.com> %% %% This work may be distributed and/or modified under the @@ -28,139 +28,142 @@ %% This work consists of the main source file attachfile2.dtx %% and the derived files %% attachfile2.sty, attachfile2.pdf, attachfile2.ins, attachfile2.drv, -%% atfidvips.def, atfipdftex.def, pdfatfi.pl. +%% atfi-dvips.def, atfi-pdftex.def, atfi-dvipdfmx.def, +%% pdfatfi.pl. %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{attachfile2}% - [2009/09/25 v2.5 attach files into PDF (HO)]% -\RequirePackage{ifpdf} + [2010/09/27 v2.6 attach files into PDF (HO)]% +\RequirePackage{ifpdf}[2009/04/10] +\RequirePackage{ifxetex} +\RequirePackage{ifluatex}[2009/04/10] \RequirePackage{keyval} \RequirePackage{color} -\RequirePackage{kvoptions}[2006/08/17] +\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] - - \RequirePackage{hyperref} \RequirePackage{hycolor}[2008/07/29] - - -\def\atfi@hexdigit#1{% - \ifcase#1% - 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\or 9\or - a\or b\or c\or d\or e\or f% - \fi -} -\def\atfi@hexchar#1{% - \atfi@hexdigit{\numexpr\dimexpr.0625\dimexpr`#1sp\relax\relax\relax}% - \atfi@hexdigit{% - \numexpr`#1-16*\dimexpr.0625\dimexpr`#1sp\relax\relax\relax +\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 + }% + \def\atfi@PatToken{% + [% + -% first character + !% + \#$\%\&'% + \*\+\.% + 0-9% + A-Z% + \^_`% + a-z% + \{\}\|\~% + ]+% + }% + \begingroup + \lccode64=13 % @ + \lowercase{\endgroup + \def\atfi@CR{@}% + }% + \def\atfi@PatQuotedString{% + "% + ([^"\\\atfi@CR]|\\.)*% + "% + }% + \ltx@ifpackagelater{ltxcmds}{2010/09/11}{}{% + \begingroup + \lccode`0=`\{\relax + \lowercase{\endgroup + \def\ltx@leftbracechar{0}% + }% + \begingroup + \lccode`0=`\}\relax + \lowercase{\endgroup + \def\ltx@rightbracechar{0}% + }% }% } -\def\atfi@tohex#1{% - \ifx\relax#1% - \else - \atfi@hexchar{#1}% - \expandafter\atfi@tohex - \fi -} - - -\def\atfi@converttoname#1#2{% - \edef#1{#2}% - \@onelevel@sanitize#1% - \edef#1{\expandafter\atfi@spacetoother#1 \relax}% - \edef#1{\expandafter\atfi@converttokens#1\relax}% +\def\atfi@Warning{\PackageWarning{attachfile2}} +\SetupKeyvalOptions{% + family=AtFi,% + prefix=atfi@% } - -\edef\atfi@hash{\string#}% -\catcode`\ =12\relax% -\def\atfi@space{ }% -\catcode`\ =10\relax% - -\def\atfi@spacetoother#1 #2\relax{% - #1% - \ifx\\#2\\% +\def\atfi@setup{\setkeys{AtFi}} +\DeclareBoolOption{draft} +\DeclareComplementaryOption{final}{draft} +\def\atfi@mimetype{} +\define@key{AtFi}{mimetype}{% + \edef\atfi@mimetype{#1}% + \ifx\atfi@mimetype\ltx@empty \else - \atfi@space - \@ReturnAfterFi{% - \atfi@spacetoother #2\relax + \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 -} -\long\def\@ReturnAfterFi#1\fi{\fi#1} - -\def\atfi@converttokens#1{% - \ifx\relax#1% + \ifx\atfi@mimetype\ltx@empty \else - \ifnum`#1<33 % - \ifcase`#1% - % drop illegal zero - \else - \atfi@hash\atfi@hexchar#1% - \fi - \else - \ifnum`#1>126 % - \atfi@hash\atfi@hexchar#1% - \else - \ifnum`#1=40 % ( - \atfi@hash 28% - \else\ifnum`#1=41 % ) - \atfi@hash 29% - \else\ifnum`#1=60 % < - \atfi@hash 3c% - \else\ifnum`#1=62 % > - \atfi@hash 3e% - \else\ifnum`#1=91 % [ - \atfi@hash 5b% - \else\ifnum`#1=93 % ] - \atfi@hash 5d% - \else\ifnum`#1=123 % { - \atfi@hash 7b% - \else\ifnum`#1=125 % } - \atfi@hash 7d% - \else\ifnum`#1=47 % / - \atfi@hash 2f% - \else\ifnum`#1=37 % % - \atfi@hash 25% - \else - #1% - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \fi - \fi - \expandafter\atfi@converttokens + \EdefEscapeName\atfi@mimetype{\atfi@mimetype}% + \edef\atfi@mimetype{/Subtype/\atfi@mimetype}% \fi } - - -\newif\ifatfi@draft -\let\atfi@finaltrue\atfi@draftfalse -\let\atfi@finalfalse\atfi@drafttrue -\define@key{AtFi}{final}[true]{% - \csname atfi@final#1\endcsname -} -\define@key{AtFi}{draft}[true]{% - \csname atfi@draft#1\endcsname -} - -\def\atfi@mimetype{} -\define@key{AtFi}{mimetype}{% - \atfi@converttoname\atfi@mimetype{#1}% - \edef\atfi@mimetype{/Subtype/\atfi@mimetype}% -} - \define@key{AtFi}{icon}{% \def\atfi@icon{/Name/#1}% \def\atfi@icon@icon{#1}% } -\setkeys{AtFi}{icon=PushPin} - +\atfi@setup{icon=PushPin} \define@key{AtFi}{color}{% \HyColor@AttachfileColor{#1}% \atfi@color@tex\atfi@color@inline\atfi@color@annot {attachfile2}{color}% } -\setkeys{AtFi}{color=1 0.9255 0.7765} - +\atfi@setup{color=1 0.9255 0.7765} \def\atfi@pad@ii#1{% \ifnum#1>9 % \number#1% @@ -168,7 +171,7 @@ 0\number#1% \fi% } -\let\atfi@timezone\@empty +\let\atfi@timezone\ltx@empty \define@key{AtFi}{timezone}{\def\atfi@timezone{#1}} \edef\atfi@time{\the\time} \def\atfi@hours{% @@ -191,105 +194,138 @@ \EdefEscapeString\atfi@date{#1}% \edef\atfi@date{/M(\atfi@date)}% } - -\let\atfi@annotname\@empty -\define@key{AtFi}{annotname}{% - \atfi@pdfstringdef\atfi@annotname{#1}% - \edef\atfi@annotname{/NM(\atfi@annotname)}% -} - \DeclareRobustCommand{\atfi@pdfstringdef}[2]{% \pdfstringdef\atfi@temp@string{#2}% \edef#1{\atfi@temp@string}% } - +\def\atfi@NoValue{\NoValue} +\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 +} +\let\atfi@annotname\ltx@empty +\define@key{AtFi}{annotname}[\NoValue]{% + \atfi@DefNoValueName\atfi@annotname{NM}{#1}% +} \def\atfi@author{} -\define@key{AtFi}{author}{% - \atfi@pdfstringdef\atfi@author{#1}% - \edef\atfi@author{/T(\atfi@author)}% +\define@key{AtFi}{author}[\NoValue]{% + \atfi@DefNoValueName\atfi@author{T}{#1}% } - \def\atfi@description{} -\define@key{AtFi}{description}{% - \atfi@pdfstringdef\atfi@description{#1}% - \edef\atfi@description{/Contents(\atfi@description)}% +\define@key{AtFi}{description}[\NoValue]{% + \atfi@DefNoValueName\atfi@description{Contents}{#1}% } - \def\atfi@subject{} -\define@key{AtFi}{subject}{% - \atfi@pdfstringdef\atfi@subject{#1}% - \edef\atfi@subject{/Subj(\atfi@subject)}% -} - -\newif\ifatfi@print -\atfi@printtrue -\define@key{AtFi}{print}[true]{\csname atfi@print#1\endcsname} - -\newif\ifatfi@zoom -\atfi@zoomtrue -\define@key{AtFi}{zoom}[true]{\csname atfi@zoom#1\endcsname} - -\newif\ifatfi@appearance -\atfi@appearancetrue -\define@key{AtFi}{appearance}[true]{% - \csname atfi@appearance#1\endcsname +\define@key{AtFi}{subject}[\NoValue]{% + \atfi@DefNoValueName\atfi@subject{Subj}{#1}% } - -\def\atfi@scale{1} -\define@key{AtFi}{scale}[1]{% - \def\atfi@scale{#1}% -} - +\DeclareBoolOption[true]{print} +\DeclareBoolOption[true]{zoom} +\DeclareBoolOption[true]{appearance} +\DeclareStringOption[1]{scale} \def\atfi@ucfilespec{} \define@key{AtFi}{ucfilespec}[1]{% \def\atfi@ucfilespec{#1}% - \ifx\atfi@ucfilespec\@empty + \ifx\atfi@ucfilespec\ltx@empty \else \atfi@pdfstringdef\atfi@ucfilespec{#1}% \fi } - -\newif\ifatfi@nofiles -\atfi@nofilesfalse -\define@key{AtFi}{nofiles}[true]{% - \csname atfi@nofiles#1\endcsname -} - -\let\atfi@driver\@empty +\DeclareBoolOption{nofiles} +\let\atfi@driver\ltx@empty \def\atfi@driver@pdftex{pdftex} \def\atfi@driver@dvips{dvips} - -\define@key{AtFi}{pdftex}[true]{% +\def\atfi@driver@dvipdfmx{dvipdfmx} +\DeclareVoidOption{pdftex}{% \let\atfi@driver\atfi@driver@pdftex } -\define@key{AtFi}{dvips}[true]{% +\DeclareVoidOption{dvips}{% \let\atfi@driver\atfi@driver@dvips } - +\DeclareVoidOption{dvipdfmx}{% + \let\atfi@driver\atfi@driver@dvipdfmx +} +\DeclareVoidOption{xetex}{% + \let\atfi@driver\atfi@driver@dvipdfmx +} +\DeclareStringOption{driverfallback} \DeclareRobustCommand{\attachfilesetup}[1]{\setkeys{AtFi}{#1}} - +\DeclareLocalOptions{% + annotname,% + appearance,% + author,% + color,% + date,% + description,% + icon,% + mimetype,% + nofiles,% + print,% + scale,% + subject,% + timezone,% + ucfilespec,% + zoom,% +} \InputIfFileExists{attachfile.cfg}{}{} - -\ProcessKeyvalOptions{AtFi} - - +\ProcessKeyvalOptions* +\def\atfi@DisableOption{% + \DisableKeyvalOption[action=error,package=attachfile2]{AtFi}% +} \ifpdf % ignoring other driver options \let\atfi@driver\atfi@driver@pdftex \else - \ifx\atfi@driver\@empty - \PackageWarningNoLine{attachfile2}{% - Driver is not specified,\MessageBreak - enforce draft settings% - }% - \atfi@drafttrue + \ifx\atfi@driver\atfi@driver@pdftex + \let\atfi@driver\ltx@empty + \PackageError{attachfile2}{% + Wrong driver option `pdftex',\MessageBreak + because pdfTeX in PDF mode is not detected% + }\@ehc + \fi + \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 - - +\atfi@DisableOption{pdftex} +\atfi@DisableOption{dvips} +\atfi@DisableOption{dvipdfmx} +\atfi@DisableOption{xetex} +\atfi@DisableOption{driverfallback} \DeclareRobustCommand{\notextattachfile}[2][]{% \begingroup - \setkeys{AtFi}{#1}% + \atfi@setup{#1}% \ifatfi@print \leavevmode \begingroup @@ -297,12 +333,13 @@ #2\strut \endgroup \else - \setbox0=\hbox{#2\strut}% + \sbox\ltx@zero{#2\strut}% \makebox[\wd0]{}% \fi \endgroup } - +\atfi@DisableOption{draft}% +\atfi@DisableOption{final}% \ifatfi@draft \def\atfi@dummy@pushpin{% \raisebox{-1.25bp}{\parbox[b][14bp]{24bp}{}}% @@ -316,13 +353,9 @@ \DeclareRobustCommand{\attachfile}[2][]{% \noattachfile[{#1}]% }% - \expandafter\endinput + \expandafter\endinput \fi - - -\input{atfi\atfi@driver.def} - - +\input{atfi-\atfi@driver.def} \def\atfi@acroGraph@data{% \atfi@GSAVE 0.5 \atfi@SETGRAYFILL @@ -521,13 +554,11 @@ \atfi@STROKE \atfi@GRESTORE } -\DeclareRobustCommand{\atfi@acroTag}{% +\def\atfi@acroTag{% \raisebox{-1.6bp}{\parbox[b][17bp]{25bp}{% \rule{0pt}{0pt}\atfi@literal{\atfi@acroTag@data}}% }% } - - \def\attachfile@timezone#1{% \ifx\\#1\\% % no timezone information given @@ -536,58 +567,92 @@ \fi } \newcommand*{\attachfile@file}[2][]{% - \ifx\\#2\\% + \EdefUnescapeHex\atfi@filename{#2}% + \ifx\atfi@filename\ltx@empty \PackageError{attachfile2}{Empty file name}\@ehc \else - \edef\atfi@restore{\uccode0=\the\uccode0 \relax}% - \let\atfi@filename\@empty - \atfi@getfilename#2\relax\relax - \atfi@restore \@namedef{atfi@file@\atfi@filename}{#1}% \fi } -\begingroup - \catcode0=12 % - \gdef\atfi@getfilename#1#2{% - \ifx\relax#1% - \else - \uccode0=\numexpr 16*\atfi@hexnum{#1} + \atfi@hexnum{#2}\relax - \uppercase{% - \edef\atfi@filename{% - \atfi@filename^^@% - }% - }% - \expandafter\atfi@getfilename - \fi - }% -\endgroup -\def\atfi@hexnum#1{% - \ifnum`#1<58 % - \numexpr `#1-48\relax - \else - \numexpr `#1-87\relax - \fi -} - \InputIfFileExists{\jobname.atfi}{}{}% - \newif\ifatfi@checksum \define@key{AtFi@file}{CheckSum}{% \atfi@checksumtrue \edef\atfi@params{\atfi@params/CheckSum<#1>}% } \newif\ifatfi@creationdate +\define@key{AtFi@file}{CreationDateTZ}{% + \ifatfi@creationdate + \else + \atfi@creationdatetrue + \edef\atfi@params{% + \atfi@params + /CreationDate(#1)% + }% + \fi +} \define@key{AtFi@file}{CreationDate}{% - \atfi@creationdatetrue - \edef\atfi@params{\atfi@params/CreationDate(D:#1\atfi@timezone)}% + \ifatfi@creationdate + \else + \atfi@creationdatetrue + \edef\atfi@params{% + \atfi@params + /CreationDate(#1\atfi@timezone)% + }% + \fi } \newif\ifatfi@moddate +\define@key{AtFi@file}{ModDateTZ}{% + \ifatfi@moddate + \else + \atfi@moddatetrue + \edef\atfi@params{% + \atfi@params + /ModDate(#1)% + }% + \fi +} \define@key{AtFi@file}{ModDate}{% - \atfi@moddatetrue - \edef\atfi@params{\atfi@params/ModDate(D:#1\atfi@timezone)}% + \ifatfi@moddate + \else + \atfi@moddatetrue + \edef\atfi@params{% + \atfi@params + /ModDate(D:#1\atfi@timezone)% + }% + \fi } - - +\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 \if@filesw \else \atfi@nofilestrue @@ -597,7 +662,7 @@ File `\jobname.atfi' will not be written because of\MessageBreak \string\nofiles\space or option `nofiles'% }% - \let\atfi@writefile\@gobble + \let\atfi@writefile\ltx@gobble \else \newwrite\atfi@stream \immediate\openout\atfi@stream=\jobname.atfi\relax @@ -606,78 +671,66 @@ }% \def\atfi@writefile#1{% \begingroup - \def\file{#1}% - \@onelevel@sanitize\file - \edef\file{\@firstofone{\expandafter\atfi@replace\file} \@nil}% - \edef\file{\expandafter\atfi@tohex\file\relax}% + \EdefEscapeHex\atfi@temp{#1}% \immediate\write\atfi@stream{% \string\attachfile@file[% - \@ifundefined{atfi@file@#1}{}{\@nameuse{atfi@file@#1}}% - ]{\file}% + \ltx@ifundefined{atfi@file@#1}{}{\@nameuse{atfi@file@#1}}% + ]{\atfi@temp}% }% \endgroup }% \fi - +\atfi@DisableOption{nofiles} \def\atfi@attachfile#1#2{% - \@ifundefined{atfi@fileobj@#2}{% + \ltx@IfUndefined{atfi@fileobj@#2}{% \atfi@writefile{#2}% }{% % don't need duplicates }% - \setkeys{AtFi}{#1}% + \atfi@setup{#1}% \atfi@embedfile{#2}% \atfi@set@appearance@icon \atfi@flags@to@int \atfi@insert@file@annot{#2}% \endgroup } - - -\def\atfi@replace#1 #2\@nil{% - #1% - \ifx\\#2\\% - \else - \atfi@space - \@ReturnAfterFi{% - \atfi@replace#2\@nil - }% - \fi -}% - -\long\def\@ReturnAfterFi#1\fi{\fi#1} - - \newlength{\atfi@appearancewidth} \newlength{\atfi@appearanceheight} \newlength{\atfi@appearancedepth} \newsavebox{\atfi@appearancebox} - \def\atfi@set@appearance@icon{% - \@ifundefined{atfi@appobj@\atfi@icon@icon}{% - \savebox{\atfi@appearancebox}{\@nameuse{atfi@acro\atfi@icon@icon}}% - \expandafter\xdef\csname atfi@appwidth@\atfi@icon@icon\endcsname{% + \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{% + \expandafter + \xdef\csname atfi@appheight@\atfi@icon@icon\endcsname{% \the\ht\atfi@appearancebox }% - \expandafter\xdef\csname atfi@appdepth@\atfi@icon@icon\endcsname{% + \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 + \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 + \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 } - \def\atfi@set@appearance#1{% \savebox{\atfi@appearancebox}{#1}% \atfi@appearancewidth=\wd\atfi@appearancebox @@ -685,7 +738,6 @@ \atfi@appearancedepth=\dp\atfi@appearancebox \atfi@xform } - \newcounter{atfi@flags} \DeclareRobustCommand{\atfi@flags@to@int}{% \setcounter{atfi@flags}{0}% @@ -697,13 +749,17 @@ \addtocounter{atfi@flags}{8}% \fi% } - \def\atfi@textattachfile#1#2{% \endgroup \atfi@textattachfile@i{#1}{#2}% } \def\atfi@textattachfile@i#1#2#3{% - \setkeys{AtFi}{#1}% + \ltx@IfUndefined{atfi@fileobj@#2}{% + \atfi@writefile{#2}% + }{% + % don't need duplicates + }% + \atfi@setup{#1}% \atfi@embedfile{#2}% \atfi@set@appearance{% \leavevmode @@ -716,7 +772,6 @@ \atfi@insert@file@annot{#2}% \endgroup } - \DeclareRobustCommand{\attachfile}[1][]{% \begingroup \let\do\@makeother @@ -736,10 +791,11 @@ } \DeclareRobustCommand{\noattachfile}[1][]{% \begingroup - \setkeys{AtFi}{#1}% + \atfi@setup{#1}% \atfi@set@appearance@icon \ifatfi@print - \expandafter\atfi@refxform\csname atfi@appobj@\atfi@icon@icon\endcsname + \expandafter + \atfi@refxform\csname atfi@appobj@\atfi@icon@icon\endcsname \else \makebox[\atfi@appearancewidth]{}% \fi |