summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2012-05-10 23:11:16 +0000
committerKarl Berry <karl@freefriends.org>2012-05-10 23:11:16 +0000
commit2b98282d58db23ce342019c8f3aacfa417eb61b1 (patch)
tree593c8bb698dc1539b31ba2bb9296c29c94ede74d
parentdd4ed517c862a027861583962334b41bf201ce5f (diff)
new generic package dowith (10may12)
git-svn-id: svn://tug.org/texlive/trunk@26292 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/generic/dowith/README52
-rw-r--r--Master/texmf-dist/doc/generic/dowith/dowith.pdfbin0 -> 350824 bytes
-rw-r--r--Master/texmf-dist/source/generic/dowith/SrcFILEs.txt15
-rw-r--r--Master/texmf-dist/source/generic/dowith/dowith.tex194
-rw-r--r--Master/texmf-dist/source/generic/dowith/srcfiles.tex14
-rw-r--r--Master/texmf-dist/tex/generic/dowith/dowith.sty192
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check2
-rw-r--r--Master/tlpkg/tlpsrc/collection-genericextra.tlpsrc1
-rw-r--r--Master/tlpkg/tlpsrc/dowith.tlpsrc0
9 files changed, 469 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/generic/dowith/README b/Master/texmf-dist/doc/generic/dowith/README
new file mode 100644
index 00000000000..0c97c7cc289
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/dowith/README
@@ -0,0 +1,52 @@
+
+ README for the `dowith' package
+ Apply Command to List Items - no Separators, no Iterator
+ (C) Uwe Lueck 2012/05/10
+
+
+`dowith.sty' provides macros for applying a command to all
+elements of a list without separators, such as
+`\DoWithAllIn{<cmd>}{<list-macro>}', and also for extending
+and reducing macros storing such lists. Applications in mind
+belonged to \LaTeX, but the package should work with other
+formats as well. Loop and list macros in other packages are
+discussed. There is an emphasis on expandability (no iterator),
+without relying on e-TeX.
+
+Privately, I have used macros for a more powerful package where
+the command may have more than one argument and there is a
+"separator" in output, such as a comma or a vertical stroke
+between links. This extended package may soon appear here as well.
+
+KEYWORDS: macro programming, loops, list macros
+
+RELATED PACKAGES: etextools, etoolbox, forarray, forloop,
+multido, moredefs, lmake, texapi, xfor, xspace
+
+LICENSE:
+
+The package file `dowith.sty' and the documentation files
+`dowith.pdf' and `dowith.tex' can be redistributed and/or
+modified under the terms of the LaTeX Project Public License;
+either version 1.3c of the License, or any later version, see
+
+ http://www.latex-project.org/lppl.txt
+
+We did our best to help you, but there is NO WARRANTY.
+
+The `dowith' package is author-maintained in the sense of
+this license.
+
+The latest public version of the package is available at
+
+ http://mirror.ctan.org/macros/generic/contrib/dowith/
+
+A TDS version of the package is available as
+
+ http://mirror.ctan.org/install/macros/generic/contrib/dowith.tds.zip
+
+Please report bugs, problems, and suggestions via
+
+ http://www.contact-ednotes.sty.de.vu
+
+
diff --git a/Master/texmf-dist/doc/generic/dowith/dowith.pdf b/Master/texmf-dist/doc/generic/dowith/dowith.pdf
new file mode 100644
index 00000000000..af9e9a0048d
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/dowith/dowith.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/generic/dowith/SrcFILEs.txt b/Master/texmf-dist/source/generic/dowith/SrcFILEs.txt
new file mode 100644
index 00000000000..48f98f04414
--- /dev/null
+++ b/Master/texmf-dist/source/generic/dowith/SrcFILEs.txt
@@ -0,0 +1,15 @@
+
+ *File List*
+ dowith.sty 2011/11/19 v0.2 simple list loop (UL)
+ dowith.tex 2012/05/10 -- documenting dowith.sty
+fifinddo.sty 2012/01/20 v0.51 filtering TeX(t) files by TeX (UL)
+ makedoc.sty 2011/11/19 v0.42 TeX input from *.sty (UL)
+niceverb.sty 2011/12/05 v0.44 minimize doc markup (UL)
+ makedoc.cfg 2012/05/10 -- documentation settings
+mdoccorr.cfg 2011/12/03 -- makedoc local typographical corrections
+srcfiles.tex 2012/12/10 -- file infos -> SrcFILEs.txt
+ ***********
+
+ List made at 2012/05/10, 11:48
+ from script file srcfiles.tex
+
diff --git a/Master/texmf-dist/source/generic/dowith/dowith.tex b/Master/texmf-dist/source/generic/dowith/dowith.tex
new file mode 100644
index 00000000000..de7b4c5aa7f
--- /dev/null
+++ b/Master/texmf-dist/source/generic/dowith/dowith.tex
@@ -0,0 +1,194 @@
+\ProvidesFile{dowith.tex}[2012/05/10 documenting dowith.sty]
+\title{\kern-\baselineskip
+ \textsf{\huge dowith.sty}\\---\\Apply Command
+ to Elements of Lists without Separators\,---\,
+ and without Iterator\thanks{This
+ document describes version
+ \textcolor{blue}{\UseVersionOf{\jobname.sty}}
+ of \textsf{\jobname.sty} as of \UseDateOf{\jobname.sty}.}}
+{ \RequirePackage{makedoc} \ProcessLineMessage{}
+ \renewcommand*\mdSectionLevelOne{\string\subsection}
+ \renewcommand*\mdSectionLevelTwo{\string\subsubsection}
+ \MakeJobDoc{16}%% 2011/09/06
+ {\SectionLevelTwoParseInput} }
+\documentclass[fleqn]{article}%% TODO paper dimensions!?
+\input{makedoc.cfg} %% shared formatting settings
+\ReadPackageInfos{dowith}
+% \usepackage{dowith}
+\sloppy
+\MDkeywords{macro programming, loops, list macros}
+\hypersetup{%
+ pdftitle=dowith.sty handles lists without separators,
+ pdfsubject=documenting dowith.sty
+}%% /2011/08/22
+\begin{document}
+\maketitle
+\begin{MDabstract}\noindent
+This package provides macros for applying a command
+to all elements of a list without separators, such as
+`\DoWithAllIn{<cmd>}{<list-macro>}', and also for extending
+and reducing macros storing such lists. Applications in mind belonged
+to \LaTeX, but the package should work with other formats as well.
+Loop and list macros in other packages are discussed.
+%% 2012/05/09:
+There is an emphasis on expandability
+(no \Wikienref{iterator}), %% 2012/05/10
+without relying on \CtanPkgRef{e-tex}{$\varepsilon$-\TeX}.
+\MDaddtoabstract{Related packages}
+\pkg{etextools}, \pkg{etoolbox}, \pkg{forarray},
+\pkg{forloop}, \pkg{multido}, \pkg{moredefs}, \pkg{lmake},
+\pkg{texapi}, \pkg{xfor}, \pkg{xspace}
+\end{MDabstract}
+\tableofcontents
+
+% \newpage
+% \section{Features and Usage}
+\section{Usage}
+
+% \subsection{Installing and Calling}
+The file 'dowith.sty' is provided ready, installation only requires
+putting it somewhere where \TeX\ finds it
+(which may need updating the filename data
+ base).\urlfoot{ukfaqref}{inst-wlcf} %% corr. 2011/02/08
+
+With \LaTeX,
+you load 'dowith.sty' (as usually) by
+\begin{verbatim}
+ \usepackage{dowith}
+\end{verbatim}
+below the `\documentclass' line(s) and above `\begin{document}'.
+However, the package can also be used with other formats, just
+\begin{verbatim}
+ \input dowith.sty
+\end{verbatim}
+The single commands that the package provides are described below
+together with their implementation.
+
+% \section{Example}
+
+\section{Similar Commands in other Packages}
+The \CtanPkgRef{etex}{$\varepsilon$-TeX}-related %% e->... 2012/05/09
+packages \ctanpkgref{etextools}
+(Florent Chervet), \ctanpkgref{etoolbox} (Philipp Lehman),
+and \ctanpkgref{texapi} (Paul Isambert) seem to include and
+(very much) extend the functionality of 'dowith'.
+Also the `\ForEach'\texttt{\dots\unkern} macros of
+\ctanpkgref{forarray} (Christian Schr\"oppel) seem to extend
+the present `\DoWith'\texttt{\dots\unkern} commands.
+\ctanpkgref{moredefs} (Matt Swift) provides list handling commands
+like the few that are here.\footnote{\ctanpkgref{arrayjobx}
+ provides somewhat ``exotic" handling of ``lists".} %% 2012/05/10
+(I~do not want to load that much.)
+
+Regarding \LaTeX\ macros in `latex.ltx', the basic macro `\DoWith' of
+the present package resembles `\@tfor' very much, which likewise deals
+with lists without separators. By contrast, \LaTeX's `\@for' deals with
+comma-separated lists (such as lists of options).
+
+A major difference between `\DoWith' and `\@tfor' is that the latter
+uses a ``loop variable" or rather ``\Wikienref{iterator}"
+to which the elements of the list are
+assigned. `\DoWith<cmd>' does not use such a loop variable
+or such assignments and thus is ``expandable" at least when <cmd>
+(and the elements, depending on <cmd>) are expandable.
+On the other hand, `\@tfor' applies some procedure to the list
+elements without needing a \emph{name} for the procedure
+(or a \emph{macro} storing the procedure).
+
+What about \ctanpkgref{forloop} (Nick Setzer),
+\ctanpkgref{multido} (Timothy Van Zandt, Rolf Niepraksch, Herbert
+Vo\ss), and \ctanpkgref{xfor} (Nicola Talbot)?
+
+'xfor' is just a reimplementation of `\@for'.
+'forloop' and 'multido' are more close to ``real \qtd{for} loops"
+(cf.\ \wikienref{for loop}{\meta{Wikipedia}}).
+Loops of the latter kind go through a certain set as well,
+but such sets rather consist of \emph{numbers} and are exhausted
+by incrementing (or also decrementing) variables (counters).
+This is essentially not needed when a list literally is
+\emph{enumerated}---such loops are distinguished as
+``\wikienref{Foreach loop}{foreach loops}." %% W -> w 2012/05/10
+I wondered whether behind \LaTeX's
+`\@tfor' (and `\@for') there was an ``ideological" consideration
+such as ``A loop must have a loop variable!" However,
+avoiding usage of a macro name and a macro parameter may have been
+a good reason.
+
+Commands like `\DoWith' also save tokens thinking of list macros
+(in \LaTeX/`latex.ltx') that use a \emph{separator macro}
+which may be used as a \emph{command} to be applied to the list
+elements. One example is
+`\dospecials' that already is in Plain \TeX\ and expands to
+\[`\do\ \do\\\do\{\do\}\do\$\do\&\do\#\do\^\do\_\do\%\do\~'\]
+% \begin{verbatim}
+% `\do\ \do\\\do\{\do\}\do\$\do\&\do\#\do\^\do\_\do\%\do\~'
+% \end{verbatim}
+An important application of `\dospecials' is temporarily
+switching off the ``special" functionality of the ``elements"
+in `\dospecials'. With \LaTeX, this may happen thus:
+\[`\let\do\@makeother\dospecials'\]
+% \begin{verbatim}
+% `\let\do\@makeother
+% \end{verbatim}
+With 'dowith', you can do the same with a shorter variant
+`\specials' of `\dospecials', defined by
+\[`\def\specials{\ \\\{\}\$\&\#\^\_\%\~}'\]
+and then
+\[`\DoWithAllIn\@makeother\specials'\]
+`latex.ltx' uses `\@elt' instead of `\do' for its own list macros.
+
+%% added 2011/11/03:
+There also is |\loop<loop-body>\repeat| in Plain \TeX\ and a
+refined version of it in `latex.ltx'. It is \emph{not} expandable
+since it starts with an assignment for `\body' (Plain \TeX) or
+`\iterate' (`latex.ltx'). As to the programming structure,
+it is so simple and general that you cannot immediately see
+what kind of loops it addresses. However, the applications
+I have seen have been ``for" or (rather) ``while" loops.
+``While" loops can ``emulate" ``for" and ``foreach" loops
+by having the ``incrementation" method or the ``enumeration" method in
+their body. This is quite obvious for ``for" loops, not quite so for
+``foreach" loops; which for practical application (in my view) means
+that neither \LaTeX/\TeX's `\loop' macro nor in general ``while" loops
+is/are very helpful for implementing ``foreach" loops,
+as rather `\DoWith' and similar constructions are.
+The reason for this is (as it seems to me) is that you
+(a human being) can much more easily enumerate (``list")
+the items of a list (you have in mind) than define the \emph{method}
+that (allegedly) is behind your enumeration. \ \meta{Example:}
+\[`\DoWithAllOf{\printsamplearea}{\red\green\blue}'\]
+---\emph{how} (according to what ``method"?) did you ``proceed" from
+`\red' to `\green' and from `\green' to `\blue'?
+
+%% 2011/11/07:
+In \LaTeX's \ctanpkgref{tools} bundle, \ctanpkgref{xspace}
+has a list macro `\@xpspace@exceptions@tlp' without separators.
+It is handled like here, except that it ``breaks" the loop
+when an item is found that applies.
+% %% 2011/11/10:
+% Also Heiko Oberdiek's \ctanpkgref{zref} deals with ``lists" of
+% ``properties" of ``entities,"
+%% 2011/11/11: comma separated!
+
+%% 2012/05/09f.:
+The more recent \ctanpkgref{lmake} provides a key-value syntax
+for printing lists of complex mathematical expressions easily
+(using some assignments)
+as well as defining commands according to a pattern from a list.
+
+ \pagebreak %% 2011/11/03
+\section{Implementation} %% 2012/05/10
+\subsection{Package File Header (Legalese)} %% sub 2012/05/10
+\input{dowith.doc}
+\end{document}
+
+VERSION HISTORY
+
+2011/11/02 for v0.1 very first
+2011/11/03 discussing \loop; \pagebreak
+2011/11/07 xspace
+2011/11/10f. zref added/removed
+2012/05/09 for v0.2 $\varepsilon$-\TeX
+2012/05/10 "iterator", \MDkeywords, \hypersetup,
+ Legalize -> Legalese, "Related packages",
+ tighter sectioning
diff --git a/Master/texmf-dist/source/generic/dowith/srcfiles.tex b/Master/texmf-dist/source/generic/dowith/srcfiles.tex
new file mode 100644
index 00000000000..0db90229e0a
--- /dev/null
+++ b/Master/texmf-dist/source/generic/dowith/srcfiles.tex
@@ -0,0 +1,14 @@
+\RequirePackage{nicefilelist}
+\MFfieldtemplate{f-base}{dowithxx}
+\RequirePackage{myfilist}
+\ProvidesFile{srcfiles.tex}[2012/12/10 file infos -> SrcFILEs.txt]
+\EmptyFileList %%% [readprov.sty,myfilist.sty]
+%% packages:
+\ReadPackageInfos{dowith}
+%% documentation:
+\ReadFileInfos{dowith}
+%% documentation settings and auxiliaries:
+\ReadPackageInfos{fifinddo,makedoc,niceverb}
+\ReadFileInfos{makedoc.cfg,mdoccorr.cfg}
+\ReadFileInfos{srcfiles}
+\ListInfos[SrcFILEs.txt]
diff --git a/Master/texmf-dist/tex/generic/dowith/dowith.sty b/Master/texmf-dist/tex/generic/dowith/dowith.sty
new file mode 100644
index 00000000000..89e34b74d3c
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/dowith/dowith.sty
@@ -0,0 +1,192 @@
+\def\filename{dowith} \def\fileinfo{simple list loop (UL)}
+\def\filedate{2011/11/19} \def\fileversion{v0.2}
+%% Copyright (C) 2011 Uwe Lueck,
+%% http://www.contact-ednotes.sty.de.vu
+%% -- author-maintained in the sense of LPPL below --
+%%
+%% This file can be redistributed and/or modified under
+%% the terms of the LaTeX Project Public License; either
+%% version 1.3c of the License, or any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% We did our best to help you, but there is NO WARRANTY.
+%%
+%% Please report bugs, problems, and suggestions via
+%%
+%% http://www.contact-ednotes.sty.de.vu
+%%
+%% == Proceeding without \LaTeX ==
+%% A little \LaTeX\ as in Bernd Raichle's %% 2011/11/19
+%% \CtanPkgRef{ngerman}{ngerman.sty}:
+\begingroup\expandafter\expandafter\expandafter\endgroup
+%% I need `\ProvidesPackage' for \ctanpkgref{fileinfo},
+%% my package version tools.
+\expandafter\ifx\csname ProvidesPackage\endcsname\relax
+%% %% 2011/11/07:
+%% When `\ProvidesPackage' is not defined, we provide
+%% a version of \LaTeX's `\in@'
+%% (an old version that may wrongly
+%% claim to have found an occurrence of a sequence,
+%% but is correct for single tokens)
+%% for checking token list macros.
+%% \LaTeX\ must not see `\ifin@' when it parses the
+%% `\ifx' conditional:
+ \expandafter\newif\csname ifin@\endcsname
+ \def\in@#1#2{%
+ \def\in@@##1#1##2##3\in@@{%
+ \ifx\in@##2\in@false\else\in@true\fi}%
+ \in@@#2#1\in@\in@@}
+%% 'readprov' stops reading the file at `\Provides'\texttt{...},
+%% therefore ...
+ \long\def\@gobble#1{} \expandafter\@gobble
+\else
+ \expandafter\@firstofone
+\fi
+{ \ProvidesPackage{\filename}[\filedate\space
+ \fileversion\space \fileinfo] }
+\chardef\atcode=\catcode`\@
+\catcode`\@=11 % \makeatletter
+%%
+%% == Applying a Command == %% 2011/11/07
+%% === Core ===
+%% |\DoWith{<cmd>}<list>\StopDoing| applies <cmd> to all elements
+%% of <list>. An element of <list> (after tokenizing)
+%% may be either a single token or a group `{<balanced>}'.
+\def\DoWith#1#2{%
+ \ifx\StopDoing#2%
+ \else#1{#2}\expandafter\DoWith\expandafter#1\fi}
+%% |\StopDoing| delimits the list:
+\let\StopDoing\DoWith
+%% ... something arbitrary that is not expected to occur in a list.
+%% With \[`\let\StopDoing*'\] instead, the star would end lists.
+%%
+%% |\DoWithAllOf{<cmd>}{<list>}| works like
+%% \[`\DoWith{<cmd>}<list>\StopDoing':\]
+\def\DoWithAllOf#1#2{\DoWith#1#2\StopDoing}
+%%
+%% === `&\do' being the Command ===
+%% \label{sec:do}
+%% When the <list> is worked at a single time in the \TeX\ run
+%% where assignments are possible, instead of introducing a new
+%% macro name for <cmd> you can use `\do' for <cmd> as a
+%% ``temporary" macro and define it right before
+%% \[`\DoWith{\do}<list>\StopDoing'\]
+%% However, we provide \[|\DoDoWith{<cmd>}<list>\StopDoing|\]
+%% as a substitute for the former line that at least saves one token.
+%% For the definition of `\do', we provide
+%% |\setdo{<def-text>}|.
+%% It works similarly to \[`\renewcommand{\do}[1]{<def-text>}',\]
+%% so <def-text> should contain a `#1':
+\def\setdo{\long\def\do##1}
+%% With |\letdo<cmd>| that is provided next where <cmd> is defined
+%% elsewhere, you could type
+%% \[`\letdo<cmd>\DoDoWith<list>\StopDoing'\]
+%% It seems to me, however, that you better type
+%% \[`\dowith<cmd><list>\StopDoing'\] instead.
+%% So I provide `\letdo' although I consider it useless here.
+%% It is provided somewhat for the sake of ``completeness,"
+%% thinking that it might be useful at other occasions such as
+%% preceding `\dospecials'.
+\def\letdo{\let\do}
+%% |\DoDoWith| has been described above:
+\def\DoDoWith{\DoWith\do}
+%% By analogy to `\DoWithAllOf', we provide
+%% |\DoDoWithAllOf{<list>}|:
+\def\DoDoWithAllOf{\DoWithAllOf\do}
+%%
+%% === Expand List Macro ===
+%% The former facilities may be quite useless
+%% as such a <list> will not be typed at a single place in the
+%% source code, rather the items to run <cmd> on may be collected
+%% occasionally when some routines run. The elements may be collected
+%% in a macro <list-macro> expanding to <list>.
+%% So we provide \[|\DoWithAllIn{<cmd>}{<list-macro>}|\]
+%% (or `\DoWithAllIn<cmd><list-macro>').
+%% There is no need to type `\StopDoing' here:
+\def\DoWithAllIn#1#2{%
+ \expandafter\DoWith\expandafter#1#2\StopDoing}
+%% |\DoDoWithAllIn{<list-macro>}| saves a backslash or token
+%% for `\do' as above in Sec.~\ref{sec:do}:
+\def\DoDoWithAllIn{\DoWithAllIn\do}
+%%
+%%
+%% == Handling List Macros ==
+%% === Initializing ===
+%% Here is some advanced `\let<cmd>\empty', perhaps a little
+%% irrelevant for practical purposes. Both
+%% \[|\InitializeListMacro{<list-macro>}|\] and
+%% \[|\ReInitializeListMacro{<list-macro>}|\] attempt to ``empty"
+%% <list-macro>, and when we don't believe that \LaTeX\ has been
+%% loaded, both do the same indeed. Otherwise the first one
+%% complains when <list-macro> seems to have been used earlier
+%% while the second complains when <list-macro> seems \emph{not} to
+%% have been used before:
+\expandafter\ifx\csname @latex@error\endcsname\relax
+ \def\InitializeListMacro#1{\let#1\empty} %% not \@empty 2011/11/07
+ \let\ReInitializeListMacro\InitializeListMacro
+\else
+ \def\InitializeListMacro#1{\@ifdefinable#1{\let#1\empty}}
+ \def\ReInitializeListMacro#1{%
+ \edef\@tempa{\expandafter\@gobble\string#1}%
+ \expandafter\@ifundefined\expandafter{\@tempa}%
+ {\@latex@error{\noexpand#1undefined}\@ehc}%
+ {\let#1\empty}}
+\fi
+%% |\ToListMacroAdd{<list-macro>}{<cmd-or>}|
+%% appends <cmd-or> to the replacement token list of <list-macro>.
+%% <cmd-or> may either be tokenized into a single token,
+%% or it is some `{<balanced>}'.
+\def\ToListMacroAdd#1#2{\DefExpandStart#1{#1#2}}
+\def\DefExpandStart#1{\expandafter\def\expandafter#1\expandafter}
+%%
+%% === Testing for Occurrence of a Token ===
+%% |\TestListMacroForToken{<list-macro>}{<cmd>}|
+%% sets `\in@true' when <cmd> occurs in <list-macro>
+%% and sets `\in@false' otherwise: %% 2011/11/07
+\def\TestListMacroForToken#1#2{%
+ \expandafter \in@ \expandafter #2\expandafter{#1}}
+%% Indeed I removed an earlier `\IfTokenInListMacro',
+%% now it's a kind of compromise between having a shorthand macro
+%% below and a generalization for users of the package.
+%%
+%% === Adding and Removing ===
+%% |\FromTokenListMacroRemove{<list-macro>}{<cmd>}|
+%% removes the token corresponding to <cmd> from the list
+%% stored in <list-macro>
+%% (our parsing method does not work with braces): %% 2011/11/07
+\def\FromTokenListMacroRemove#1#2{%
+%% I am not happy about defining \emph{two} parser macros,
+%% but for now ...
+ \TestListMacroForToken#1#2%
+ \ifin@
+ \def\RemoveThisToken##1#2{##1}%
+ \expandafter \DefExpandStart
+ \expandafter #1\expandafter {%
+ \expandafter\RemoveThisToken #1}%
+%% TODO warning otherwise?
+ \fi}
+%% %% 2011/11/07:
+%% ... but this only removes a single occurrence ...
+%% \[|\InTokenListMacroProvide{<list-macro>}{<cmd>}|\]
+%% avoids multiple entries of a token
+%% by \emph{not} adding anything when <cmd>
+%% already occurs in <list-macro> (again, this does not work with
+%% braces, try `\in@{{}}{{}}').
+\def\InTokenListMacroProvide#1#2{%
+ \TestListMacroForToken#1#2%
+ \ifin@ \else %% TODO warning?
+ \ToListMacroAdd#1#2%
+ \fi}
+%%
+%%
+%% == Leaving and History ==
+\catcode`\@=\atcode
+\endinput
+
+VERSION HISTORY
+v0.1 2011/06/23/28 stored separately
+v0.2 2011/11/02 simpler, documented
+ 2011/11/03 corrected \if/\else for init
+ 2011/11/07 \TestListMacroForToken, \InListMacroProvide;
+ doc.: \pagebreak, structure
+ 2011/11/19 modified LaTeX supplements
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index 4bd98a387d0..9a8547aac3d 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -131,7 +131,7 @@ my @TLP_working = qw(
dinat dinbrief dingbat directory dirtree dirtytalk disser dk-bib dlfltxb
dnaseq doc-pictex docmfp docmute documentation doi doipubmed
dosepsbin dot2texi dotarrow dotseqn dottex
- doublestroke dox dozenal dpfloat dprogress drac draftcopy
+ doublestroke dowith dox dozenal dpfloat dprogress drac draftcopy
draftwatermark dramatist dratex drawstack droid droit-fr drs drv
dtk dtxgallery
dtxtut duerer duerer-latex duotenzor dutchcal
diff --git a/Master/tlpkg/tlpsrc/collection-genericextra.tlpsrc b/Master/tlpkg/tlpsrc/collection-genericextra.tlpsrc
index 6b96c6949a8..6772a133001 100644
--- a/Master/tlpkg/tlpsrc/collection-genericextra.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-genericextra.tlpsrc
@@ -12,6 +12,7 @@ depend chronosys
depend colorsep
depend dinat
depend dirtree
+depend dowith
depend eijkhout
depend encxvlna
depend epigram
diff --git a/Master/tlpkg/tlpsrc/dowith.tlpsrc b/Master/tlpkg/tlpsrc/dowith.tlpsrc
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/dowith.tlpsrc