summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2008-07-01 01:01:13 +0000
committerKarl Berry <karl@freefriends.org>2008-07-01 01:01:13 +0000
commite1848a4a89ee2b1e434745fb3f820583d84bee95 (patch)
tree1ac3d6c9f1c0928d69b9f1fbdbc101c3ca8e84b9 /Master
parent4d4fe569c8fd3aa109b21399493671c6d0002ccf (diff)
new latex package pgfopts (26jun08)
git-svn-id: svn://tug.org/texlive/trunk@9131 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/latex/pgfopts/README16
-rw-r--r--Master/texmf-dist/doc/latex/pgfopts/pgfopts-manual.pdfbin0 -> 102616 bytes
-rw-r--r--Master/texmf-dist/doc/latex/pgfopts/pgfopts.pdfbin0 -> 118526 bytes
-rw-r--r--Master/texmf-dist/source/latex/pgfopts/pgfopts.dtx647
-rw-r--r--Master/texmf-dist/source/latex/pgfopts/pgfopts.ins45
-rw-r--r--Master/texmf-dist/tex/latex/pgfopts/pgfopts.sty99
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check2
-rw-r--r--Master/tlpkg/tlpsrc/collection-pictures.tlpsrc1
-rw-r--r--Master/tlpkg/tlpsrc/pgfopts.tlpsrc2
9 files changed, 811 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/latex/pgfopts/README b/Master/texmf-dist/doc/latex/pgfopts/README
new file mode 100644
index 00000000000..86a4d5a9982
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/pgfopts/README
@@ -0,0 +1,16 @@
+---------------------------------------------------------------
+The pgfopts package --- LaTeX package options with pgfkeys
+Maintained by Joseph Wright
+E-mail: joseph.wright@morningstar2.co.uk
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+---------------------------------------------------------------
+
+Using key-value options for packages and macros is a good way
+of handling large numbers of options with a clean interface.
+The pgfkeys package provides a very well designed system for
+defining and using keys, but does not make this available for
+handling LaTeX class and package options. The pgfopts package
+adds this ability to pgfkeys, in the same way that kvoptions
+extends the keyval package.
+
diff --git a/Master/texmf-dist/doc/latex/pgfopts/pgfopts-manual.pdf b/Master/texmf-dist/doc/latex/pgfopts/pgfopts-manual.pdf
new file mode 100644
index 00000000000..9789e943f8f
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/pgfopts/pgfopts-manual.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/pgfopts/pgfopts.pdf b/Master/texmf-dist/doc/latex/pgfopts/pgfopts.pdf
new file mode 100644
index 00000000000..e43c189403f
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/pgfopts/pgfopts.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/latex/pgfopts/pgfopts.dtx b/Master/texmf-dist/source/latex/pgfopts/pgfopts.dtx
new file mode 100644
index 00000000000..f897c44f9d3
--- /dev/null
+++ b/Master/texmf-dist/source/latex/pgfopts/pgfopts.dtx
@@ -0,0 +1,647 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2008 by
+% Joseph Wright <joseph.wright@morningstar2.co.uk>
+%
+% 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. The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3c 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 maintainer of this work is Joseph Wright.
+%
+% This work consists of the source file pgfopts.dtx
+% and the derived files pgfopts.ins,
+% pgfopts.sty,
+% pgfopts.pdf,
+% pgfopts-manual.pdf,
+% jawltxdoc.sty and
+% README
+%
+% TDS-ready files:
+% The compressed file pgfopts.tds.zip contains an unpacked version
+% of all of the files included here, and pre-compiled
+% documentation in PDF format. Simply decompress pgfopts.tds.dtx
+% in your local TeX directory, run your hash program (texhash,
+% initexmf --update-fndb, etc.) and everything will be ready to
+% go. The user documentation for the package is called
+% pgfopts-manual.pdf; the file chemscheme.pdf includes the user
+% manual and the fully-indexed source code.
+%
+% Unpacking:
+% (a) If pgfopts.ins is present:
+% tex pgfopts.ins
+% (b) Without pgfopts.ins:
+% tex chemscheme.dtx
+% (c) If you use LaTeX to generate files:
+% latex \let\install=y\input{pgfopts.dtx}
+%
+% Documentation:
+% (a) Without write18 enabled:
+% pdflatex pgfopts.dtx
+% makeindex -s gind.ist chemscheme.idx
+% makeindex -s gglo.ist -o chemscheme.gls chemscheme.glo
+% pdflatex chemscheme.dtx
+% pdflatex chemscheme.dtx
+% (b) With write18 enabled:
+% pdflatex chemscheme.dtx
+% pdflatex chemscheme.dtx
+% pdflatex chemscheme.dtx
+%
+% Installation:
+% Copy pgfopts.sty to a location searched by TeX, and if required
+% by your TeX installation, run the appropriate command to build
+% a hash of files (texhash, initexmf --update-fndb, etc.)
+%
+% Note:
+% The jawltxdoc.sty file is not needed for installation,
+% only for building the documentation; it may be deleted
+% after producing the documentation (if necessary).
+%
+%<*ignore>
+% This is all taken verbatim from Heiko Oberdiek's packages
+\begingroup
+ \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
+\keepsilent
+\askforoverwritefalse
+\preamble
+ --------------------------------------------------------------
+ The pgfopts package --- LaTeX package options with pgfkeys
+ Maintained by Joseph Wright
+ E-mail: joseph.wright@morningstar2.co.uk
+ Released under the LaTeX Project Public License v1.3 or later
+ See http://www.latex-project.org/lppl.txt
+ --------------------------------------------------------------
+
+\endpreamble
+\Msg{Generating pgfopts files:}
+\generate{\file{jawltxdoc.sty}{\from{\jobname.dtx}{jawltxdoc}}
+}
+\usedir{tex/latex/pgfopts}
+\generate{\file{\jobname.sty}{\from{\jobname.dtx}{package}}
+}
+\usedir{source/latex/pgfopts}
+\generate{\file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\usedir{doc/latex/pgfopts}
+\generate{\file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\endbatchfile
+%</install>
+%<*readme>
+---------------------------------------------------------------
+The pgfopts package --- LaTeX package options with pgfkeys
+Maintained by Joseph Wright
+E-mail: joseph.wright@morningstar2.co.uk
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+---------------------------------------------------------------
+
+Using key-value options for packages and macros is a good way
+of handling large numbers of options with a clean interface.
+The pgfkeys package provides a very well designed system for
+defining and using keys, but does not make this available for
+handling LaTeX class and package options. The pgfopts package
+adds this ability to pgfkeys, in the same way that kvoptions
+extends the keyval package.
+
+%</readme>
+%<*ignore>
+\fi
+% Will Robertson's trick
+\immediate\write18{makeindex -s gind.ist -o \jobname.ind \jobname.idx}
+\immediate\write18{makeindex -s gglo.ist -o \jobname.gls \jobname.glo}
+%</ignore>
+%<*driver>
+\PassOptionsToClass{a4paper}{article}
+\documentclass[german,english,UKenglish]{ltxdoc}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+%\OnlyDescription
+\usepackage{jawltxdoc}
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+%\CheckSum{220}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \GetFileInfo{\jobname.sty}
+%
+%\changes{v1.0}{2008/06/26}{First public release}
+%
+%\setkeys{lst}{language=[LaTeX]{TeX},moretexcs={pgfkeys,
+% ProcessPgfOptions,pgfkeyscurrentname,pgfkeyscurrentvalue}}
+%
+%\DoNotIndex{\.,\/,\:,\=,\@classoptionslist,\@clsextension}
+%\DoNotIndex{\@currext,\@currname,\@empty,\@expandtwoargs,\@for}
+%\DoNotIndex{\@ifstar,\@ifundefined,\@makeother,\@nil,\@onlypreamble}
+%\DoNotIndex{\@removeelement,\@tempa,\@unprocessedoptions}
+%\DoNotIndex{\@unusedoptionlist,\AtEndOfPackage,\begingroup}
+%\DoNotIndex{\catcode,\csname,\CurrentOption,\def,\do,\edef}
+%\DoNotIndex{\else,\endcsname,\endgroup,\expandafter,\fi}
+%\DoNotIndex{\gdef,\global,\ifx,\let,\newcommand,\noexpand}
+%\DoNotIndex{\NeedsTeXFormat,\pgfkeys,\pgfkeysifdefined}
+%\DoNotIndex{\ProvidesPackage,\relax,\RequirePackage,\space}
+%\DoNotIndex{\string,\the,\toks@}
+%
+% \title{\currpkg\ --- \LaTeX\ package options with pgfkeys^^A
+% \thanks{This file describes version \fileversion, last revised
+% \filedate.}}
+% \author{Joseph Wright^^A
+% \thanks{E-mail: joseph.wright@morningstar2.co.uk}}
+% \date{Released \filedate}
+%
+% \maketitle
+%
+%\begin{abstract}
+% Using key--value options for packages and macros is a good way of
+% handling large numbers of options with a clean interface. The
+% \pkg{pgfkeys} package provides a very well designed system for
+% defining and using keys, but does not make this available for
+% handling \LaTeX\ class and package options. The \currpkg package
+% adds this ability to \pkg{pgfkeys}, in the same way that
+% \pkg{kvoptions} extends the \pkg{keyval} package.
+%\end{abstract}
+%
+%\begin{multicols}{2}
+%\tableofcontents
+%\end{multicols}
+%
+%\section{Introduction}
+% The key--value method for optional arguments is very popular, as it
+% allows the class or package author to define a large number of
+% options with a simple interface. A number of packages can be used
+% to provide the key management system, most of which load or extent
+% the parent \pkg{keyval} package. On its own, \pkg{keyval} can only
+% be used for parsing the arguments of macros. However, a number of
+% packages have extended the method to processing \LaTeX\ class and
+% package options. This processing is made available as part of two
+% general-purpose packages \pkg{xkeyval} and \pkg{kvoptions}; both
+% allow the author of a class or package to process key--value
+% options given at load-time.
+%
+% The \pkg{pgfkeys} package provides a somewhat different key--value
+% system to \pkg{keyval} and derivatives. This uses a completely
+% different model for defining and using keys, although for the
+% end-user the result appears very similar. The \currpkg package
+% allows keys defined with \pkg{pgfkeys} to be used as class or
+% package options, in the same way that \pkg{kvoptions} extends
+% \pkg{keyval}.
+%
+% Users of \currpkg should be familiar with the general methods used
+% by \pkg{pgfkeys}. These are outlined in the manual for the
+% Ti\emph{k}z and \pkg{pgf} bundle.
+%
+%\section{Using the package}
+%\subsection{Creating options}
+% To create package or class options for use with \currpkg, it is
+% only necessary to define the appropriate keys. Taking as an
+% example a package ``\pkg{MyOwnPackage}'', which uses the prefix
+% \texttt{MOP} on internal macros, creating keys would take the form:
+%\begin{LaTeXexample}[noexample]
+% \pgfkeys{/MOP/.cd,
+% keyone/.code=\wlog{Value `#1' given},
+% keytwo/.store in=\MOP@store}
+%\end{LaTeXexample}
+% Here, \opt{keyone} simply writes its argument to the log, while
+% \opt{keytwo} stores the value given in the \cs{MOP@store} macro.
+%
+% An important point to notice is that the key names \emph{do not}
+% contain a space. This is because the \LaTeX\ kernel removes spaces
+% from options before they are passed to the class or package. Spaces
+% can occur in the path to the key, but not in the key name itself.
+% This restriction only applies to keys used as options.
+%
+%\subsection{Processing options}
+%\DescribeMacro{\ProcessPgfOptions}
+% Options should be processed using the \cs{ProcessPgfOptions} macro,
+% which takes two forms. When invoked followed by a star, the system
+% will use the name of the current file as the key path. Thus, for
+% the example \pkg{MyOwnPackage.sty}, \currpkg would use the path
+% \opt{/MyOwnPackage}.
+%\begin{LaTeXexample}[noexample]
+% \ProcessPgfOptions*
+%\end{LaTeXexample}
+% When the key path does not match the current file name, the second
+% form of \cs{ProcessPgfOptions} should be used. The full path to be
+% searched should be given as the argument to the macro. Continuing
+% the example, for \pkg{MyOwnPackage.sty} using path \opt{/MOP}, the
+% correct call is:
+%\begin{LaTeXexample}[noexample]
+% \ProcessPgfOptions{/MOP}
+%\end{LaTeXexample}
+% Notice that the \emph{full} path is given here, including the
+% leading ``|/|''; this allows the advance user to alter the default
+% path before calling \cs{ProcessPgfOptions}.
+%
+%\subsection{Specialised options}
+% Users of \pkg{kvoptions} will be aware that there are two types of
+% options which need specialised handling. First, there is the need
+% to process options which should not be given a value. Using
+% \pkg{pgfkeys}, this is achieved using the \opt{.value forbidden}
+% handler.
+%\begin{LaTeXexample}[noexample]
+% \pgfkeys{/MOP/.cd,
+% keythree/.code=\wlog{keythree set},
+% keythree/.value forbidden}
+%\end{LaTeXexample}
+%
+% The second type of specialist option is the unknown option.
+% Some packages accept arbitrary values in the options, which
+% can then be used to load configuration files, \etc. Once
+% again, this is handled using correctly-defined keys.
+%\begin{LaTeXexample}[noexample]
+% \pgfkeys{/MOP/.cd,
+% .unknown/.code=\wlog{%
+% The unknown key `\pgfkeyscurrentname' was given with
+% value `\pgfkeyscurrentvalue'}}
+%\end{LaTeXexample}
+%
+% The power of the \pkg{pgfkeys} system is demonstrated here: no
+% additional macros are needed to handle the specialised option
+% types.
+%
+% \StopEventually{^^A
+% \PrintChanges
+% \PrintIndex}
+%
+% \iffalse
+%<*package>
+% \fi
+%
+% \section{Implementation}
+% The code here is based heavily on \pkg{kvoptions}, which has a
+% similar aim to \currpkg, but works with \pkg{keyval} and derived
+% packages.
+%
+%\begin{macro}{\pgfopts@id}
+% Macro naming follows the scheme used by \pkg{pgfkeys}: the full
+% package name is the prefix.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\newcommand*{\pgfopts@id}{}
+\def\pgfopts@id$#1: #2.#3 #4 #5-#6-#7 #8 #9${%
+ #5/#6/#7\space v1.0\space}
+\ProvidesPackage{pgfopts}
+ [\pgfopts@id $Id: pgfopts.dtx 28 2008-06-26 11:59:34Z joseph $
+ LaTeX package options with pgfkeys]
+% \end{macrocode}
+%\end{macro}
+% The \pkg{pgfkeys} package is needed, unsurprisingly.
+% \begin{macrocode}
+\RequirePackage{pgfkeys}
+% \end{macrocode}
+%
+%\begin{macro}{\pgfopts@catcodes}
+% A few category codes are set correctly, to prevent odd
+% accidents.
+% \begin{macrocode}
+\edef\pgfopts@catcodes{%
+ \catcode\string`\string ` \the\catcode\string`\`\relax
+ \catcode\string`\string = \the\catcode\string`\=\relax
+ \catcode\string`\string : \the\catcode\string`\:\relax
+ \catcode\string`\string , \the\catcode\string`\,\relax
+ \catcode\string`\string / \the\catcode\string`\/\relax
+ \catcode\string`\string . \the\catcode\string`\.\relax}
+\catcode\string`\` 12\relax
+\catcode`\= 12\relax
+\@makeother{\:}
+\@makeother{\,}
+\@makeother{\/}
+\@makeother{\.}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ProcessPgfOptions}
+% The user macro for processing options may have a star. In that
+% case, \cs{@currname} is used for setting keys.
+% \begin{macrocode}
+\newcommand*{\ProcessPgfOptions}{%
+ \@ifstar
+ {\begingroup
+ \edef\@tempa{%
+ \endgroup
+ \noexpand\pgfopts@ProcessOptions
+ {/\@currname}}%
+ \@tempa}%
+ {\pgfopts@ProcessOptions}}
+\@onlypreamble\ProcessPgfOptions
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\pgfopts@temp}
+% A private storage area is needed by the next macro.
+% \begin{macrocode}
+\newcommand*{\pgfopts@temp}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\pgfopts@ProcessOptions}
+% \darg{path}
+% The business end of the package. This is a modified copy of the
+% macro \cs{KVO@ProcessOptions} from \pkg{kvoptions}. Some
+% simplifications are made due to the differences in key system, and
+% as patching the kernel is ignored.
+% \begin{macrocode}
+\newcommand*{\pgfopts@ProcessOptions}[1]{%
+ \def\pgfopts@temp{,}%
+ \ifx\@currext\@clsextension\else
+ \ifx\@classoptionslist\relax\else
+% \end{macrocode}
+%\begin{macro}{\pgfopts@CurrentOption}
+% For packages, the list of global (class) options needs to be
+% checked. The assumption is made that only \emph{explicitly}
+% declared keys will be accepted as options here. The strange
+% argument to \cs{pgfkeysifdefined} is needed as checking for the key
+% itself only works if it has already been used.
+% \begin{macrocode}
+ \@for\pgfopts@CurrentOption:=\@classoptionslist\do{%
+ \pgfkeysifdefined{#1/\expandafter\pgfopts@sepkeyval%
+ \pgfopts@CurrentOption=\@nil/.@cmd}
+ {\edef\pgfopts@temp{%
+ \pgfopts@temp\pgfopts@CurrentOption,}%
+ \@expandtwoargs\@removeelement\pgfopts@CurrentOption
+ \@unusedoptionlist\@unusedoptionlist}%
+ {}}%
+ \fi
+ \fi
+% \end{macrocode}
+%\end{macro}
+% Now the local options have to be processed. If there are none,
+% then the global list is simply copied. Otherwise, the local
+% options are first added to the ``to do'' list stored in \cs{toks@}.
+% \begin{macrocode}
+ \begingroup
+ \@ifundefined{opt@\@currname.\@currext}
+ {\toks@\expandafter{\pgfopts@temp}}
+ {\toks@\expandafter\expandafter\expandafter{%
+ \csname opt@\@currname.\@currext\endcsname}%
+% \end{macrocode}
+% There is work to do if processing options of a class; unknown options
+% from the global list have to be completely ignored.
+% \begin{macrocode}
+ \ifx\@currext\@clsextension
+ \edef\@tempa{\the\toks@}%
+ \toks@\expandafter{\pgfopts@temp}%
+ \@for\CurrentOption:=\@tempa\do{%
+ \pgfkeysifdefined{#1/\expandafter%
+ \pgfopts@sepkeyval\CurrentOption=\@nil/.@cmd}
+ {\toks@\expandafter{\the\expandafter\toks@
+ \expandafter,\CurrentOption}}
+ {\ifx\@empty\@unusedoptionlist\@empty
+ \global\let\@unusedoptionlist\CurrentOption
+ \else
+ \expandafter\expandafter\expandafter\gdef
+ \expandafter\expandafter\expandafter
+ \@unusedoptionlist\expandafter\expandafter
+ \expandafter{%
+ \expandafter\@unusedoptionlist
+ \expandafter,\CurrentOption}%
+ \fi}}%
+% \end{macrocode}
+% For packages, the two lists are simply combined.
+% \begin{macrocode}
+ \else
+ \toks@\expandafter\expandafter\expandafter{%
+ \expandafter\pgfopts@temp\the\toks@}%
+ \fi}%
+% \end{macrocode}
+% With everything done, the keys are sent to \pkg{pgfkeys} for
+% processing. The default key system in \pkg{pgfkeys} is very
+% different from that in \pkg{kvoptions}, and so the system here is
+% much less complex.
+% \begin{macrocode}
+ \edef\pgfopts@temp{\endgroup
+ \noexpand\pgfkeys{#1/.cd,\the\toks@}}%
+ \pgfopts@temp
+ \let\CurrentOption\@empty
+ \AtEndOfPackage{\let\@unprocessedoptions\relax}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\pgfopts@sepkeyval}
+% A very simply macro to separate a key from a potential value.
+% \begin{macrocode}
+\newcommand*{\pgfopts@sepkeyval}{}
+\def\pgfopts@sepkeyval#1=#2\@nil{#1}
+% \end{macrocode}
+%\end{macro}
+% Tidying up.
+% \begin{macrocode}
+\pgfopts@catcodes
+% \end{macrocode}
+%
+%\Finale
+%
+%\iffalse
+%</package>
+%<*jawltxdoc>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{jawltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+\usepackage[final]{listings,graphicx,microtype}
+\usepackage[scaled=0.95]{helvet}
+\usepackage[version=3]{mhchem}
+\usepackage[osf]{mathpazo}
+\usepackage{booktabs,array,url,courier,xspace,etoolbox,varioref}
+\usepackage{upgreek,ifpdf,float,caption,longtable,babel}
+\floatstyle{plaintop}
+\restylefloat{table}
+\labelformat{figure}{\figurename~#1}
+\labelformat{table}{\tablename~#1}
+\ifpdf
+ \usepackage{embedfile}
+ \embedfile[%
+ stringmethod=escape,%
+ mimetype=plain/text,%
+ desc={LaTeX docstrip source archive for package `\jobname'}%
+ ]{\jobname.dtx}
+\fi
+\IfFileExists{\jobname.sty}
+ {\usepackage{\jobname}}{}
+\usepackage[numbered]{hypdoc}
+\setcounter{IndexColumns}{2}
+\newlength\LaTeXwidth
+\newlength\LaTeXoutdent
+\newlength\LaTeXgap
+\setlength\LaTeXgap{1em}
+\setlength\LaTeXoutdent{-0.15\textwidth}
+\newbox\lst@samplebox
+\edef\LaTeXexamplefile{\jobname.tmp}
+\lst@RequireAspects{writefile}
+\lstnewenvironment{LaTeXexample}[1][example]{%
+ \global\let\lst@intname\@empty
+ \ifcsname LaTeXcode#1\endcsname
+ \expandafter\let\expandafter\LaTeXcode
+ \csname LaTeXcode#1\endcsname
+ \expandafter\let\expandafter\LaTeXcodeend
+ \csname LaTeXcode#1end\endcsname
+ \else
+ \PackageError{jawltxdoc}
+ {Undefined example type `#1'}
+ \@ehd
+ \let\LaTeXcode\relax
+ \let\LaTeXcodeend\relax
+ \fi
+ \LaTeXcode}
+ {\lst@EndWriteFile
+ \LaTeXcodeend}
+\newcommand*{\LaTeXcodeexample}{%
+ \setbox\lst@samplebox=\hbox\bgroup
+ \LaTeXcodefloat}
+\let\LaTeXcoderesultonly\LaTeXcodeexample
+\newcommand*{\LaTeXcodeexampleend}{%
+ \egroup
+ \setlength\LaTeXwidth{\wd\lst@samplebox}%
+ \begin{list}{}{%
+ \setlength\itemindent{0pt}
+ \setlength\leftmargin\LaTeXoutdent
+ \setlength\rightmargin{0pt}}%
+ \item
+ \setlength\LaTeXoutdent{-0.15\textwidth}
+ \begin{minipage}[c]{%
+ \textwidth-\LaTeXwidth-\LaTeXoutdent-\LaTeXgap}
+ \LaTeXcodefloatend
+ \end{minipage}%
+ \hfill
+ \begin{minipage}[c]{\LaTeXwidth}%
+ \hbox to\linewidth{\box\lst@samplebox\hss}%
+ \end{minipage}%
+ \end{list}}
+\let\LaTeXcodenoexample\LaTeXcodeexample
+\newcommand*{\LaTeXcodenoexampleend}{%
+ \egroup
+ \setlength\LaTeXwidth{\wd\lst@samplebox}%
+ \begin{list}{}{%
+ \setlength\itemindent{0pt}
+ \setlength\leftmargin{0pt}
+ \setlength\rightmargin{0pt}}%
+ \item
+ \begin{minipage}[c]{\LaTeXwidth}
+ \hbox to\linewidth{\box\lst@samplebox\hss}%
+ \end{minipage}%
+ \end{list}}
+\newcommand*{\LaTeXcodefloat}{%
+ \setkeys{lst}{tabsize=4,gobble=3,breakindent=0pt,
+ basicstyle=\small\ttfamily,basewidth=0.51em,
+ keywordstyle=\color{blue}}%
+ \lst@BeginAlsoWriteFile{\LaTeXexamplefile}}
+\newcommand*{\LaTeXcodefloatend}{%
+ \MakePercentComment\catcode`\^^M=10\relax
+ \small
+ {\setkeys{lst}{SelectCharTable=\lst@ReplaceInput{\^\^I}%
+ {\lst@ProcessTabulator}}%
+ \leavevmode \input{\LaTeXexamplefile}}%
+ \MakePercentIgnore}
+\newcommand*{\LaTeXcoderesultonlyend}{\egroup\LaTeXcodefloatend}
+\lstnewenvironment{BibTeXexample}{%
+ \global\let\lst@intname\@empty
+ \setbox\lst@samplebox=\hbox\bgroup
+ \setkeys{lst}{tabsize=4,gobble=3,breakindent=0pt,
+ basicstyle=\small\ttfamily,basewidth=0.51em,
+ keywordstyle=\color{black}}
+ \lst@BeginAlsoWriteFile{\LaTeXexamplefile}}
+ {\lst@EndWriteFile
+ \LaTeXcodeexampleend}
+\newcommand*{\DescribeOption}{%
+ \leavevmode\@bsphack\begingroup\MakePrivateLetters
+ \Describe@Option}
+\newcommand*{\Describe@Option}[1]{\endgroup
+ \marginpar{\raggedleft\PrintDescribeEnv{#1}}%
+ \SpecialOptionIndex{#1}\@esphack\ignorespaces}
+\newcommand*{\SpecialOptionIndex}[1]{\@bsphack
+ \index{#1\actualchar{\protect\ttfamily#1}
+ (option)\encapchar usage}%
+ \index{options:\levelchar#1\actualchar{\protect\ttfamily#1}%
+ \encapchar usage}\@esphack}
+\newcommand*{\indexopt}[1]{\DescribeOption{#1}\opt{#1}}
+\newcommand*{\DescribeOptionInfo}[2]{%
+ \DescribeOption{#1}%
+ \opt{#1=\meta{#2}}\xspace}
+\newcommand*{\ofixarg}[1]{%
+ {\ttfamily[}%
+ \ifmmode \expandafter \nfss@text \fi
+ {%
+ \meta@font@select
+ \edef\meta@hyphen@restore{%
+ \hyphenchar\the\font\the\hyphenchar\font}%
+ \hyphenchar\font\m@ne
+ \language\l@nohyphenation
+ #1\/%
+ \meta@hyphen@restore
+ }%
+ {\ttfamily]}}
+\newcommand*{\pkg}[1]{\textsf{#1}}
+\newcommand*{\currpkg}{\pkg{\jobname}\xspace}
+\newcommand*{\opt}[1]{\texttt{#1}}
+\newcommand*{\defaultopt}[1]{\opt{\textbf{#1}}}
+\newcommand*{\file}[1]{\texttt{#1}}
+\newcommand*{\ext}[1]{\file{.#1}}
+\newcommand*{\latin}[1]{\emph{#1}}
+\newcommand*{\etc}{%
+ \@ifnextchar.
+ {\latin{etc}}
+ {\latin{etc}.\xspace}}
+\newcommand*{\eg}{%
+ \@ifnextchar.
+ {\latin{e.g}}
+ {\latin{e.g}.\xspace}}
+\newcommand*{\ie}{%
+ \@ifnextchar.
+ {\latin{i.e}}
+ {\latin{i.e}.\xspace}}
+\newcommand*{\etal}{%
+ \@ifnextchar.
+ {\latin{et~al.}}
+ {\latin{et~al}.\xspace}}
+\newcommand*{\AMS}{{\protect\usefont{OMS}{cmsy}{m}{n}%
+ A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}}
+\providecommand*{\eTeX}{\ensuremath{\varepsilon}-\TeX}
+\DeclareRobustCommand*{\XeTeX}
+ {X\kern-.125em\lower.5ex\hbox{\reflectbox{E}}\kern-.1667em\TeX}
+\providecommand*{\CTAN}{\textsc{ctan}}
+\patchcmd{\@addmarginpar}
+ {\@latex@warning@no@line {Marginpar on page \thepage\space moved}}
+ {\relax}{}{}
+\newcounter{argument}
+\g@addto@macro\endmacro{\setcounter{argument}{0}}
+\newcommand*\darg[1]{%
+ \stepcounter{argument}%
+ {\ttfamily\char`\#\theargument~:~}#1\par\noindent\ignorespaces}
+\newcommand*\doarg[1]{%
+ \stepcounter{argument}%
+ {\ttfamily\makebox[0pt][r]{[}%
+ \char`\#\theargument]:~}#1\par\noindent\ignorespaces}
+%</jawltxdoc>
+%\fi
diff --git a/Master/texmf-dist/source/latex/pgfopts/pgfopts.ins b/Master/texmf-dist/source/latex/pgfopts/pgfopts.ins
new file mode 100644
index 00000000000..1465fc4fc78
--- /dev/null
+++ b/Master/texmf-dist/source/latex/pgfopts/pgfopts.ins
@@ -0,0 +1,45 @@
+%%
+%% This is file `pgfopts.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% pgfopts.dtx (with options: `install')
+%% --------------------------------------------------------------
+%% The pgfopts package --- LaTeX package options with pgfkeys
+%% Maintained by Joseph Wright
+%% E-mail: joseph.wright@morningstar2.co.uk
+%% Released under the LaTeX Project Public License v1.3 or later
+%% See http://www.latex-project.org/lppl.txt
+%% --------------------------------------------------------------
+%%
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+ --------------------------------------------------------------
+ The pgfopts package --- LaTeX package options with pgfkeys
+ Maintained by Joseph Wright
+ E-mail: joseph.wright@morningstar2.co.uk
+ Released under the LaTeX Project Public License v1.3 or later
+ See http://www.latex-project.org/lppl.txt
+ --------------------------------------------------------------
+
+\endpreamble
+\Msg{Generating pgfopts files:}
+\generate{\file{jawltxdoc.sty}{\from{\jobname.dtx}{jawltxdoc}}
+}
+\usedir{tex/latex/pgfopts}
+\generate{\file{\jobname.sty}{\from{\jobname.dtx}{package}}
+}
+\usedir{source/latex/pgfopts}
+\generate{\file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\usedir{doc/latex/pgfopts}
+\generate{\file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\endbatchfile
+\endinput
+%%
+%% End of file `pgfopts.ins'.
diff --git a/Master/texmf-dist/tex/latex/pgfopts/pgfopts.sty b/Master/texmf-dist/tex/latex/pgfopts/pgfopts.sty
new file mode 100644
index 00000000000..54b1af2ad90
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/pgfopts/pgfopts.sty
@@ -0,0 +1,99 @@
+%%
+%% This is file `pgfopts.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% pgfopts.dtx (with options: `package')
+%% --------------------------------------------------------------
+%% The pgfopts package --- LaTeX package options with pgfkeys
+%% Maintained by Joseph Wright
+%% E-mail: joseph.wright@morningstar2.co.uk
+%% Released under the LaTeX Project Public License v1.3 or later
+%% See http://www.latex-project.org/lppl.txt
+%% --------------------------------------------------------------
+%%
+\NeedsTeXFormat{LaTeX2e}
+\newcommand*{\pgfopts@id}{}
+\def\pgfopts@id$#1: #2.#3 #4 #5-#6-#7 #8 #9${%
+ #5/#6/#7\space v1.0\space}
+\ProvidesPackage{pgfopts}
+ [\pgfopts@id $Id: pgfopts.dtx 28 2008-06-26 11:59:34Z joseph $
+ LaTeX package options with pgfkeys]
+\RequirePackage{pgfkeys}
+\edef\pgfopts@catcodes{%
+ \catcode\string`\string ` \the\catcode\string`\`\relax
+ \catcode\string`\string = \the\catcode\string`\=\relax
+ \catcode\string`\string : \the\catcode\string`\:\relax
+ \catcode\string`\string , \the\catcode\string`\,\relax
+ \catcode\string`\string / \the\catcode\string`\/\relax
+ \catcode\string`\string . \the\catcode\string`\.\relax}
+\catcode\string`\` 12\relax
+\catcode`\= 12\relax
+\@makeother{\:}
+\@makeother{\,}
+\@makeother{\/}
+\@makeother{\.}
+\newcommand*{\ProcessPgfOptions}{%
+ \@ifstar
+ {\begingroup
+ \edef\@tempa{%
+ \endgroup
+ \noexpand\pgfopts@ProcessOptions
+ {/\@currname}}%
+ \@tempa}%
+ {\pgfopts@ProcessOptions}}
+\@onlypreamble\ProcessPgfOptions
+\newcommand*{\pgfopts@temp}{}
+\newcommand*{\pgfopts@ProcessOptions}[1]{%
+ \def\pgfopts@temp{,}%
+ \ifx\@currext\@clsextension\else
+ \ifx\@classoptionslist\relax\else
+ \@for\pgfopts@CurrentOption:=\@classoptionslist\do{%
+ \pgfkeysifdefined{#1/\expandafter\pgfopts@sepkeyval%
+ \pgfopts@CurrentOption=\@nil/.@cmd}
+ {\edef\pgfopts@temp{%
+ \pgfopts@temp\pgfopts@CurrentOption,}%
+ \@expandtwoargs\@removeelement\pgfopts@CurrentOption
+ \@unusedoptionlist\@unusedoptionlist}%
+ {}}%
+ \fi
+ \fi
+ \begingroup
+ \@ifundefined{opt@\@currname.\@currext}
+ {\toks@\expandafter{\pgfopts@temp}}
+ {\toks@\expandafter\expandafter\expandafter{%
+ \csname opt@\@currname.\@currext\endcsname}%
+ \ifx\@currext\@clsextension
+ \edef\@tempa{\the\toks@}%
+ \toks@\expandafter{\pgfopts@temp}%
+ \@for\CurrentOption:=\@tempa\do{%
+ \pgfkeysifdefined{#1/\expandafter%
+ \pgfopts@sepkeyval\CurrentOption=\@nil/.@cmd}
+ {\toks@\expandafter{\the\expandafter\toks@
+ \expandafter,\CurrentOption}}
+ {\ifx\@empty\@unusedoptionlist\@empty
+ \global\let\@unusedoptionlist\CurrentOption
+ \else
+ \expandafter\expandafter\expandafter\gdef
+ \expandafter\expandafter\expandafter
+ \@unusedoptionlist\expandafter\expandafter
+ \expandafter{%
+ \expandafter\@unusedoptionlist
+ \expandafter,\CurrentOption}%
+ \fi}}%
+ \else
+ \toks@\expandafter\expandafter\expandafter{%
+ \expandafter\pgfopts@temp\the\toks@}%
+ \fi}%
+ \edef\pgfopts@temp{\endgroup
+ \noexpand\pgfkeys{#1/.cd,\the\toks@}}%
+ \pgfopts@temp
+ \let\CurrentOption\@empty
+ \AtEndOfPackage{\let\@unprocessedoptions\relax}}
+\newcommand*{\pgfopts@sepkeyval}{}
+\def\pgfopts@sepkeyval#1=#2\@nil{#1}
+\pgfopts@catcodes
+\endinput
+%%
+%% End of file `pgfopts.sty'.
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index f2286405af1..b062e5d3f98 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -140,7 +140,7 @@ my @WorkingTLP = qw(
pdfcrop
pdfpages pdfscreen pdfsync pdftex-def perception perltex permute
petiteannonce
- pgf pgf-soroban pgfplots phaistos philex philosophersimprint
+ pgf pgf-soroban pgfopts pgfplots phaistos philex philosophersimprint
pict2e pictex pictex2 pinlabel pittetd placeins plari plates play
plnfss
poemscol polski polynom polynomial polytable powerdot ppr-prv
diff --git a/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc b/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc
index 6c69f47856a..b3c8471b5c1 100644
--- a/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc
@@ -15,6 +15,7 @@ depend pb-diagram
depend petri-nets
depend pgf
depend pgf-soroban
+depend pgfopts
depend pgfplots
depend picinpar
depend pict2e
diff --git a/Master/tlpkg/tlpsrc/pgfopts.tlpsrc b/Master/tlpkg/tlpsrc/pgfopts.tlpsrc
new file mode 100644
index 00000000000..28152d025eb
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/pgfopts.tlpsrc
@@ -0,0 +1,2 @@
+name pgfopts
+category Package