diff options
-rw-r--r-- | Master/texmf-dist/doc/latex/embedfile/README.md | 7 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/embedfile/embedfile-example-collection.tex | 106 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/embedfile/embedfile-example-plain.tex | 81 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/embedfile/embedfile.pdf | bin | 0 -> 391565 bytes | |||
-rw-r--r-- | Master/texmf-dist/source/latex/embedfile/embedfile.dtx | 1965 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/embedfile/embedfile.sty | 792 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/embedfile/dtx-attach.sty | 57 | ||||
-rwxr-xr-x | Master/tlpkg/bin/tlpkg-ctan-check | 2 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc | 1 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/embedfile.tlpsrc | 0 |
10 files changed, 3010 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/latex/embedfile/README.md b/Master/texmf-dist/doc/latex/embedfile/README.md new file mode 100644 index 00000000000..d410d5f8c1e --- /dev/null +++ b/Master/texmf-dist/doc/latex/embedfile/README.md @@ -0,0 +1,7 @@ +# embedfile + +embedfile package for LaTeX + + +This package embeds files to a PDF document. +Currently the only supported drivers are pdfTeX and LuaTeX. diff --git a/Master/texmf-dist/doc/latex/embedfile/embedfile-example-collection.tex b/Master/texmf-dist/doc/latex/embedfile/embedfile-example-collection.tex new file mode 100644 index 00000000000..262742e183b --- /dev/null +++ b/Master/texmf-dist/doc/latex/embedfile/embedfile-example-collection.tex @@ -0,0 +1,106 @@ +%% +%% This is file `embedfile-example-collection.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% embedfile.dtx (with options: `examplecollection') +%% +%% This is a generated file. +%% +%% Project: embedfile +%% Version: 2019/12/03 v2.9 +%% +%% Copyright (C) +%% 2006-2011 Heiko Oberdiek +%% 2016-2019 Oberdiek Package Support Group +%% +%% 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/embedfile/issues +%% +%% +%% The Base Interpreter refers to any `TeX-Format', +%% because some files are installed in TDS:tex/generic//. +%% +%% This work consists of the main source file embedfile.dtx +%% and the derived files +%% embedfile.sty, embedfile.pdf, embedfile.ins, embedfile.drv, +%% dtx-attach.sty, embedfile-example-plain.tex, +%% embedfile-example-collection.tex, embedfile-test1.tex, +%% embedfile-test2.tex, embedfile-test3.tex, +%% embedfile-test4.tex. +%% +\NeedsTeXFormat{LaTeX2e} +\documentclass{article} +\usepackage[bookmarks=false]{hyperref} +% provides \pdfstringdef that is then used by `title' and +% other keys. +\usepackage{embedfile}[2019/12/03] +\embedfilesetup{ + view=details, + initialfile=embedfile.pdf +} +\embedfilefield{file}{ + type=file, + title={File name} +} +\embedfilefield{description}{ + type=desc, + title={Description} +} +\embedfilefield{date}{ + type=moddate, + title={Date} +} +\embedfilefield{size}{ + type=size, + title={Size} +} +\embedfilefield{type}{ + type=text, + title={Type}, + visible=false +} +\embedfilesort{ + type, + date=descending +} +\begin{document} +An example for embedded files as collection. +You need Acrobat Reader 8 or higher. + +\embedfile[ + desc={Source file of package `embedfile'}, + description.prefix={Package: }, + type.value={DTX} +]{embedfile.dtx} + +\embedfile[ + desc={Documentation of package `embedfile'}, + description.prefix={Package: }, + type.value={PDF} +]{embedfile.pdf} + +\embedfile[ + desc={The source for this example}, + description.prefix={Example: }, + type.value={TEX} +]{\jobname.tex} + +\end{document} +\endinput +%% +%% End of file `embedfile-example-collection.tex'. diff --git a/Master/texmf-dist/doc/latex/embedfile/embedfile-example-plain.tex b/Master/texmf-dist/doc/latex/embedfile/embedfile-example-plain.tex new file mode 100644 index 00000000000..fb872ba55d9 --- /dev/null +++ b/Master/texmf-dist/doc/latex/embedfile/embedfile-example-plain.tex @@ -0,0 +1,81 @@ +%% +%% This is file `embedfile-example-plain.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% embedfile.dtx (with options: `exampleplain') +%% +%% This is a generated file. +%% +%% Project: embedfile +%% Version: 2019/12/03 v2.9 +%% +%% Copyright (C) +%% 2006-2011 Heiko Oberdiek +%% 2016-2019 Oberdiek Package Support Group +%% +%% 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/embedfile/issues +%% +%% +%% The Base Interpreter refers to any `TeX-Format', +%% because some files are installed in TDS:tex/generic//. +%% +%% This work consists of the main source file embedfile.dtx +%% and the derived files +%% embedfile.sty, embedfile.pdf, embedfile.ins, embedfile.drv, +%% dtx-attach.sty, embedfile-example-plain.tex, +%% embedfile-example-collection.tex, embedfile-test1.tex, +%% embedfile-test2.tex, embedfile-test3.tex, +%% embedfile-test4.tex. +%% +% Load packages +\input miniltx +% \def\Gin@driver{pdftex.def} +% \input graphicx.sty +\input embedfile.sty +\resetatcatcode + +% default setting +\embedfilesetup{ + mimetype=text/plain +} + +% Embed files +\embedfile[ + filespec=example.tex, + desc={Source code (plain-TeX) of this example} +]{embedfile-example-plain.tex} + +\embedfile[ + desc={Source of package `embedfile'} +]{embedfile.dtx} + +\embedfile[ + mimetype=application/pdf, + desc={Documentation of package `embedfile'} +]{embedfile.pdf} + +% Some text +This example document contains three embedded files. + +% End of document +\embedfilefinish % don't forget +\bye +\endinput +%% +%% End of file `embedfile-example-plain.tex'. diff --git a/Master/texmf-dist/doc/latex/embedfile/embedfile.pdf b/Master/texmf-dist/doc/latex/embedfile/embedfile.pdf Binary files differnew file mode 100644 index 00000000000..a91594eaf59 --- /dev/null +++ b/Master/texmf-dist/doc/latex/embedfile/embedfile.pdf diff --git a/Master/texmf-dist/source/latex/embedfile/embedfile.dtx b/Master/texmf-dist/source/latex/embedfile/embedfile.dtx new file mode 100644 index 00000000000..1fb0ed84b68 --- /dev/null +++ b/Master/texmf-dist/source/latex/embedfile/embedfile.dtx @@ -0,0 +1,1965 @@ +% \iffalse meta-comment +% +% File: embedfile.dtx +% Version: 2019/12/03 v2.9 +% Info: Embed files into PDF +% +% Copyright (C) +% 2006-2011 Heiko Oberdiek +% 2016-2019 Oberdiek Package Support Group +% https://github.com/ho-tex/embedfile/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/embedfile/issues +% +% The Base Interpreter refers to any `TeX-Format', +% because some files are installed in TDS:tex/generic//. +% +% This work consists of the main source file embedfile.dtx +% and the derived files +% embedfile.sty, embedfile.pdf, embedfile.ins, embedfile.drv, +% dtx-attach.sty, embedfile-example-plain.tex, +% embedfile-example-collection.tex, embedfile-test1.tex, +% embedfile-test2.tex, embedfile-test3.tex, +% embedfile-test4.tex. +% +% Distribution: +% CTAN:macros/latex/contrib/embedfile/embedfile.dtx +% CTAN:macros/latex/contrib/embedfile/embedfile.pdf +% +% Unpacking: +% (a) If embedfile.ins is present: +% tex embedfile.ins +% (b) Without embedfile.ins: +% tex embedfile.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{embedfile.dtx} +% (quote the arguments according to the demands of your shell) +% +% Documentation: +% (a) If embedfile.drv is present: +% latex embedfile.drv +% (b) Without embedfile.drv: +% latex embedfile.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 embedfile.dtx +% makeindex -s gind.ist embedfile.idx +% pdflatex embedfile.dtx +% makeindex -s gind.ist embedfile.idx +% pdflatex embedfile.dtx +% +% Installation: +% TDS:tex/generic/embedfile/embedfile.sty +% TDS:tex/generic/embedfile/dtx-attach.sty +% TDS:doc/latex/embedfile/embedfile.pdf +% TDS:doc/latex/embedfile/embedfile-example-plain.tex +% TDS:doc/latex/embedfile/embedfile-example-collection.tex +% TDS:source/latex/embedfile/embedfile.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: embedfile 2019/12/03 v2.9 Embed files into PDF (HO)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\let\MetaPrefix\relax +\preamble + +This is a generated file. + +Project: embedfile +Version: 2019/12/03 v2.9 + +Copyright (C) + 2006-2011 Heiko Oberdiek + 2016-2019 Oberdiek Package Support Group + +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/embedfile/issues + + +The Base Interpreter refers to any `TeX-Format', +because some files are installed in TDS:tex/generic//. + +This work consists of the main source file embedfile.dtx +and the derived files + embedfile.sty, embedfile.pdf, embedfile.ins, embedfile.drv, + dtx-attach.sty, embedfile-example-plain.tex, + embedfile-example-collection.tex, embedfile-test1.tex, + embedfile-test2.tex, embedfile-test3.tex, + embedfile-test4.tex. + +\endpreamble +\let\MetaPrefix\DoubleperCent + +\generate{% + \file{embedfile.ins}{\from{embedfile.dtx}{install}}% + \file{embedfile.drv}{\from{embedfile.dtx}{driver}}% + \usedir{tex/generic/embedfile}% + \file{embedfile.sty}{\from{embedfile.dtx}{package}}% + \usedir{tex/latex/embedfile}% + \file{dtx-attach.sty}{\from{embedfile.dtx}{dtxattach}}% + \usedir{doc/latex/embedfile}% + \file{embedfile-example-plain.tex}{\from{embedfile.dtx}{exampleplain}}% + \file{embedfile-example-collection.tex}{\from{embedfile.dtx}{examplecollection}}% +% \usedir{doc/latex/embedfile/test}% +% \file{embedfile-test1.tex}{\from{embedfile.dtx}{test1}}% +% \file{embedfile-test2.tex}{\from{embedfile.dtx}{test2}}% +% \file{embedfile-test3.tex}{\from{embedfile.dtx}{test3}}% +% \file{embedfile-test4.tex}{\from{embedfile.dtx}{test4}}% +} + +\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{* embedfile.sty, dtx-attach.sty} +\Msg{*} +\Msg{* To produce the documentation run the file `embedfile.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +%</install> +%<*ignore> +\fi +%</ignore> +%<*driver> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{embedfile.drv}% + [2019/12/03 v2.9 Embed files into PDF (HO)]% +\documentclass{ltxdoc} +\usepackage{holtxdoc}[2011/11/22] +\begin{document} + \DocInput{embedfile.dtx}% +\end{document} +%</driver> +% \fi +% +% +% +% \GetFileInfo{embedfile.drv} +% +% \title{The \xpackage{embedfile} package} +% \date{2019/12/03 v2.9} +% \author{Heiko Oberdiek\thanks +% {Please report any issues at \url{https://github.com/ho-tex/embedfile/issues}}} +% +% \maketitle +% +% \begin{abstract} +% This package embeds files to a PDF document. +% Currently the only supported driver is \pdfTeX\ $>=$ 1.30 in PDF mode. +% \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, this +% package 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 This package 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} +% +% \subsection{User interface} +% +% This package \xpackage{embedfile} can be used with both +% \LaTeX\ and \plainTeX. See \autoref{sec:plain} that +% explains the use with \plainTeX\ by an example. +% In \LaTeX\ the package is loaded as usually. There are no options. +% \begin{quote} +% \verb|\usepackage{embedfile}| +% \end{quote} +% +% \begin{declcs}{embedfile} +% |[|\meta{options}|]| \M{file} +% \end{declcs} +% The macro \cs{embedfile} includes file \meta{file} and +% attaches it to the PDF document. At the end of the document +% the sorted list of embedded files are written. Thus you can +% safely use \cs{embedfile} before \verb|\end{document}|. +% Embedding files using \cs{AtEndDocument} will only work, +% if \cs{AtEndDocument} is called before loading the package +% \xpackage{embedfile}. +% +% The \meta{options} are give as key value pairs. The following +% keys are supported: +% \begin{description} +% \item[\xoption{filespec}] +% This allows to override the file name +% that appears in the PDF file. If you are using other than +% simple file names (8-bit, path separators, \dots), look into +% the PDF specification (\cite{pdfspec}). +% There are rules how these file names must be written/encoded. +% Avoid 8-bit characters +% and other special characters, the behaviour is currently undefined. +% Use option \xoption{ucfilespec} for more funny file names. +% The string method, see below, is |escape| since version 2.4. +% +% This name is also used as entry in a name tree +% (see PDF specification: |/EmbeddedFiles|). Therefore the +% value for \xoption{filespec} must be unique among all +% embedded files. Also key \xoption{initialfiles} refers +% to this name, if the file name and the value of \xoption{filespec} +% are different. +% \item[\xoption{ucfilespec}] +% Since PDF 1.7 the file name may be provided in Unicode. +% The conversion of the option value into a PDF string +% is controlled by option \xoption{stringmethod}. +% \item[\xoption{filesystem}] +% This sets the entry \verb|/FS| in +% the file specification dictionary, see PDF specification +% (\cite{pdfspec}). +% Example: \verb|filesystem=URL|. +% \item[\xoption{mimetype}] +% This sets the mime type (\cite{mime}) of the file, +% see \autoref{sec:plain} for examples and \cite{types} +% for a list of officially registered types. +% \item[\xoption{desc}] +% The description for the file. +% \item[\xoption{stringmethod}] +% The package must convert the values of the keys \xoption{ucfilespec} +% and \xoption{desc} into a PDF string (before version 2.4: \xoption{filespec} +% and \xoption{desc}). If \xpackage{hyperref} +% is found, then its \cs{pdfstringdef} will be used, otherwise +% \pdfTeX's \cs{pdfescapestring} is used. Value \verb|psd| +% forces the use of \cs{pdfstringdef}, value \verb|escape| +% the use of \cs{pdfescapestring}. +% \item[\xoption{\meta{key}.value}] Sets the value of a collection +% item property, see section \ref{sec:collection}. +% \item[\xoption{\meta{key}.prefix}] +% Sets the prefix of a collection item property, +% see section \ref{sec:collection}. +% \item[\xoption{id}] +% The value must be an unique name. Macros +% \cs{embedfileifobjectexists} and \cs{embedfilegetobject} +% are using this name later. +% \end{description} +% +% \begin{declcs}{embedfilefinish} +% \end{declcs} +% The list of all embedded files must be added as data structure +% in the PDF file. In case of \LaTeX\ this is automatically done. +% The package uses \cs{AtEndDocument}. Then the list of all +% files should be known. However, \plainTeX\ does not know +% about \cs{AtEndDocument}. Thus the user must call +% \cs{embedfilefinish} at the end of the document +% after the last file is embedded. +% +% \begin{declcs}{embedfilesetup} \M{options} +% \end{declcs} +% Options for \cs{embedfile} and collection support +% can be set in \cs{embedfilesetup}. +% +% \subsection{Collection support (PDF 1.7)} +% \label{sec:collection} +% +% Since PDF 1.7 the embedded files can form a \emph{collection} +% (sometimes referred as \emph{package}), the main document +% is called \emph{cover sheet}. See PDF specification +% 8.2.4 ``Collections'' and 3.10.5 ``Collection items'' \cite{pdfspec}. +% +% Usually Acrobat Reader 7 or 8 shows the +% embedded files in a table at the bottom with the following columns: +% \begin{quote} +% \begin{tabular}{@{}l|l|l|l@{}} +% Name & Description & Modified & Size\\ +% \hline +% \dots & \dots & \dots & \dots\\ +% \end{tabular} +% \end{quote} +% Acrobat Reader 10 shows the embeded files in the left panel +% and adds a new column for the compressed size. +% +% If the files form a collection, then they are displayed +% in a table left or top (depending on option \xoption{view}, +% see \cs{embedfilesetup}). +% +% +% Collection support is enabled automatically, if +% it is used. +% +% \begin{declcs}{embedfilesetup} \M{options} +% \end{declcs} +% The following options are supported in addition +% to options for \cs{embedfile}: +% \begin{description} +% \item[\xoption{view}] +% If the PDF file contains a collection, then Acrobat Reader 8 +% shows a line at the top below the menu bar and the toolbar. +% It shows the current selected file, icons for changing the +% view mode, an options menu. +% The initial mode how the collection is presented is +% set by this option \xoption{view}. +% The following modes/values are supported, the default is |details|: +% \begin{description} +% \item[\texttt{details}] The full collection table is displayed +% at the top below the collection bar. +% \item[\texttt{tile}] The files of the collection are shown +% in tile mode on the left. +% \item[\texttt{hidden}] The collection table is not shown. +% \end{description} +% \item[\xoption{initialfile}] +% Selects the file that is initially presented. Especially +% useful for an embedded PDF file that is then shown instead +% of the cover document. There must be an \cs{embedfile} command +% somewhere whose value for key \xoption{filespec} is used here. +% The \cs{embedfile} command can drop option \xoption{filespec} +% if the file name is not different. +% \end{description} +% +% \begin{declcs}{embedfilefield} \M{key} \M{options} +% \end{declcs} +% Macro \cs{embedfilefield} defines a column/field in the collection table. +% The name of the field is \meta{key}. +% \begin{description} +% \item[\xoption{type}] +% sets the type of the field. The supported values are: +% \begin{description} +% \item[\texttt{text}] A text field. Its value is set in +% \cs{embedfile} by option \xoption{\meta{key}.value}. +% \item[\texttt{date}] A date field. Its value is set in +% \cs{embedfile} by option \xoption{\meta{key}.value}. +% A special format is required, see ``3.8.3 Dates'' \cite{pdfspec}. +% \item[\texttt{number}] A field with an integer or float number. +% Its value is set in \cs{embedfile} by option +% \xoption{\meta{key}.value}. +% \item[\texttt{file}] The file name of the embedded file. +% \item[\texttt{desc}] The description text of the embedded file. It is +% set in \cs{embedfile} by option \xoption{desc}. +% \item[\texttt{moddate}] The modification date of the embedded file. +% \item[\texttt{size}] The size of the embedded file. +% \end{description} +% All types allow the use of a prefix that is disregarded by +% sorting. The prefix for this field is set in \cs{embedfile} by +% option \xoption{\meta{key}.prefix}. +% \item[\xoption{title}] sets the column title. +% \item[\xoption{visible}] controls whether the column is presented: +% \begin{description} +% \item[\texttt{true}] shows the column. +% \item[\texttt{false}] hides the column. +% \end{description} +% Default: \texttt{true} +% \item[\xoption{edit}] +% Allows the editing of field values. Does not seem to have an +% effect for Acrobat Reader. +% \begin{description} +% \item[\texttt{true}] enables the feature, if available (depends +% on the PDF viewer). +% \item[\texttt{false}] disables the feature. +% \end{description} +% Default: \texttt{false} +% \end{description} +% The order of \cs{embedfilefield} statements defines the order +% of the columns. +% +% \begin{declcs}{embedfilesort} \M{key-sort-list} +% \end{declcs} +% The sort order of the embedded files are controlled by +% macro \cs{embedfilesort}. \meta{key-sort-list} defines +% the sort order. The key is a field name defined by \cs{embedfilefield}. +% Its value is either \texttt{ascending} or \texttt{descending}. +% The default is \texttt{ascending}. +% +% \subsection{Export of object references} +% +% Caution: This feature is still experimental. It may be even removed +% in future versions. Therefore feedback would be nice, if someone +% has a useful application for this feature. +% +% Object numbers are saved, if \xoption{id} is given in \cs{embedfile}. +% The following objects are supported: +% \begin{itemize} +% \item \texttt{EmbeddedFile} +% \item \texttt{Filespec} +% \end{itemize} +% +% \begin{declcs}{embedfileifobjectexists} \M{id} \M{type} +% \M{then} \M{else} +% \end{declcs} +% Macro \cs{embedfileifobjectexists} tests whether object of \meta{type} +% is available for the embedded file identified by \meta{id}. +% +% \begin{declcs}{embedfilegetobject} \M{id} \M{type} +% \end{declcs} +% Macro \cs{embedfilegetobject} expands to the full object reference +% object of \meta{type} for the embedded file identified by \meta{id}. +% +% \subsubsection{Example} +% +%\begin{quote} +%\begin{verbatim} +%\embedfile[id={foo}]{foo.pdf} +%\embedfileifobjectexists{foo}{Filespec}{% +% \typeout{% +% FileSpec object for `foo': % +% \embedfilegetobject{foo}{Filespec}% +% }% +%}{% +% \typeout{No Filespec object for `foo'}% +%} +%\end{verbatim} +%\end{quote} +% +% \subsection{Examples} +% \label{sec:examples} +% +% \subsubsection{\plainTeX} +% \label{sec:plain} +% +% The package can be used with \plainTeX. It can be used +% with or without help from \xfile{miniltx.tex}. +% +% If additionally package \xpackage{keyval} (\xpackage{graphicx}) +% is needed, load it first. Then package \xpackage{embedfile} avoids +% a duplicate loading of package \xpackage{keyval}. +% +% Because \plainTeX\ does not provide a hook at end of the document, +% you have to call \cs{embedfilefinish} manually at the end +% after the last embedded file. +% \begin{macrocode} +%<*exampleplain> +%<<END +% Load packages +\input miniltx +% \def\Gin@driver{pdftex.def} +% \input graphicx.sty +\input embedfile.sty +\resetatcatcode + +% default setting +\embedfilesetup{ + mimetype=text/plain +} + +% Embed files +\embedfile[ + filespec=example.tex, + desc={Source code (plain-TeX) of this example} +]{embedfile-example-plain.tex} + +\embedfile[ + desc={Source of package `embedfile'} +]{embedfile.dtx} + +\embedfile[ + mimetype=application/pdf, + desc={Documentation of package `embedfile'} +]{embedfile.pdf} + +% Some text +This example document contains three embedded files. + +% End of document +\embedfilefinish % don't forget +\bye +%END +%</exampleplain> +% \end{macrocode} +% +% \subsubsection{Collection example} +% +% \begin{macrocode} +%<*examplecollection> +%<<END +\NeedsTeXFormat{LaTeX2e} +\documentclass{article} +\usepackage[bookmarks=false]{hyperref} +% provides \pdfstringdef that is then used by `title' and +% other keys. +\usepackage{embedfile}[2019/12/03] +\embedfilesetup{ + view=details, + initialfile=embedfile.pdf +} +\embedfilefield{file}{ + type=file, + title={File name} +} +\embedfilefield{description}{ + type=desc, + title={Description} +} +\embedfilefield{date}{ + type=moddate, + title={Date} +} +\embedfilefield{size}{ + type=size, + title={Size} +} +\embedfilefield{type}{ + type=text, + title={Type}, + visible=false +} +\embedfilesort{ + type, + date=descending +} +\begin{document} +An example for embedded files as collection. +You need Acrobat Reader 8 or higher. + +\embedfile[ + desc={Source file of package `embedfile'}, + description.prefix={Package: }, + type.value={DTX} +]{embedfile.dtx} + +\embedfile[ + desc={Documentation of package `embedfile'}, + description.prefix={Package: }, + type.value={PDF} +]{embedfile.pdf} + +\embedfile[ + desc={The source for this example}, + description.prefix={Example: }, + type.value={TEX} +]{\jobname.tex} + +\end{document} +%END +%</examplecollection> +% \end{macrocode} +% +% \subsection{Package \xpackage{dtx-attach}} +% +% Package \xpackage{dtx-attach} is just a small application of +% package \xpackage{embedfile}. I am using it for the CTAN +% documentation of my packages in \CTANpkg{oberdiek}. +% It also serves as small example for the use of the package with \LaTeX. +% +% \begin{macrocode} +%<*dtxattach> +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{dtx-attach} + [2019/12/03 v2.9 Embed \string\jobname.dtx (HO)]% +\RequirePackage{embedfile}[2019/12/03] +\embedfile[% + stringmethod=escape,% + mimetype=plain/text,% + desc={LaTeX docstrip source archive for package `\jobname'}% +]{\jobname.dtx} +%</dtxattach> +% \end{macrocode} +% +% \StopEventually{ +% } +% +% \section{Implementation} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% \subsection{Reload check and package identification} +% Reload check, especially if the package is not used with \LaTeX. +% \begin{macrocode} +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode35=6 % # + \catcode39=12 % ' + \catcode44=12 % , + \catcode45=12 % - + \catcode46=12 % . + \catcode58=12 % : + \catcode64=11 % @ + \catcode123=1 % { + \catcode125=2 % } + \expandafter\let\expandafter\x\csname ver@embedfile.sty\endcsname + \ifx\x\relax % plain-TeX, first loading + \else + \def\empty{}% + \ifx\x\empty % LaTeX, first loading, + % variable is initialized, but \ProvidesPackage not yet seen + \else + \expandafter\ifx\csname PackageInfo\endcsname\relax + \def\x#1#2{% + \immediate\write-1{Package #1 Info: #2.}% + }% + \else + \def\x#1#2{\PackageInfo{#1}{#2, stopped}}% + \fi + \x{embedfile}{The package is already loaded}% + \aftergroup\endinput + \fi + \fi +\endgroup% +% \end{macrocode} +% Package identification: +% \begin{macrocode} +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode35=6 % # + \catcode39=12 % ' + \catcode40=12 % ( + \catcode41=12 % ) + \catcode44=12 % , + \catcode45=12 % - + \catcode46=12 % . + \catcode47=12 % / + \catcode58=12 % : + \catcode64=11 % @ + \catcode91=12 % [ + \catcode93=12 % ] + \catcode123=1 % { + \catcode125=2 % } + \expandafter\ifx\csname ProvidesPackage\endcsname\relax + \def\x#1#2#3[#4]{\endgroup + \immediate\write-1{Package: #3 #4}% + \xdef#1{#4}% + }% + \else + \def\x#1#2[#3]{\endgroup + #2[{#3}]% + \ifx#1\@undefined + \xdef#1{#3}% + \fi + \ifx#1\relax + \xdef#1{#3}% + \fi + }% + \fi +\expandafter\x\csname ver@embedfile.sty\endcsname +\ProvidesPackage{embedfile}% + [2019/12/03 v2.9 Embed files into PDF (HO)]% +% \end{macrocode} +% +% \subsection{Catcodes} +% +% \begin{macrocode} +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode123=1 % { + \catcode125=2 % } + \catcode64=11 % @ + \def\x{\endgroup + \expandafter\edef\csname EmFi@AtEnd\endcsname{% + \endlinechar=\the\endlinechar\relax + \catcode13=\the\catcode13\relax + \catcode32=\the\catcode32\relax + \catcode35=\the\catcode35\relax + \catcode61=\the\catcode61\relax + \catcode64=\the\catcode64\relax + \catcode123=\the\catcode123\relax + \catcode125=\the\catcode125\relax + }% + }% +\x\catcode61\catcode48\catcode32=10\relax% +\catcode13=5 % ^^M +\endlinechar=13 % +\catcode35=6 % # +\catcode64=11 % @ +\catcode123=1 % { +\catcode125=2 % } +\def\TMP@EnsureCode#1#2{% + \edef\EmFi@AtEnd{% + \EmFi@AtEnd + \catcode#1=\the\catcode#1\relax + }% + \catcode#1=#2\relax +} +\TMP@EnsureCode{39}{12}% ' +\TMP@EnsureCode{40}{12}% ( +\TMP@EnsureCode{41}{12}% ) +\TMP@EnsureCode{44}{12}% , +\TMP@EnsureCode{46}{12}% . +\TMP@EnsureCode{47}{12}% / +\TMP@EnsureCode{58}{12}% : +\TMP@EnsureCode{60}{12}% < +\TMP@EnsureCode{62}{12}% > +\TMP@EnsureCode{91}{12}% [ +\TMP@EnsureCode{93}{12}% ] +\TMP@EnsureCode{96}{12}% ` +\edef\EmFi@AtEnd{\EmFi@AtEnd\noexpand\endinput} +% \end{macrocode} +% +% \subsection{Tools} +% +% \begin{macro}{\EmFi@RequirePackage} +% \begin{macrocode} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname RequirePackage\endcsname\relax + \def\EmFi@RequirePackage#1[#2]{% + \input #1.sty\relax + }% +\else + \let\EmFi@RequirePackage\RequirePackage +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\EmFi@Error} +% \begin{macrocode} +\EmFi@RequirePackage{infwarerr}[2007/09/09]% +\def\EmFi@Error{% + \@PackageError{embedfile}% +} +% \end{macrocode} +% \end{macro} +% +% Luatex compat +% \begin{macrocode} +\ifx\pdfextension\@undefined\else + \protected\def\pdflastobj {\numexpr\pdffeedback lastobj\relax} + \protected\def\pdfnames {\pdfextension names } + \protected\def\pdfobj {\pdfextension obj } + \protected\def\pdfcatalog {\pdfextension catalog } + \let\pdfoutput \outputmode +\fi +% \end{macrocode} +% +% \subsection{Check for recent \pdfTeX\ in PDF mode} +% +% Load package \xpackage{iftex} and check mode. +% \begin{macrocode} +\EmFi@RequirePackage{iftex}[2019/11/07] +\ifpdf +\else + \EmFi@Error{% + Missing pdfTeX in PDF mode% + }{% + Currently other drivers are not supported. % + Package loading is aborted.% + }% + \expandafter\EmFi@AtEnd +\fi% +% \end{macrocode} +% \begin{macrocode} +\EmFi@RequirePackage{pdftexcmds}[2007/11/11] +\EmFi@RequirePackage{ltxcmds}[2010/03/01] +\EmFi@RequirePackage{kvsetkeys}[2010/03/01] +\EmFi@RequirePackage{kvdefinekeys}[2010/03/01] +% \end{macrocode} +% Check version. +% \begin{macrocode} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname pdf@filesize\endcsname\relax + \EmFi@Error{% + Unsupported pdfTeX version% + }{% + At least version 1.30 is necessary. Package loading is aborted.% + }% + \expandafter\EmFi@AtEnd +\fi% +% \end{macrocode} +% +% \subsection{Strings} +% +% Minimal version of package \xpackage{pdfescape} is 2007/08/27 v1.5 +% because of \cs{EdefSanitize}. +% \begin{macrocode} +\EmFi@RequirePackage{pdfescape}[2007/11/11] +% \end{macrocode} +% +% \begin{macrocode} +\def\EmFi@temp#1{% + \expandafter\EdefSanitize\csname EmFi@S@#1\endcsname{#1}% +} +% \end{macrocode} +% \begin{macro}{\EmFi@details} +% \begin{macrocode} +\EmFi@temp{details}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@tile} +% \begin{macrocode} +\EmFi@temp{tile}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@hidden} +% \begin{macrocode} +\EmFi@temp{hidden}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@S@text} +% \begin{macrocode} +\EmFi@temp{text} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@S@date} +% \begin{macrocode} +\EmFi@temp{date} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@S@number} +% \begin{macrocode} +\EmFi@temp{number} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@S@file} +% \begin{macrocode} +\EmFi@temp{file} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@S@desc} +% \begin{macrocode} +\EmFi@temp{desc} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@S@afrelationship} +% \begin{macrocode} +\EmFi@temp{afrelationship} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@S@moddate} +% \begin{macrocode} +\EmFi@temp{moddate} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@S@creationdate} +% \begin{macrocode} +\EmFi@temp{creationdate} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@S@size} +% \begin{macrocode} +\EmFi@temp{size} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@S@ascending} +% \begin{macrocode} +\EmFi@temp{ascending} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@S@descending} +% \begin{macrocode} +\EmFi@temp{descending} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@S@true} +% \begin{macrocode} +\EmFi@temp{true} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@S@false} +% \begin{macrocode} +\EmFi@temp{false} +% \end{macrocode} +% \end{macro} +% +% \subsection{Switches} +% +% \begin{macro}{\ifEmFi@collection} +% \begin{macrocode} +\ltx@newif\ifEmFi@collection +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifEmFi@sort} +% \begin{macrocode} +\ltx@newif\ifEmFi@sort +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifEmFi@visible} +% \begin{macrocode} +\ltx@newif\ifEmFi@visible +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifEmFi@edit} +% \begin{macrocode} +\ltx@newif\ifEmFi@edit +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifEmFi@item} +% \begin{macrocode} +\ltx@newif\ifEmFi@item +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifEmFi@finished} +% \begin{macrocode} +\ltx@newif\ifEmFi@finished +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifEmFi@id} +% \begin{macrocode} +\ltx@newif\ifEmFi@id +% \end{macrocode} +% \end{macro} +% +% \subsection{Key value definitions} +% +% \begin{macro}{\EmFi@GlobalKey} +% \begin{macrocode} +\def\EmFi@GlobalKey#1#2{% + \global\expandafter\let\csname KV@#1@#2\expandafter\endcsname + \csname KV@#1@#2\endcsname +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@GlobalDefaultKey} +% \begin{macrocode} +\def\EmFi@GlobalDefaultKey#1#2{% + \EmFi@GlobalKey{#1}{#2}% + \global\expandafter\let + \csname KV@#1@#2@default\expandafter\endcsname + \csname KV@#1@#2@default\endcsname +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\EmFi@DefineKey} +% \begin{macrocode} +\def\EmFi@DefineKey#1#2{% + \kv@define@key{EmFi}{#1}{% + \expandafter\def\csname EmFi@#1\endcsname{##1}% + }% + \expandafter\def\csname EmFi@#1\endcsname{#2}% +} +% \end{macrocode} +% \end{macro} +% Subtype of the embedded file (optional). +% \begin{macrocode} +\EmFi@DefineKey{mimetype}{} +% \end{macrocode} +% File specification string. +% \begin{macrocode} +\EmFi@DefineKey{filespec}{\EmFi@file} +% \end{macrocode} +% File specification string in Unicode. +% \begin{macrocode} +\EmFi@DefineKey{ucfilespec}{} +% \end{macrocode} +% File system (optional). +% \begin{macrocode} +\EmFi@DefineKey{filesystem}{} +% \end{macrocode} +% Description (optional). +% \begin{macrocode} +\EmFi@DefineKey{desc}{} +% \end{macrocode} +% AFRelationship (mandatory for PDF/A-3 compliance). +% \begin{macrocode} +\EmFi@DefineKey{afrelationship}{} +% \end{macrocode} +% Method for converting text to PDF strings. +% \begin{macrocode} +\EmFi@DefineKey{stringmethod}{% + \ifx\pdfstringdef\@undefined + escape% + \else + \ifx\pdfstringdef\relax + escape% + \else + psd% + \fi + \fi +} +% \end{macrocode} +% +% Option \xoption{id} as key for object numbers. +% \begin{macrocode} +\kv@define@key{EmFi}{id}{% + \def\EmFi@id{#1}% + \EmFi@idtrue +} +% \end{macrocode} +% \begin{macro}{\EmFi@defobj} +% \begin{macrocode} +\def\EmFi@defobj#1{% + \ifEmFi@id + \expandafter\xdef\csname EmFi@#1@\EmFi@id\endcsname{% + \the\pdflastobj\ltx@space 0 R% + }% + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\embedfileifobjectexists} +% \begin{macrocode} +\def\embedfileifobjectexists#1#2{% + \expandafter\ifx\csname EmFi@#2@#1\endcsname\relax + \expandafter\ltx@secondoftwo + \else + \expandafter\ltx@firstoftwo + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\embedfilegetobject} +% \begin{macrocode} +\def\embedfilegetobject#1#2{% + \embedfileifobjectexists{#1}{#2}{% + \csname EmFi@#2@#1\endcsname + }{% + 0 0 R% + }% +} +% \end{macrocode} +% \end{macro} +% +% Initial view of the collection. +% \begin{macrocode} +\kv@define@key{EmFi}{view}[]{% + \EdefSanitize\EmFi@temp{#1}% + \def\EmFi@next{% + \global\EmFi@collectiontrue + }% + \ifx\EmFi@temp\ltx@empty + \let\EmFi@view\EmFi@S@details + \else\ifx\EmFi@temp\EmFi@S@details + \let\EmFi@view\EmFi@S@details + \else\ifx\EmFi@temp\EmFi@S@tile + \let\EmFi@view\EmFi@S@tile + \else\ifx\EmFi@temp\EmFi@S@hidden + \let\EmFi@view\EmFi@S@hidden + \else + \let\EmFi@next\relax + \EmFi@Error{% + Unknown value `\EmFi@temp' for key `view'.\MessageBreak + Supported values: `details', `tile', `hidden'.% + }\@ehc + \fi\fi\fi\fi + \EmFi@next +} +% \end{macrocode} +% \begin{macrocode} +\EmFi@DefineKey{initialfile}{} +% \end{macrocode} +% +% \begin{macro}{\embedfilesetup} +% \begin{macrocode} +\def\embedfilesetup{% + \ifEmFi@finished + \def\EmFi@next##1{}% + \EmFi@Error{% + \string\embedfilefield\ltx@space after \string\embedfilefinish + }{% + The list of embedded files is already written.% + }% + \else + \def\EmFi@next{% + \kvsetkeys{EmFi}% + }% + \fi + \EmFi@next +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\EmFi@schema} +% \begin{macrocode} +\def\EmFi@schema{} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@order} +% \begin{macrocode} +\gdef\EmFi@order{0} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@@order} +% \begin{macrocode} +\let\EmFi@@order\relax +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@fieldlist} +% \begin{macrocode} +\def\EmFi@fieldlist{} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@sortcase} +% \begin{macrocode} +\def\EmFi@sortcase{0}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\embedfilefield} +% \begin{macrocode} +\def\embedfilefield#1#2{% + \ifEmFi@finished + \EmFi@Error{% + \string\embedfilefield\ltx@space after \string\embedfilefinish + }{% + The list of embedded files is already written.% + }% + \else + \global\EmFi@collectiontrue + \EdefSanitize\EmFi@key{#1}% + \expandafter\ifx\csname KV@EmFi@\EmFi@key.prefix\endcsname\relax + \begingroup + \count@=\EmFi@order + \advance\count@ 1 % + \xdef\EmFi@order{\the\count@}% + \let\EmFi@title\EmFi@key + \let\EmFi@type\EmFi@S@text + \EmFi@visibletrue + \EmFi@editfalse + \kvsetkeys{EmFiFi}{#2}% + \EmFi@convert\EmFi@title\EmFi@title + \xdef\EmFi@schema{% + \EmFi@schema + /\pdf@escapename{\EmFi@key}<<% + /Subtype/% + \ifx\EmFi@type\EmFi@S@date D% + \else\ifx\EmFi@type\EmFi@S@number N% + \else\ifx\EmFi@type\EmFi@S@file F% + \else\ifx\EmFi@type\EmFi@S@desc Desc% + \else\ifx\EmFi@type\EmFi@S@afrelationship AFRelationship% + \else\ifx\EmFi@type\EmFi@S@moddate ModDate% + \else\ifx\EmFi@type\EmFi@S@creationdate CreationDate% + \else\ifx\EmFi@type\EmFi@S@size Size% + \else S% + \fi\fi\fi\fi\fi\fi\fi + /N(\EmFi@title)% + \EmFi@@order{\EmFi@order}% + \ifEmFi@visible + \else + /V false% + \fi + \ifEmFi@edit + /E true% + \fi + >>% + }% + \let\do\relax + \xdef\EmFi@fieldlist{% + \EmFi@fieldlist + \do{\EmFi@key}% + }% + \ifx\EmFi@type\EmFi@S@text + \kv@define@key{EmFi}{\EmFi@key.value}{% + \EmFi@itemtrue + \def\EmFi@temp{##1}% + \EmFi@convert\EmFi@temp\EmFi@temp + \expandafter\def\csname EmFi@V@#1% + \expandafter\endcsname\expandafter{% + \expandafter(\EmFi@temp)% + }% + }% + \EmFi@GlobalKey{EmFi}{\EmFi@key.value}% + \else\ifx\EmFi@type\EmFi@S@date + \kv@define@key{EmFi}{\EmFi@key.value}{% + \EmFi@itemtrue + \def\EmFi@temp{##1}% + \EmFi@convert\EmFi@temp\EmFi@temp + \expandafter\def\csname EmFi@V@#1% + \expandafter\endcsname\expandafter{% + \expandafter(\EmFi@temp)% + }% + }% + \EmFi@GlobalKey{EmFi}{\EmFi@key.value}% + \else\ifx\EmFi@type\EmFi@S@number + \kv@define@key{EmFi}{\EmFi@key.value}{% + \EmFi@itemtrue + \expandafter\EdefSanitize\csname EmFi@V@#1\endcsname{ ##1}% + }% + \EmFi@GlobalKey{EmFi}{\EmFi@key.value}% + \fi\fi\fi + \kv@define@key{EmFi}{\EmFi@key.prefix}{% + \EmFi@itemtrue + \expandafter\def\csname EmFi@P@#1\endcsname{##1}% + }% + \EmFi@GlobalKey{EmFi}{\EmFi@key.prefix}% + \kv@define@key{EmFiSo}{\EmFi@key}[ascending]{% + \EdefSanitize\EmFi@temp{##1}% + \ifx\EmFi@temp\EmFi@S@ascending + \def\EmFi@temp{true}% + \else\ifx\EmFi@temp\EmFi@S@descending + \def\EmFi@temp{false}% + \else + \def\EmFi@temp{}% + \EmFi@Error{% + Unknown sort order `\EmFi@temp'.\MessageBreak + Supported values: `\EmFi@S@ascending', % + `\EmFi@S@descending + }\@ehc + \fi\fi + \ifx\EmFi@temp\ltx@empty + \else + \xdef\EmFi@sortkeys{% + \EmFi@sortkeys + /\pdf@escapename{#1}% + }% + \ifx\EmFi@sortorders\ltx@empty + \global\let\EmFi@sortorders\EmFi@temp + \gdef\EmFi@sortcase{1}% + \else + \xdef\EmFi@sortorders{% + \EmFi@sortorders + \ltx@space + \EmFi@temp + }% + \xdef\EmFi@sortcase{2}% + \fi + \fi + }% + \EmFi@GlobalDefaultKey{EmFiSo}\EmFi@key + \endgroup + \else + \EmFi@Error{% + Field `\EmFi@key' is already defined% + }\@ehc + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\kv@define@key{EmFiFi}{type}{% + \EdefSanitize\EmFi@temp{#1}% + \ifx\EmFi@temp\EmFi@S@text + \let\EmFi@type\EmFi@temp + \else\ifx\EmFi@temp\EmFi@S@date + \let\EmFi@type\EmFi@temp + \else\ifx\EmFi@temp\EmFi@S@number + \let\EmFi@type\EmFi@temp + \else\ifx\EmFi@temp\EmFi@S@file + \let\EmFi@type\EmFi@temp + \else\ifx\EmFi@temp\EmFi@S@desc + \let\EmFi@type\EmFi@temp + \else\ifx\EmFi@temp\EmFi@S@afrelationship + \let\EmFi@type\EmFi@temp + \else\ifx\EmFi@temp\EmFi@S@moddate + \let\EmFi@type\EmFi@temp + \else\ifx\EmFi@temp\EmFi@S@creationdate + \let\EmFi@type\EmFi@temp + \else\ifx\EmFi@temp\EmFi@S@size + \let\EmFi@type\EmFi@temp + \else + \EmFi@Error{% + Unknown type `\EmFi@temp'.\MessageBreak + Supported types: `text', `date', `number', `file',\MessageBreak + `desc', `afrelationship', `moddate', `creationdate', `size'% + }% + \fi\fi\fi\fi\fi\fi\fi\fi\fi +} +% \end{macrocode} +% \begin{macrocode} +\kv@define@key{EmFiFi}{title}{% + \def\EmFi@title{#1}% +} +% \end{macrocode} +% \begin{macro}{\EmFi@setboolean} +% \begin{macrocode} +\def\EmFi@setboolean#1#2{% + \EdefSanitize\EmFi@temp{#2}% + \ifx\EmFi@temp\EmFi@S@true + \csname EmFi@#1true\endcsname + \else + \ifx\EmFi@temp\EmFi@S@false + \csname EmFi@#1false\endcsname + \else + \EmFi@Error{% + Unknown value `\EmFi@temp' for key `#1'.\MessageBreak + Supported values: `true', `false'% + }\@ehc + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\kv@define@key{EmFiFi}{visible}[true]{% + \EmFi@setboolean{visible}{#1}% +} +% \end{macrocode} +% \begin{macrocode} +\kv@define@key{EmFiFi}{edit}[true]{% + \EmFi@setboolean{edit}{#1}% +} +% \end{macrocode} +% +% \begin{macro}{\EmFi@sortkeys} +% \begin{macrocode} +\def\EmFi@sortkeys{} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@sortorders} +% \begin{macrocode} +\def\EmFi@sortorders{} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\embedfilesort} +% \begin{macrocode} +\def\embedfilesort{% + \kvsetkeys{EmFiSo}% +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Embed the file} +% +% \begin{macro}{\embedfile} +% \begin{macrocode} +\def\embedfile{% + \ltx@ifnextchar[\EmFi@embedfile{\EmFi@embedfile[]}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@embedfile} +% \begin{macrocode} +\def\EmFi@embedfile[#1]#2{% + \ifEmFi@finished + \EmFi@Error{% + \string\embedfile\ltx@space after \string\embedfilefinish + }{% + The list of embedded files is already written.% + }% + \else + \begingroup + \def\EmFi@file{#2}% + \kvsetkeys{EmFi}{#1}% + \expandafter\expandafter\expandafter + \ifx\expandafter\expandafter\expandafter + \\\pdf@filesize{\EmFi@file}\\% + \EmFi@Error{% + File `\EmFi@file' not found% + }{% + The unknown file is not embedded.% + }% + \else + \edef\EmFi@@filespec{% + \pdf@escapestring{\EmFi@filespec}% + }% + \ifx\EmFi@ucfilespec\ltx@empty + \let\EmFi@@ucfilespec\ltx@empty + \else + \EmFi@convert\EmFi@ucfilespec\EmFi@@ucfilespec + \fi + \ifx\EmFi@desc\ltx@empty + \let\EmFi@@desc\ltx@empty + \else + \EmFi@convert\EmFi@desc\EmFi@@desc + \fi + \ifx\EmFi@afrelationship\ltx@empty + \let\EmFi@@afrelationship\ltx@empty + \else + \EmFi@convert\EmFi@afrelationship\EmFi@@afrelationship + \fi + \ifEmFi@item + \let\do\EmFi@do + \immediate\pdfobj{% + <<% + \EmFi@fieldlist + >>% + }% + \edef\EmFi@ci{\the\pdflastobj}% + \fi + \immediate\pdfobj stream attr{% + /Type/EmbeddedFile% + \ifx\EmFi@mimetype\ltx@empty + \else + /Subtype/\pdf@escapename{\EmFi@mimetype}% + \fi + /Params<<% + /ModDate(\pdf@filemoddate{\EmFi@file})% + /Size \pdf@filesize{\EmFi@file}% + /CheckSum<\pdf@filemdfivesum{\EmFi@file}>% + >>% + }file{\EmFi@file}\relax + \EmFi@defobj{EmbeddedFile}% + \immediate\pdfobj{% + <<% + /Type/Filespec% + \ifx\EmFi@filesystem\ltx@empty + \else + /FS/\pdf@escapename{\EmFi@filesystem}% + \fi + /F(\EmFi@@filespec)% + \ifx\EmFi@@ucfilespec\ltx@empty + \else + /UF(\EmFi@@ucfilespec)% + \fi + \ifx\EmFi@@desc\ltx@empty + \else + /Desc(\EmFi@@desc)% + \fi + \ifx\EmFi@@afrelationship\ltx@empty + \else + /AFRelationship\EmFi@@afrelationship% + \fi + /EF<<% + /F \the\pdflastobj\ltx@space 0 R% + >>% + \ifEmFi@item + /CI \EmFi@ci\ltx@space 0 R% + \fi + >>% + }% + \EmFi@defobj{Filespec}% + \EmFi@add{% + \EmFi@@filespec + }{\the\pdflastobj\ltx@space 0 R}% + \fi + \endgroup + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@do} +% \begin{macrocode} +\def\EmFi@do#1{% + \expandafter\ifx\csname EmFi@P@#1\endcsname\relax + \expandafter\ifx\csname EmFi@V@#1\endcsname\relax + \else + /\pdf@escapename{#1}\csname EmFi@V@#1\endcsname + \fi + \else + /\pdf@escapename{#1}<<% + \expandafter\ifx\csname EmFi@V@#1\endcsname\relax + \else + /D\csname EmFi@V@#1\endcsname + \fi + /P(\csname EmFi@P@#1\endcsname)% + >>% + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\EmFi@convert} +% \begin{macrocode} +\def\EmFi@convert#1#2{% + \ifnum\pdf@strcmp{\EmFi@stringmethod}{psd}=0 % + \pdfstringdef\EmFi@temp{#1}% + \let#2\EmFi@temp + \else + \edef#2{\pdf@escapestring{#1}}% + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\global\let\EmFi@list\ltx@empty +% \end{macrocode} +% \begin{macro}{\EmFi@add} +% Sorting is done by the insertion sort algorithm. +% Probably the sorting could be done more reliable. +% However, the PDF specification is not too clear to me +% regarding precise sorting rules (how to deal with +% different encodings, escaped characters, \dots). +% \begin{macrocode} +\def\EmFi@add#1#2{% + \begingroup + \ifx\EmFi@list\ltx@empty + \xdef\EmFi@list{\noexpand\do{#1}{#2}}% + \else + \def\do##1##2{% + \ifnum\pdf@strcmp{##1}{#1}>0 % + \edef\x{% + \toks@{% + \the\toks@% + \noexpand\do{#1}{#2}% + \noexpand\do{##1}{##2}% + }% + }% + \x + \def\do####1####2{% + \toks@\expandafter{\the\toks@\do{####1}{####2}}% + }% + \def\stop{% + \xdef\EmFi@list{\the\toks@}% + }% + \else + \toks@\expandafter{\the\toks@\do{##1}{##2}}% + \fi + }% + \def\stop{% + \xdef\EmFi@list{\the\toks@\noexpand\do{#1}{#2}}% + }% + \toks@{}% + \EmFi@list\stop + \fi + \endgroup +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\embedfilefinish} +% \begin{macrocode} +\def\embedfilefinish{% + \ifEmFi@finished + \EmFi@Error{% + Too many invocations of \string\embedfilefinish + }{% + The list of embedded files is already written.% + }% + \else + \ifx\EmFi@list\ltx@empty + \else +% \end{macrocode} +% Write |/EmbeddedFiles| entry. +% \begin{macrocode} + \global\EmFi@finishedtrue + \begingroup + \def\do##1##2{% + (##1)##2% + }% + \immediate\pdfobj{% + <<% + /Names[\EmFi@list]% + >>% + }% + \pdfnames{% + /EmbeddedFiles \the\pdflastobj\ltx@space 0 R% + }% + \endgroup + \begingroup + \def\do##1##2{% + \ltx@space##2% + }% + \immediate\pdfobj{% + [\EmFi@list]% + }% + \pdfcatalog{% + /AF \the\pdflastobj\ltx@space 0 R% + }% + \endgroup +% \end{macrocode} +% Write collection objects. +% \begin{macrocode} + \ifx\EmFi@initialfile\ltx@empty + \else + \EmFi@collectiontrue + \fi + \ifEmFi@collection + \ifx\EmFi@initialfile\ltx@empty + \let\EmFi@@initialfile\ltx@empty + \else + \edef\EmFi@@initialfile{% + \pdf@escapestring{\EmFi@initialfile}% + }% + \fi +% \end{macrocode} +% Look for initial file among the embedded files. +% \begin{macrocode} + \begingroup + \let\f=N% + \def\do##1##2{% + \def\x{##1}% + \ifx\x\EmFi@@initialfile + \let\f=Y% + \let\do\ltx@gobbletwo + \fi + }% + \EmFi@list + \expandafter\endgroup + \ifx\f Y% + \else + \@PackageWarningNoLine{embedfile}{% + Missing initial file `\EmFi@initialfile'\MessageBreak + among the embedded files% + }% + \let\EmFi@initialfile\ltx@empty + \let\EmFi@@initialfile\ltx@empty + \fi + \ifcase\EmFi@sortcase + \def\EmFi@temp{}% + \or + \def\EmFi@temp{% + /S\EmFi@sortkeys + /A \EmFi@sortorders + }% + \else + \def\EmFi@temp{% + /S[\EmFi@sortkeys]% + /A[\EmFi@sortorders]% + }% + \fi + \def\EmFi@@order##1{% + \ifnum\EmFi@order>1 % + /O ##1% + \fi + }% + \immediate\pdfobj{% + <<% + \ifx\EmFi@schema\ltx@empty + \else + /Schema<<\EmFi@schema>>% + \fi + \ifx\EmFi@@initialfile\ltx@empty + \else + /D(\EmFi@@initialfile)% + \fi + \ifx\EmFi@view\EmFi@S@tile + /View/T% + \else\ifx\EmFi@view\EmFi@S@hidden + /View/H% + \fi\fi + \ifx\EmFi@temp\ltx@empty + \EmFi@temp + \else + /Sort<<\EmFi@temp>>% + \fi + >>% + }% + \pdfcatalog{% + /Collection \the\pdflastobj\ltx@space0 R% + }% + \fi + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname AtEndDocument\endcsname\relax +\else + \AtEndDocument{\embedfilefinish}% +\fi +% \end{macrocode} +% +% \begin{macrocode} +\EmFi@AtEnd% +%</package> +% \end{macrocode} +% \section{Installation} +% +% \subsection{Download} +% +% \paragraph{Package.} This package is available on +% CTAN\footnote{\CTANpkg{embedfile}}: +% \begin{description} +% \item[\CTAN{macros/latex/contrib/embedfile/embedfile.dtx}] The source file. +% \item[\CTAN{macros/latex/contrib/embedfile/embedfile.pdf}] Documentation. +% \end{description} +% +% +% \paragraph{Bundle.} All the packages of the bundle `embedfile' +% 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/embedfile.tds.zip}] +% \end{description} +% \emph{TDS} refers to the standard ``A Directory Structure +% for \TeX\ Files'' (\CTANpkg{tds}). Directories +% with \xfile{texmf} in their name are usually organized this way. +% +% \subsection{Bundle installation} +% +% \paragraph{Unpacking.} Unpack the \xfile{embedfile.tds.zip} in the +% TDS tree (also known as \xfile{texmf} tree) of your choice. +% Example (linux): +% \begin{quote} +% |unzip embedfile.tds.zip -d ~/texmf| +% \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 embedfile.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@{}} +% embedfile.sty & tex/generic/embedfile/embedfile.sty\\ +% dtx-attach.sty & tex/generic/embedfile/dtx-attach.sty\\ +% embedfile.pdf & doc/latex/embedfile/embedfile.pdf\\ +% embedfile-example-plain.tex & doc/latex/embedfile/embedfile-example-plain.tex\\ +% embedfile-example-collection.tex & doc/latex/embedfile/embedfile-example-collection.tex\\ +% embedfile.dtx & source/latex/embedfile/embedfile.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 +% (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh +% these. For example, \TeX\,Live\ users run \verb|texhash| or +% \verb|mktexlsr|. +% +% \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{embedfile.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 embedfile.dtx +%makeindex -s gind.ist embedfile.idx +%pdflatex embedfile.dtx +%makeindex -s gind.ist embedfile.idx +%pdflatex embedfile.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{attachfile2} +% Heiko Oberdiek: \textit{The \xpackage{attachfile2} package}; +% 2006/08/16 v2.2; +% \CTANpkg{attachfile2}. +% +% \bibitem{pdfspec} +% Adobe Systems Incorporated: +% \href{http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference.pdf}% +% {\textit{PDF Reference, Sixth Edition, Version 1.7}},% +% Oktober 2006; +% \url{http://www.adobe.com/devnet/pdf/pdf_reference.html}. +% +% \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}{2006/08/16 v1.0} +% \item +% First public version. +% \end{Version} +% \begin{Version}{2007/04/11 v1.1} +% \item +% Line ends sanitized. +% \end{Version} +% \begin{Version}{2007/09/09 v1.2} +% \item +% Fixes for plain-TeX, wrapper for package \xpackage{keyval} added. +% \item +% Catcode section rewritten. +% \end{Version} +% \begin{Version}{2007/10/28 v2.0} +% \item +% Collection support added (PDF 1.7). +% \end{Version} +% \begin{Version}{2007/10/29 v2.1} +% \item +% Export of object references by adding new option \xoption{id} and +% new macros \cs{embedfileifobjectexists} and \cs{embedfilegetobject}. +% \end{Version} +% \begin{Version}{2007/11/11 v2.2} +% \item +% Use of package \xpackage{pdftexcmds} for \LuaTeX\ support. +% \end{Version} +% \begin{Version}{2007/11/25 v2.3} +% \item +% Fix in use of \cs{pdf@filesize}, bug introduced in previous version. +% \end{Version} +% \begin{Version}{2009/09/25 v2.4} +% \item +% Bug fix: If \xpackage{hyperref} is used with option \xoption{unicode}, +% the Unicode encoded file name causes trouble. Therefore \cs{pdfstringdef} +% is now never used for option \xoption{filespec}, always method +% \texttt{escape} is applied (Peter Cibulka). +% \item +% Bug fix for \xoption{initialfile}. +% \item +% Bug fix for file names in \texttt{/EmbeddedFiles}. +% \item +% New option \xoption{ucfilespec} for file name support in Unicode +% (since PDF 1.7). +% \end{Version} +% \begin{Version}{2010/03/01 v2.5} +% \item +% Compatibility for \iniTeX. +% \item +% Package \xpackage{keyval} replaced by packages \xpackage{kvsetkeys} +% and \xpackage{kvdefinekeys} because of compatibility for \iniTeX. +% \item +% TDS location moved from TDS:tex/latex/oberdiek/embedfile.sty to +% TDS:tex/generic/oberdiek/embedfile.sty. +% \end{Version} +% \begin{Version}{2011/04/13 v2.6} +% \item +% Docu fixes (thanks Hans-Martin M\"unch). +% \end{Version} +% \begin{Version}{2016/05/15 v2.7} +% \item +% LuaTeX compatibility +% \end{Version} +% \begin{Version}{2018/11/01 v2.8} +% \item +% Remove luatex85 package depenency. +% \end{Version} +% \begin{Version}{2019/12/03 v2.9} +% \item +% add \verb|/AF| and \verb|/AFrelationship| keys (Andreas Karrenbauer) +% \item +% add \verb|\pdfcatalog| emulation for Lua\TeX. +% \item +% update to use \xpackage{iftex} +% \end{Version} +% \end{History} +% +% \PrintIndex +% +% \Finale +\endinput diff --git a/Master/texmf-dist/tex/generic/embedfile/embedfile.sty b/Master/texmf-dist/tex/generic/embedfile/embedfile.sty new file mode 100644 index 00000000000..86e58515f18 --- /dev/null +++ b/Master/texmf-dist/tex/generic/embedfile/embedfile.sty @@ -0,0 +1,792 @@ +%% +%% This is file `embedfile.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% embedfile.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% Project: embedfile +%% Version: 2019/12/03 v2.9 +%% +%% Copyright (C) +%% 2006-2011 Heiko Oberdiek +%% 2016-2019 Oberdiek Package Support Group +%% +%% 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/embedfile/issues +%% +%% +%% The Base Interpreter refers to any `TeX-Format', +%% because some files are installed in TDS:tex/generic//. +%% +%% This work consists of the main source file embedfile.dtx +%% and the derived files +%% embedfile.sty, embedfile.pdf, embedfile.ins, embedfile.drv, +%% dtx-attach.sty, embedfile-example-plain.tex, +%% embedfile-example-collection.tex, embedfile-test1.tex, +%% embedfile-test2.tex, embedfile-test3.tex, +%% embedfile-test4.tex. +%% +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode35=6 % # + \catcode39=12 % ' + \catcode44=12 % , + \catcode45=12 % - + \catcode46=12 % . + \catcode58=12 % : + \catcode64=11 % @ + \catcode123=1 % { + \catcode125=2 % } + \expandafter\let\expandafter\x\csname ver@embedfile.sty\endcsname + \ifx\x\relax % plain-TeX, first loading + \else + \def\empty{}% + \ifx\x\empty % LaTeX, first loading, + % variable is initialized, but \ProvidesPackage not yet seen + \else + \expandafter\ifx\csname PackageInfo\endcsname\relax + \def\x#1#2{% + \immediate\write-1{Package #1 Info: #2.}% + }% + \else + \def\x#1#2{\PackageInfo{#1}{#2, stopped}}% + \fi + \x{embedfile}{The package is already loaded}% + \aftergroup\endinput + \fi + \fi +\endgroup% +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode35=6 % # + \catcode39=12 % ' + \catcode40=12 % ( + \catcode41=12 % ) + \catcode44=12 % , + \catcode45=12 % - + \catcode46=12 % . + \catcode47=12 % / + \catcode58=12 % : + \catcode64=11 % @ + \catcode91=12 % [ + \catcode93=12 % ] + \catcode123=1 % { + \catcode125=2 % } + \expandafter\ifx\csname ProvidesPackage\endcsname\relax + \def\x#1#2#3[#4]{\endgroup + \immediate\write-1{Package: #3 #4}% + \xdef#1{#4}% + }% + \else + \def\x#1#2[#3]{\endgroup + #2[{#3}]% + \ifx#1\@undefined + \xdef#1{#3}% + \fi + \ifx#1\relax + \xdef#1{#3}% + \fi + }% + \fi +\expandafter\x\csname ver@embedfile.sty\endcsname +\ProvidesPackage{embedfile}% + [2019/12/03 v2.9 Embed files into PDF (HO)]% +\begingroup\catcode61\catcode48\catcode32=10\relax% + \catcode13=5 % ^^M + \endlinechar=13 % + \catcode123=1 % { + \catcode125=2 % } + \catcode64=11 % @ + \def\x{\endgroup + \expandafter\edef\csname EmFi@AtEnd\endcsname{% + \endlinechar=\the\endlinechar\relax + \catcode13=\the\catcode13\relax + \catcode32=\the\catcode32\relax + \catcode35=\the\catcode35\relax + \catcode61=\the\catcode61\relax + \catcode64=\the\catcode64\relax + \catcode123=\the\catcode123\relax + \catcode125=\the\catcode125\relax + }% + }% +\x\catcode61\catcode48\catcode32=10\relax% +\catcode13=5 % ^^M +\endlinechar=13 % +\catcode35=6 % # +\catcode64=11 % @ +\catcode123=1 % { +\catcode125=2 % } +\def\TMP@EnsureCode#1#2{% + \edef\EmFi@AtEnd{% + \EmFi@AtEnd + \catcode#1=\the\catcode#1\relax + }% + \catcode#1=#2\relax +} +\TMP@EnsureCode{39}{12}% ' +\TMP@EnsureCode{40}{12}% ( +\TMP@EnsureCode{41}{12}% ) +\TMP@EnsureCode{44}{12}% , +\TMP@EnsureCode{46}{12}% . +\TMP@EnsureCode{47}{12}% / +\TMP@EnsureCode{58}{12}% : +\TMP@EnsureCode{60}{12}% < +\TMP@EnsureCode{62}{12}% > +\TMP@EnsureCode{91}{12}% [ +\TMP@EnsureCode{93}{12}% ] +\TMP@EnsureCode{96}{12}% ` +\edef\EmFi@AtEnd{\EmFi@AtEnd\noexpand\endinput} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname RequirePackage\endcsname\relax + \def\EmFi@RequirePackage#1[#2]{% + \input #1.sty\relax + }% +\else + \let\EmFi@RequirePackage\RequirePackage +\fi +\EmFi@RequirePackage{infwarerr}[2007/09/09]% +\def\EmFi@Error{% + \@PackageError{embedfile}% +} +\ifx\pdfextension\@undefined\else + \protected\def\pdflastobj {\numexpr\pdffeedback lastobj\relax} + \protected\def\pdfnames {\pdfextension names } + \protected\def\pdfobj {\pdfextension obj } + \protected\def\pdfcatalog {\pdfextension catalog } + \let\pdfoutput \outputmode +\fi +\EmFi@RequirePackage{iftex}[2019/11/07] +\ifpdf +\else + \EmFi@Error{% + Missing pdfTeX in PDF mode% + }{% + Currently other drivers are not supported. % + Package loading is aborted.% + }% + \expandafter\EmFi@AtEnd +\fi% +\EmFi@RequirePackage{pdftexcmds}[2007/11/11] +\EmFi@RequirePackage{ltxcmds}[2010/03/01] +\EmFi@RequirePackage{kvsetkeys}[2010/03/01] +\EmFi@RequirePackage{kvdefinekeys}[2010/03/01] +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname pdf@filesize\endcsname\relax + \EmFi@Error{% + Unsupported pdfTeX version% + }{% + At least version 1.30 is necessary. Package loading is aborted.% + }% + \expandafter\EmFi@AtEnd +\fi% +\EmFi@RequirePackage{pdfescape}[2007/11/11] +\def\EmFi@temp#1{% + \expandafter\EdefSanitize\csname EmFi@S@#1\endcsname{#1}% +} +\EmFi@temp{details}% +\EmFi@temp{tile}% +\EmFi@temp{hidden}% +\EmFi@temp{text} +\EmFi@temp{date} +\EmFi@temp{number} +\EmFi@temp{file} +\EmFi@temp{desc} +\EmFi@temp{afrelationship} +\EmFi@temp{moddate} +\EmFi@temp{creationdate} +\EmFi@temp{size} +\EmFi@temp{ascending} +\EmFi@temp{descending} +\EmFi@temp{true} +\EmFi@temp{false} +\ltx@newif\ifEmFi@collection +\ltx@newif\ifEmFi@sort +\ltx@newif\ifEmFi@visible +\ltx@newif\ifEmFi@edit +\ltx@newif\ifEmFi@item +\ltx@newif\ifEmFi@finished +\ltx@newif\ifEmFi@id +\def\EmFi@GlobalKey#1#2{% + \global\expandafter\let\csname KV@#1@#2\expandafter\endcsname + \csname KV@#1@#2\endcsname +} +\def\EmFi@GlobalDefaultKey#1#2{% + \EmFi@GlobalKey{#1}{#2}% + \global\expandafter\let + \csname KV@#1@#2@default\expandafter\endcsname + \csname KV@#1@#2@default\endcsname +} +\def\EmFi@DefineKey#1#2{% + \kv@define@key{EmFi}{#1}{% + \expandafter\def\csname EmFi@#1\endcsname{##1}% + }% + \expandafter\def\csname EmFi@#1\endcsname{#2}% +} +\EmFi@DefineKey{mimetype}{} +\EmFi@DefineKey{filespec}{\EmFi@file} +\EmFi@DefineKey{ucfilespec}{} +\EmFi@DefineKey{filesystem}{} +\EmFi@DefineKey{desc}{} +\EmFi@DefineKey{afrelationship}{} +\EmFi@DefineKey{stringmethod}{% + \ifx\pdfstringdef\@undefined + escape% + \else + \ifx\pdfstringdef\relax + escape% + \else + psd% + \fi + \fi +} +\kv@define@key{EmFi}{id}{% + \def\EmFi@id{#1}% + \EmFi@idtrue +} +\def\EmFi@defobj#1{% + \ifEmFi@id + \expandafter\xdef\csname EmFi@#1@\EmFi@id\endcsname{% + \the\pdflastobj\ltx@space 0 R% + }% + \fi +} +\def\embedfileifobjectexists#1#2{% + \expandafter\ifx\csname EmFi@#2@#1\endcsname\relax + \expandafter\ltx@secondoftwo + \else + \expandafter\ltx@firstoftwo + \fi +} +\def\embedfilegetobject#1#2{% + \embedfileifobjectexists{#1}{#2}{% + \csname EmFi@#2@#1\endcsname + }{% + 0 0 R% + }% +} +\kv@define@key{EmFi}{view}[]{% + \EdefSanitize\EmFi@temp{#1}% + \def\EmFi@next{% + \global\EmFi@collectiontrue + }% + \ifx\EmFi@temp\ltx@empty + \let\EmFi@view\EmFi@S@details + \else\ifx\EmFi@temp\EmFi@S@details + \let\EmFi@view\EmFi@S@details + \else\ifx\EmFi@temp\EmFi@S@tile + \let\EmFi@view\EmFi@S@tile + \else\ifx\EmFi@temp\EmFi@S@hidden + \let\EmFi@view\EmFi@S@hidden + \else + \let\EmFi@next\relax + \EmFi@Error{% + Unknown value `\EmFi@temp' for key `view'.\MessageBreak + Supported values: `details', `tile', `hidden'.% + }\@ehc + \fi\fi\fi\fi + \EmFi@next +} +\EmFi@DefineKey{initialfile}{} +\def\embedfilesetup{% + \ifEmFi@finished + \def\EmFi@next##1{}% + \EmFi@Error{% + \string\embedfilefield\ltx@space after \string\embedfilefinish + }{% + The list of embedded files is already written.% + }% + \else + \def\EmFi@next{% + \kvsetkeys{EmFi}% + }% + \fi + \EmFi@next +} +\def\EmFi@schema{} +\gdef\EmFi@order{0} +\let\EmFi@@order\relax +\def\EmFi@fieldlist{} +\def\EmFi@sortcase{0}% +\def\embedfilefield#1#2{% + \ifEmFi@finished + \EmFi@Error{% + \string\embedfilefield\ltx@space after \string\embedfilefinish + }{% + The list of embedded files is already written.% + }% + \else + \global\EmFi@collectiontrue + \EdefSanitize\EmFi@key{#1}% + \expandafter\ifx\csname KV@EmFi@\EmFi@key.prefix\endcsname\relax + \begingroup + \count@=\EmFi@order + \advance\count@ 1 % + \xdef\EmFi@order{\the\count@}% + \let\EmFi@title\EmFi@key + \let\EmFi@type\EmFi@S@text + \EmFi@visibletrue + \EmFi@editfalse + \kvsetkeys{EmFiFi}{#2}% + \EmFi@convert\EmFi@title\EmFi@title + \xdef\EmFi@schema{% + \EmFi@schema + /\pdf@escapename{\EmFi@key}<<% + /Subtype/% + \ifx\EmFi@type\EmFi@S@date D% + \else\ifx\EmFi@type\EmFi@S@number N% + \else\ifx\EmFi@type\EmFi@S@file F% + \else\ifx\EmFi@type\EmFi@S@desc Desc% + \else\ifx\EmFi@type\EmFi@S@afrelationship AFRelationship% + \else\ifx\EmFi@type\EmFi@S@moddate ModDate% + \else\ifx\EmFi@type\EmFi@S@creationdate CreationDate% + \else\ifx\EmFi@type\EmFi@S@size Size% + \else S% + \fi\fi\fi\fi\fi\fi\fi + /N(\EmFi@title)% + \EmFi@@order{\EmFi@order}% + \ifEmFi@visible + \else + /V false% + \fi + \ifEmFi@edit + /E true% + \fi + >>% + }% + \let\do\relax + \xdef\EmFi@fieldlist{% + \EmFi@fieldlist + \do{\EmFi@key}% + }% + \ifx\EmFi@type\EmFi@S@text + \kv@define@key{EmFi}{\EmFi@key.value}{% + \EmFi@itemtrue + \def\EmFi@temp{##1}% + \EmFi@convert\EmFi@temp\EmFi@temp + \expandafter\def\csname EmFi@V@#1% + \expandafter\endcsname\expandafter{% + \expandafter(\EmFi@temp)% + }% + }% + \EmFi@GlobalKey{EmFi}{\EmFi@key.value}% + \else\ifx\EmFi@type\EmFi@S@date + \kv@define@key{EmFi}{\EmFi@key.value}{% + \EmFi@itemtrue + \def\EmFi@temp{##1}% + \EmFi@convert\EmFi@temp\EmFi@temp + \expandafter\def\csname EmFi@V@#1% + \expandafter\endcsname\expandafter{% + \expandafter(\EmFi@temp)% + }% + }% + \EmFi@GlobalKey{EmFi}{\EmFi@key.value}% + \else\ifx\EmFi@type\EmFi@S@number + \kv@define@key{EmFi}{\EmFi@key.value}{% + \EmFi@itemtrue + \expandafter\EdefSanitize\csname EmFi@V@#1\endcsname{ ##1}% + }% + \EmFi@GlobalKey{EmFi}{\EmFi@key.value}% + \fi\fi\fi + \kv@define@key{EmFi}{\EmFi@key.prefix}{% + \EmFi@itemtrue + \expandafter\def\csname EmFi@P@#1\endcsname{##1}% + }% + \EmFi@GlobalKey{EmFi}{\EmFi@key.prefix}% + \kv@define@key{EmFiSo}{\EmFi@key}[ascending]{% + \EdefSanitize\EmFi@temp{##1}% + \ifx\EmFi@temp\EmFi@S@ascending + \def\EmFi@temp{true}% + \else\ifx\EmFi@temp\EmFi@S@descending + \def\EmFi@temp{false}% + \else + \def\EmFi@temp{}% + \EmFi@Error{% + Unknown sort order `\EmFi@temp'.\MessageBreak + Supported values: `\EmFi@S@ascending', % + `\EmFi@S@descending + }\@ehc + \fi\fi + \ifx\EmFi@temp\ltx@empty + \else + \xdef\EmFi@sortkeys{% + \EmFi@sortkeys + /\pdf@escapename{#1}% + }% + \ifx\EmFi@sortorders\ltx@empty + \global\let\EmFi@sortorders\EmFi@temp + \gdef\EmFi@sortcase{1}% + \else + \xdef\EmFi@sortorders{% + \EmFi@sortorders + \ltx@space + \EmFi@temp + }% + \xdef\EmFi@sortcase{2}% + \fi + \fi + }% + \EmFi@GlobalDefaultKey{EmFiSo}\EmFi@key + \endgroup + \else + \EmFi@Error{% + Field `\EmFi@key' is already defined% + }\@ehc + \fi + \fi +} +\kv@define@key{EmFiFi}{type}{% + \EdefSanitize\EmFi@temp{#1}% + \ifx\EmFi@temp\EmFi@S@text + \let\EmFi@type\EmFi@temp + \else\ifx\EmFi@temp\EmFi@S@date + \let\EmFi@type\EmFi@temp + \else\ifx\EmFi@temp\EmFi@S@number + \let\EmFi@type\EmFi@temp + \else\ifx\EmFi@temp\EmFi@S@file + \let\EmFi@type\EmFi@temp + \else\ifx\EmFi@temp\EmFi@S@desc + \let\EmFi@type\EmFi@temp + \else\ifx\EmFi@temp\EmFi@S@afrelationship + \let\EmFi@type\EmFi@temp + \else\ifx\EmFi@temp\EmFi@S@moddate + \let\EmFi@type\EmFi@temp + \else\ifx\EmFi@temp\EmFi@S@creationdate + \let\EmFi@type\EmFi@temp + \else\ifx\EmFi@temp\EmFi@S@size + \let\EmFi@type\EmFi@temp + \else + \EmFi@Error{% + Unknown type `\EmFi@temp'.\MessageBreak + Supported types: `text', `date', `number', `file',\MessageBreak + `desc', `afrelationship', `moddate', `creationdate', `size'% + }% + \fi\fi\fi\fi\fi\fi\fi\fi\fi +} +\kv@define@key{EmFiFi}{title}{% + \def\EmFi@title{#1}% +} +\def\EmFi@setboolean#1#2{% + \EdefSanitize\EmFi@temp{#2}% + \ifx\EmFi@temp\EmFi@S@true + \csname EmFi@#1true\endcsname + \else + \ifx\EmFi@temp\EmFi@S@false + \csname EmFi@#1false\endcsname + \else + \EmFi@Error{% + Unknown value `\EmFi@temp' for key `#1'.\MessageBreak + Supported values: `true', `false'% + }\@ehc + \fi + \fi +} +\kv@define@key{EmFiFi}{visible}[true]{% + \EmFi@setboolean{visible}{#1}% +} +\kv@define@key{EmFiFi}{edit}[true]{% + \EmFi@setboolean{edit}{#1}% +} +\def\EmFi@sortkeys{} +\def\EmFi@sortorders{} +\def\embedfilesort{% + \kvsetkeys{EmFiSo}% +} +\def\embedfile{% + \ltx@ifnextchar[\EmFi@embedfile{\EmFi@embedfile[]}% +} +\def\EmFi@embedfile[#1]#2{% + \ifEmFi@finished + \EmFi@Error{% + \string\embedfile\ltx@space after \string\embedfilefinish + }{% + The list of embedded files is already written.% + }% + \else + \begingroup + \def\EmFi@file{#2}% + \kvsetkeys{EmFi}{#1}% + \expandafter\expandafter\expandafter + \ifx\expandafter\expandafter\expandafter + \\\pdf@filesize{\EmFi@file}\\% + \EmFi@Error{% + File `\EmFi@file' not found% + }{% + The unknown file is not embedded.% + }% + \else + \edef\EmFi@@filespec{% + \pdf@escapestring{\EmFi@filespec}% + }% + \ifx\EmFi@ucfilespec\ltx@empty + \let\EmFi@@ucfilespec\ltx@empty + \else + \EmFi@convert\EmFi@ucfilespec\EmFi@@ucfilespec + \fi + \ifx\EmFi@desc\ltx@empty + \let\EmFi@@desc\ltx@empty + \else + \EmFi@convert\EmFi@desc\EmFi@@desc + \fi + \ifx\EmFi@afrelationship\ltx@empty + \let\EmFi@@afrelationship\ltx@empty + \else + \EmFi@convert\EmFi@afrelationship\EmFi@@afrelationship + \fi + \ifEmFi@item + \let\do\EmFi@do + \immediate\pdfobj{% + <<% + \EmFi@fieldlist + >>% + }% + \edef\EmFi@ci{\the\pdflastobj}% + \fi + \immediate\pdfobj stream attr{% + /Type/EmbeddedFile% + \ifx\EmFi@mimetype\ltx@empty + \else + /Subtype/\pdf@escapename{\EmFi@mimetype}% + \fi + /Params<<% + /ModDate(\pdf@filemoddate{\EmFi@file})% + /Size \pdf@filesize{\EmFi@file}% + /CheckSum<\pdf@filemdfivesum{\EmFi@file}>% + >>% + }file{\EmFi@file}\relax + \EmFi@defobj{EmbeddedFile}% + \immediate\pdfobj{% + <<% + /Type/Filespec% + \ifx\EmFi@filesystem\ltx@empty + \else + /FS/\pdf@escapename{\EmFi@filesystem}% + \fi + /F(\EmFi@@filespec)% + \ifx\EmFi@@ucfilespec\ltx@empty + \else + /UF(\EmFi@@ucfilespec)% + \fi + \ifx\EmFi@@desc\ltx@empty + \else + /Desc(\EmFi@@desc)% + \fi + \ifx\EmFi@@afrelationship\ltx@empty + \else + /AFRelationship\EmFi@@afrelationship% + \fi + /EF<<% + /F \the\pdflastobj\ltx@space 0 R% + >>% + \ifEmFi@item + /CI \EmFi@ci\ltx@space 0 R% + \fi + >>% + }% + \EmFi@defobj{Filespec}% + \EmFi@add{% + \EmFi@@filespec + }{\the\pdflastobj\ltx@space 0 R}% + \fi + \endgroup + \fi +} +\def\EmFi@do#1{% + \expandafter\ifx\csname EmFi@P@#1\endcsname\relax + \expandafter\ifx\csname EmFi@V@#1\endcsname\relax + \else + /\pdf@escapename{#1}\csname EmFi@V@#1\endcsname + \fi + \else + /\pdf@escapename{#1}<<% + \expandafter\ifx\csname EmFi@V@#1\endcsname\relax + \else + /D\csname EmFi@V@#1\endcsname + \fi + /P(\csname EmFi@P@#1\endcsname)% + >>% + \fi +} +\def\EmFi@convert#1#2{% + \ifnum\pdf@strcmp{\EmFi@stringmethod}{psd}=0 % + \pdfstringdef\EmFi@temp{#1}% + \let#2\EmFi@temp + \else + \edef#2{\pdf@escapestring{#1}}% + \fi +} +\global\let\EmFi@list\ltx@empty +\def\EmFi@add#1#2{% + \begingroup + \ifx\EmFi@list\ltx@empty + \xdef\EmFi@list{\noexpand\do{#1}{#2}}% + \else + \def\do##1##2{% + \ifnum\pdf@strcmp{##1}{#1}>0 % + \edef\x{% + \toks@{% + \the\toks@% + \noexpand\do{#1}{#2}% + \noexpand\do{##1}{##2}% + }% + }% + \x + \def\do####1####2{% + \toks@\expandafter{\the\toks@\do{####1}{####2}}% + }% + \def\stop{% + \xdef\EmFi@list{\the\toks@}% + }% + \else + \toks@\expandafter{\the\toks@\do{##1}{##2}}% + \fi + }% + \def\stop{% + \xdef\EmFi@list{\the\toks@\noexpand\do{#1}{#2}}% + }% + \toks@{}% + \EmFi@list\stop + \fi + \endgroup +} +\def\embedfilefinish{% + \ifEmFi@finished + \EmFi@Error{% + Too many invocations of \string\embedfilefinish + }{% + The list of embedded files is already written.% + }% + \else + \ifx\EmFi@list\ltx@empty + \else + \global\EmFi@finishedtrue + \begingroup + \def\do##1##2{% + (##1)##2% + }% + \immediate\pdfobj{% + <<% + /Names[\EmFi@list]% + >>% + }% + \pdfnames{% + /EmbeddedFiles \the\pdflastobj\ltx@space 0 R% + }% + \endgroup + \begingroup + \def\do##1##2{% + \ltx@space##2% + }% + \immediate\pdfobj{% + [\EmFi@list]% + }% + \pdfcatalog{% + /AF \the\pdflastobj\ltx@space 0 R% + }% + \endgroup + \ifx\EmFi@initialfile\ltx@empty + \else + \EmFi@collectiontrue + \fi + \ifEmFi@collection + \ifx\EmFi@initialfile\ltx@empty + \let\EmFi@@initialfile\ltx@empty + \else + \edef\EmFi@@initialfile{% + \pdf@escapestring{\EmFi@initialfile}% + }% + \fi + \begingroup + \let\f=N% + \def\do##1##2{% + \def\x{##1}% + \ifx\x\EmFi@@initialfile + \let\f=Y% + \let\do\ltx@gobbletwo + \fi + }% + \EmFi@list + \expandafter\endgroup + \ifx\f Y% + \else + \@PackageWarningNoLine{embedfile}{% + Missing initial file `\EmFi@initialfile'\MessageBreak + among the embedded files% + }% + \let\EmFi@initialfile\ltx@empty + \let\EmFi@@initialfile\ltx@empty + \fi + \ifcase\EmFi@sortcase + \def\EmFi@temp{}% + \or + \def\EmFi@temp{% + /S\EmFi@sortkeys + /A \EmFi@sortorders + }% + \else + \def\EmFi@temp{% + /S[\EmFi@sortkeys]% + /A[\EmFi@sortorders]% + }% + \fi + \def\EmFi@@order##1{% + \ifnum\EmFi@order>1 % + /O ##1% + \fi + }% + \immediate\pdfobj{% + <<% + \ifx\EmFi@schema\ltx@empty + \else + /Schema<<\EmFi@schema>>% + \fi + \ifx\EmFi@@initialfile\ltx@empty + \else + /D(\EmFi@@initialfile)% + \fi + \ifx\EmFi@view\EmFi@S@tile + /View/T% + \else\ifx\EmFi@view\EmFi@S@hidden + /View/H% + \fi\fi + \ifx\EmFi@temp\ltx@empty + \EmFi@temp + \else + /Sort<<\EmFi@temp>>% + \fi + >>% + }% + \pdfcatalog{% + /Collection \the\pdflastobj\ltx@space0 R% + }% + \fi + \fi + \fi +} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname AtEndDocument\endcsname\relax +\else + \AtEndDocument{\embedfilefinish}% +\fi +\EmFi@AtEnd% +\endinput +%% +%% End of file `embedfile.sty'. diff --git a/Master/texmf-dist/tex/latex/embedfile/dtx-attach.sty b/Master/texmf-dist/tex/latex/embedfile/dtx-attach.sty new file mode 100644 index 00000000000..a22b7528edd --- /dev/null +++ b/Master/texmf-dist/tex/latex/embedfile/dtx-attach.sty @@ -0,0 +1,57 @@ +%% +%% This is file `dtx-attach.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% embedfile.dtx (with options: `dtxattach') +%% +%% This is a generated file. +%% +%% Project: embedfile +%% Version: 2019/12/03 v2.9 +%% +%% Copyright (C) +%% 2006-2011 Heiko Oberdiek +%% 2016-2019 Oberdiek Package Support Group +%% +%% 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/embedfile/issues +%% +%% +%% The Base Interpreter refers to any `TeX-Format', +%% because some files are installed in TDS:tex/generic//. +%% +%% This work consists of the main source file embedfile.dtx +%% and the derived files +%% embedfile.sty, embedfile.pdf, embedfile.ins, embedfile.drv, +%% dtx-attach.sty, embedfile-example-plain.tex, +%% embedfile-example-collection.tex, embedfile-test1.tex, +%% embedfile-test2.tex, embedfile-test3.tex, +%% embedfile-test4.tex. +%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{dtx-attach} + [2019/12/03 v2.9 Embed \string\jobname.dtx (HO)]% +\RequirePackage{embedfile}[2019/12/03] +\embedfile[% + stringmethod=escape,% + mimetype=plain/text,% + desc={LaTeX docstrip source archive for package `\jobname'}% +]{\jobname.dtx} +\endinput +%% +%% End of file `dtx-attach.sty'. diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index 3e31368c644..ca3492f9b31 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -255,7 +255,7 @@ my @TLP_working = qw( ellipse ellipsis elmath elocalloc elpres els-cas-templates elsarticle elteikthesis eltex elvish elzcards - emarks embedall embrac emf emisa emptypage emulateapj emp + emarks embedall embedfile embrac emf emisa emptypage emulateapj emp enctex encxvlna endfloat endheads endiagram endnotes endnotesj endofproofwd engpron engrec engtlc enigma enotez enumitem enumitem-zref envbig environ envlab diff --git a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc index 3eb635a7296..3527bf03d35 100644 --- a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc @@ -358,6 +358,7 @@ depend elpres depend elzcards depend emarks depend embedall +depend embedfile depend embrac depend emptypage depend emulateapj diff --git a/Master/tlpkg/tlpsrc/embedfile.tlpsrc b/Master/tlpkg/tlpsrc/embedfile.tlpsrc new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/tlpsrc/embedfile.tlpsrc |