From 3c83ff430f9038fe824468a3a6df3cd66cff0016 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Wed, 7 Mar 2012 00:36:15 +0000
Subject: koma-script (6mar12)

git-svn-id: svn://tug.org/texlive/trunk@25573 c570f23f-e606-0410-a88d-b1316a301751
---
 .../source/latex/koma-script/scrwfile.dtx          | 731 +++++++++++++++++++++
 1 file changed, 731 insertions(+)
 create mode 100644 Master/texmf-dist/source/latex/koma-script/scrwfile.dtx

(limited to 'Master/texmf-dist/source/latex/koma-script/scrwfile.dtx')

diff --git a/Master/texmf-dist/source/latex/koma-script/scrwfile.dtx b/Master/texmf-dist/source/latex/koma-script/scrwfile.dtx
new file mode 100644
index 00000000000..e69ab6504ce
--- /dev/null
+++ b/Master/texmf-dist/source/latex/koma-script/scrwfile.dtx
@@ -0,0 +1,731 @@
+% \CheckSum{271}
+% \iffalse meta-comment
+% ======================================================================
+% scrwfile.dtx
+% Copyright (c) Markus Kohm, 2010-2012
+%
+% This file is part of the LaTeX2e KOMA-Script bundle.
+%
+% This work may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, version 1.3c of the license.
+% 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 and of this work.
+%
+% This work has the LPPL maintenance status "author-maintained".
+%
+% The Current Maintainer and author of this work is Markus Kohm.
+%
+% The KOMA-Script bundle consists of all files listed in manifest.txt.
+% The work `scrwfile' consists of the files `scrwfile.dtx' and 
+% `scrlogo.dtx'.
+%
+% If you're missing the installation batch file `scrwfile.ins', try
+%    tex scrwfile.dtx
+% to unpack all files. 
+% The package documentation may be produced repeating
+%    latex scrwfile.dtx
+% at least three times.
+% ----------------------------------------------------------------------
+% scrwfile.dtx
+% Copyright (c) Markus Kohm, 2010-2012
+%
+% Diese Datei ist Teil des LaTeX2e KOMA-Script-Pakets.
+%
+% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
+% Version 1.3c.
+% Die neuste Version dieser Lizenz ist
+%   http://www.latex-project.org/lppl.txt
+% und Version 1.3c ist Teil aller Verteilungen von LaTeX
+% Version 2005/12/01 und dieses Werks.
+%
+% Dieses Werk hat den LPPL-Verwaltungs-Status "author-maintained"
+% (allein durch den Autor verwaltet).
+%
+% Der Aktuelle Verwalter und Autor dieses Werkes ist Markus Kohm.
+%
+% Das KOMA-Script-Paket besteht aus allen Dateien, die in manifest.txt
+% genannt sind.
+% Das Werk `scrwfile' besteht aus den Dateien `scrwfile.dtx' und
+% `scrlogo.dtx'.
+%
+% Falls Sie die Installations-Batch-Datei `scrwfile.ins' vermissen,
+% probieren Sie einfach einmal
+%    tex scrwfile.dtx
+% um alle Dateien auszupacken. Zur englischen Anleitung siehe den
+% englischen Kommentar oben.
+% ======================================================================
+% \fi
+%
+% \CharacterTable
+%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%   Digits        \0\1\2\3\4\5\6\7\8\9
+%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%   Dollar        \$     Percent       \%     Ampersand     \&
+%   Acute accent  \'     Left paren    \(     Right paren   \)
+%   Asterisk      \*     Plus          \+     Comma         \,
+%   Minus         \-     Point         \.     Solidus       \/
+%   Colon         \:     Semicolon     \;     Less than     \<
+%   Equals        \=     Greater than  \>     Question mark \?
+%   Commercial at \@     Left bracket  \[     Backslash     \\
+%   Right bracket \]     Circumflex    \^     Underscore    \_
+%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%   Right brace   \}     Tilde         \~}
+%
+% \iffalse
+%%% From File: scrwfile.dtx
+%<*dtx>
+\def\LaTeXformat{LaTeX2e}
+\ifx\fmtname\LaTeXformat
+  \makeatletter
+    \let\saved@@end\@@end
+    \def\@@end{\csname fi\endcsname\saved@@end}
+  \makeatother
+  \ProvidesFile{scrwfile.dtx}
+%</dtx>
+%<(package&identify)|driver>\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+%<package&identify>\ProvidesPackage{scrwfile}
+%<driver>\ProvidesFile{scrwfile.drv}
+%<doc>\ProvidesFile{scrwfile.tex}
+%<*dtx|(package&identify)|driver|doc>
+  [2011/09/11 v0.1c-alpha LaTeX2e KOMA-Script package (write and clone files)]
+%</dtx|(package&identify)|driver|doc>
+%<*driver>
+  \documentclass{scrdoc}
+  \usepackage[ngerman,english]{babel}
+  \usepackage{listings}
+  \lstnewenvironment{lstcode}[1][]{%
+    \lstset{language=[LaTeX]TeX,basicstyle=\ttfamily\small,#1}%
+  }{}
+
+  \CodelineIndex
+  \RecordChanges
+  \GetFileInfo{scrwfile.dtx}
+  \title{The \KOMAScript{} package \texttt{scrwfile}%
+    \footnote{This is version \fileversion\ of file \texttt{\filename}.}}
+  \date{\filedate}
+  \author{Markus Kohm}
+  
+  \newenvironment{Explain}{\par}{\par}
+  \let\Macro\cs
+  \let\Package\textsf
+  \let\File\texttt
+  \let\Option\texttt
+  \let\Counter\texttt
+  \let\ShowOutput\quote
+  \let\endShowOutput\endquote
+  \let\Parameter\marg
+  \let\OParameter\oarg
+  \newcommand\PParameter[1]{\mbox{\texttt{\{#1\}}}}
+  \let\PName\meta
+  \let\PValue\texttt
+  \providecommand*{\autoref}[1]{\expandafter\AUTOREF#1:}
+  \newcommand*{\AUTOREF}{}
+  \makeatletter
+  \def\AUTOREF#1:#2:{%
+    \edef\@tempa{#1}%
+    \edef\@tempb{tab}\ifx\@tempa\@tempb table~\fi
+    \edef\@tempb{sec}\ifx\@tempa\@tempb section~\fi
+    \ref{#1:#2}%
+  }
+  \makeatother
+
+  \begin{document}
+  \maketitle
+  \DocInput{\filename}
+  \end{document}
+%</driver>
+%<*dtx>
+\fi
+% Now the installation driver:
+%</dtx>
+%<*insfile>
+\expandafter\let\expandafter\ifbeta\csname iffalse\endcsname
+\def\batchfile{scrwfile.dtx}
+\input docstrip.tex
+\ifToplevel{%
+  \Msg{**********************************************************************}
+  \Msg{*}
+  \Msg{* KOMA-Script presents scrwfile}
+  \Msg{* a package to define, configure and several different styles for}
+  \Msg{* table of contents, list of floats and the like.}
+  \Msg{*}
+  \Msg{* This is `\batchfile', a batch file to unpack the package scrwfile,}
+  \Msg{* the documentation of the package, and an archive of all these files.}
+  \Msg{*}
+  \Msg{**********************************************************************}
+  \keepsilent
+  \askforoverwritefalse
+}
+
+\preamble
+
+Copyright (c) 2010-2012 by Markus Kohm <komascript(at)gmx.info>
+
+This file was generated from file(s) of the KOMA-Script bundle.
+---------------------------------------------------------------
+
+This work may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, version 1.3c of the license.
+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 and of this work.
+
+This work has the LPPL maintenance status "author-maintained".
+
+The Current Maintainer and author of this work is Markus Kohm.
+
+This file may only be distributed together with the file
+`scrwfile.dtx' and `scrlogo.dtx'. You may however distribute the files
+`scrwfile.dtx' and `scrlogo.dtx' without this file.
+
+If this file is a beta version, you are not allowed to distribute it.
+
+English and German manuals are part of KOMA-Script bundle.
+----------------------------------------------------------
+
+The english manual is at `scrwfile.dtx', too.
+
+The KOMA-Script bundle (but not this file) was based upon the LaTeX2.09 
+Script family created by Frank Neukam 1993 and the LaTeX2e standard 
+classes created by The LaTeX3 Project 1994-1996.
+
+THIS IS AN ALPHA VERSION!
+USAGE OF THIS VERSION IS ON YOUR OWN RISK!
+EVERYTHING MAY HAPPEN!
+EVERYTHING MAY CHANGE IN FUTURE!
+THERE IS NO SUPPORT, IF YOU USE THIS PACKAGE!
+
+\endpreamble
+
+\generate{\usepreamble\defaultpreamble
+  \file{scrwfile.sty}{%
+    \ifx\ifbeta\iftrue\from{scrbeta.dtx}{package,scrwfile}\fi
+    \from{scrwfile.dtx}{package,trace,scrwfile,identify,option,body}%
+    \from{scrlogo.dtx}{logo}%
+  }%
+}
+
+\ifToplevel{%
+  \generate{\usepreamble\defaultpreamble
+    \file{scrwfile.ins}{%
+      \from{scrwfile.dtx}{insfile}%
+    }%
+    \file{scrwfile.tex}{%
+      \from{scrwfile.dtx}{doc}%
+    }%
+    \file{scrwfile.drv}{%
+      \from{scrwfile.dtx}{driver}%
+    }%
+  }%
+}
+
+\ifToplevel{%
+  \Msg{**********************************************************************}
+  \Msg{*}
+  \ifbeta
+  \Msg{* THIS IS AN ALPHA OR BETA VERSION. YOU SHOULD NOT INSTALL OR USE IT!}
+  \Msg{* THERE MAY BE A LOT OF BUGS AT THIS VERSION!}
+  \Msg{* PLEASE INSTALL THE RELEASE YOU MAY FIND AT CTAN OR BERLIOS!}
+  \else
+  \Msg{* To finish the installation you have to copy the file `scrwfile.sty'}
+  \Msg{* to folder `tex/latex/scrwfile/' of one of your TEXMF trees.}
+  \Msg{* You should also produce the documentation using}
+  \Msg{*\space\space latex scrwfile.dtx}
+  \Msg{* and copy it to folder `doc/latex/scrwfile/' of one of your}
+  \Msg{* TEXMF trees.}
+  \Msg{*}
+  \Msg{* See the manual of your TeX distribution for more informations about}
+  \Msg{* package installation.}
+  \fi
+  \Msg{*}
+  \Msg{**********************************************************************}
+}
+
+%</insfile>
+%<*dtx|doc>
+%<*dtx>
+\csname endinput\endcsname
+%</dtx>
+% \fi
+%
+% \selectlanguage{english}
+%
+% \changes{v0.1}{2010/10/01}{start of new package}
+%
+%\iffalse^^A meta comment
+\chapter[{Spare and Replace Files Using \Package{scrwfile}}]
+{Spare and Replace Files Using \Package{scrwfile}%
+  \footnote{This chapter has been generated from \File{scrwfile.dtx}.}%
+}
+\labelbase{scrwfile}
+
+%\fi^^A meta comment
+% \begin{abstract}
+\TeX{} supports 18 write handles only. Handle 0 is used
+by \TeX{} itself (log file). \LaTeX{} needs at least handle 1 for
+\Macro{@mainaux}, handle 2 for \Macro{@partaux}, one handle for
+\Macro{tableofcontents}, one handle for \Macro{listoffigures}, one
+handle for \Macro{listoftables}, one handle for \Macro{makeindex}. So
+there are 11 left. Seams a lot and enough. But every new float, every new
+index and several other packages, e.g., \Package{hyperref} need write
+handles, too. Loading \Package{scrwfile} minimizes the need of write
+handles for list of floats or tables of contents. Additionally it allows
+to clone entries from one file to another file.
+% \end{abstract}
+%
+% \tableofcontents
+
+\section{The Idea}
+\label{sec:scrwfile.idea}
+
+Table of contents, list of figures, list of tables and other content
+directories make use of a small amount of \LaTeX{} kernel macros to open
+helper files, write to those helper files and read them. The first macro is
+\Macro{@starttoc}. It is used inside of \Macro{tableofcontents},
+\Macro{listoffigure}, \Macro{listoftable} and many \Macro{listof} macros of
+several packages.
+
+The primary macro \Macro{@starttoc} reads the helper file with the contents
+of the directory. But this kernel macro also calls for a new write handle
+and even opens the helper file for writing. So every call of this macro
+consumes one of the rare write handles.
+
+But while the document is processed nobody writes to that handle until
+\Macro{end}\PParameter{document}. Every write operation should be done using
+\Macro{addtocontents} or \Macro{addcontentsline}, that internally uses
+\Macro{addtocontents}, too. The macro \Macro{addtocontents} does not really
+write to the helper file, but writes a \Macro{@writefile} macro to the main
+or part \File{aux} file.
+
+At \Macro{end}\PParameter{document} the main \File{aux} file is closed and
+after closing \LaTeX{} inputs the main \File{aux} file. While this reading
+the \Macro{@writefile} macros are processed and only then the helper
+files are written.
+
+You see, there is no need to hold the helper files open while the document
+is processed. The helper files need to be opened only before reading the
+\File{aux} file at \Macro{end}\PParameter{document}. Even you do not need
+one write handle per helper file, if you only could write one after the
+other. In this case only one write handle would be needed. And that's the
+idea.
+
+\section{Using the Package}
+\label{sec:scrwfile.usage}
+
+First of all you have to load the package. This may be simply done using
+\begin{lstcode}
+  \usepackage{scrwfile}
+\end{lstcode}
+or if you are a package author by using
+\begin{lstcode}
+  \RequirePackage{scrwfile}
+\end{lstcode}
+This also activates the \emph{single file feature}.
+
+\subparagraph*{Note:} The package \Package{scrwfile} may be used with other
+files, that redefine \Macro{@starttoc}. But if these files do a complete
+new definition of \Macro{@starttoc} you should load them before
+\Package{scrwfile} to avoid errors.
+
+\subsection{The Single File Feature}
+
+To activate the single file feature, that means, that \Macro{\@starttoc}
+does not longer consumes write handles and every open and write to helper
+file action will be done at \Macro{end}\PParameter{document}, you only need
+to load package \Package{scrwfile}.
+
+See \autoref{sec:scrwfile.idea} for more information about the idea of this
+feature.
+
+\subparagraph*{Note:} Package \Package{scrwfile} uses package
+\Package{scrlfile} to redefine \Macro{@writefile} while
+\Macro{end}\PParameter{document}. Instead of directly writing to the helper
+files \Macro{@writefile} itself will write to a new helper file
+\Macro{jobname}\File{.wrt}. To write all the helper files this will file be
+input several times. One time for each helper file.
+
+\subsection{The Clone File Write Feature}
+
+Sometimes it is useful to input a file not only once but several times. As
+\Macro{@starttoc} does not open files for writing any longer, this may be
+done by simply using \Macro{\@starttoc} several times with the same
+extension. But sometimes you may have additional entries in only some of the
+content directories. Because of this, \Package{scrwfile} allows to copy all
+entries of a file to another file, too. We call this cloning.
+
+%\iffalse^^A meta-comment
+\begin{Declaration}
+%\fi^^A meta-comment
+% \DescribeMacro{\TOCclone}
+% The command
+  \Macro{TOCclone}%
+  \OParameter{heading}\Parameter{source}\Parameter{destination}
+%\iffalse^^A meta-comment
+\end{Declaration}
+\BeginIndex{Cmd}{TOCclone}%
+%\fi^^A meta-comment
+activates the clone feature for files with extensions \PName{source} and
+\PName{destination}. All entries to the file
+\Macro{jobname}\File{.}\PName{source} will be added to
+\Macro{jobname}\File{.}\PName{destination}, too.
+
+If extension \PName{destination} is a new one, \PName{destination} will be
+added to the list of known extensions using the \KOMAScript{} package
+\Package{tocbasic}.
+
+If the optional argument \PName{heading} is given, a new list-of macro
+\Macro{listof}\PName{destination} is defined. \PName{heading} will be used
+as section (or chapter) heading of this list. In this case several
+\Package{tocbasic} features of the \PName{source} will be copied to
+\PName{destination}, if and only if they have been set up when
+\Macro{TOCclone} was used. Feature \PName{nobabel} will always be set,
+because the language selection commands are part of the helper file and
+would be cloned, too.
+
+% \subparagraph*{How you can use it:} 
+%\iffalse^^A meta-comment
+\begin{Example}
+%\fi^^A meta-comment
+E.g., you want a short table of contents
+with only the chapter level but an additional entry with the table of
+contents:
+\begin{lstcode}
+  \usepackage{scrwfile}
+  \TOCclone[Short \contentsname]{toc}{stoc}
+  \AtBeginDocument{%
+    % aux first opened at \begin{document}. So wait until this:
+    \addtocontents{toc}{% first toc entry:
+      \proctect\addcontentsline{stoc}{% write to Short Contents
+        \protect\tableofcontents% Contents
+      }%
+    }%
+  }
+  \begin{document}
+  \setcounter{tocdepth}{1}% show chapters only
+  \listofstoc% Write short table of contents
+  \setcounter{tocdepth}{6}% show all levels
+  \tableofcontents% Write table of contents
+\end{lstcode}
+You need at least three \LaTeX{} runs to get a short table of contents and a
+detailed table of contents. The detailed one produces an entry at the short
+one but this entry will not be part of the detailed table of contents.
+%\iffalse^^A meta-comment
+\end{Example}
+\EndIndex{Cmd}{TOCclone}
+%\fi^^A meta-comment
+ 
+%\iffalse
+%</dtx|doc>
+%\fi
+%
+% \StopEventually{%
+%   \clearpage
+%   \PrintIndex\PrintChanges}
+%
+%
+% \section{Implementation}
+%
+% \iffalse
+%<*package>
+%<*identify>
+% \fi
+%
+%    \begin{macrocode}
+\PackageWarningNoLine{scrwfile}{%
+  THIS IS AN ALPHA VERSION!\MessageBreak
+  USAGE OF THIS VERSION IS ON YOUR OWN RISK!\MessageBreak
+  EVERYTHING MAY HAPPEN!\MessageBreak
+  EVERYTHING MAY CHANGE IN FUTURE!\MessageBreak
+  THERE IS NO SUPPORT, IF YOU USE THIS PACKAGE!\MessageBreak
+  Maybe, it would be better not to load this package.%
+}
+%    \end{macrocode}
+%\iffalse
+%</identify>
+%\fi
+%
+% \subsection{Options}
+% \iffalse
+%<*option>
+% \fi
+%
+% Currently we don't need options.
+%
+% \iffalse
+%</option>
+% \fi
+%
+% \subsection{Body}
+% \iffalse
+%<*body>
+% \fi
+%
+% \subsubsection{Needed Packages}
+%
+% Package \textsf{scrbase} is needed, because of using several \KOMAScript{}
+% basic commands.
+%    \begin{macrocode}
+\RequirePackage{scrbase}[2010/09/17]
+%    \end{macrocode}
+%
+% Package \textsf{tocbasic} is needed for the lists of cloned TOCs.
+%    \begin{macrocode}
+\RequirePackage{tocbasic}[2010/10/01]
+%    \end{macrocode}
+%
+% Package \textsf{scrlfile} is needed because of the \texttt{aux} file
+% handling and \verb|\protected@immediate@write|.
+%    \begin{macrocode}
+\RequirePackage{scrlfile}[2010/09/30]
+%    \end{macrocode}
+%
+% \subsubsection{\LaTeX{} Kernel Patchs}
+%
+% For some features we need to patch \LaTeX{} kernel macros. Those features
+% and macros are:
+% \begin{description}
+% \item[Single handle feature] means, that \LaTeX{} will no longer need a file
+%   handle for every help file, but only one for all files. We will patch
+%  |\@starttoc| and |\@writefile| to do so.
+% \item[Clone file feature] means, that every write to one file may be done to
+%   another file, too. We will patch |\@writefile| to do so.
+% \end{description}
+% Every patch should be minimum invasive, so that files, that are not under
+% \textsf{scrwfile}'s control are changed as little as possible.
+%
+% \begin{macro}{\scrwfile@if@only}
+% First of all we check, if the file should be handled by \textsf{scrwfile}.
+%    \begin{macrocode}
+\newcommand*{\scrwfile@if@only}[1]{%
+  \begingroup
+    \scr@ifundefinedorrelax{scrwfile@only}{\@tempswatrue}{%
+      \@tempswafalse
+      \edef\reserved@b{#1}%
+      \@for\reserved@a:=\scrwfile@only\do
+        {\ifx\reserved@a\reserved@b\@tempswatrue\fi}%
+    }%
+    \if@tempswa
+      \scr@ifundefinedorrelax{scrwfile@never}{}{%
+        \edef\reserved@b{#1}%
+        \@for\reserved@a:=\scrwfile@only\do
+          {\ifx\reserved@a\reserved@b\@tempswafalse\fi}%
+      }%
+    \fi
+  \expandafter\endgroup
+  \if@tempswa
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\scrwfile@starttoc}
+% \begin{macro}{\scrwfile@@starttoc}
+% This is the internal redefinition of |\@starttoc|. First of all test, if it
+% should be used, then use it or not.
+%    \begin{macrocode}
+\newcommand*{\scrwfile@starttoc}[1]{%
+  \scrwfile@if@only{#1}{\scrwfile@@starttoc}{\scrwfile@saved@starttoc}{#1}%
+}
+\newcommand*{\scrwfile@@starttoc}[1]{%
+%<trace>  \typeout{Use my own \string\@starttoc\space for #1}%
+  \begingroup
+    \if@filesw
+      \xdef\scrwfile@writefilelist{\scrwfile@writefilelist,#1}%
+    \fi
+    \@fileswfalse
+    \scrwfile@saved@starttoc{#1}%
+  \endgroup
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\scrwfile@writefile}
+% \begin{macro}{\scrwfile@@writefile}
+% \begin{macro}{\scrwfile@wrtout}
+% \begin{macro}{\scrwfile@writefilelist}
+% This is the internal redefinition of |\@writefile|. First of all test, if it
+% should be used, then use it or not.
+%    \begin{macrocode}
+\newcommand*{\scrwfile@writefile}[1]{%
+  \scrwfile@if@only{#1}{\scrwfile@@writefile}{\scrwfile@saved@writefile}{#1}%
+}
+\newcommand{\scrwfile@@writefile}[2]{%
+%<trace>  \typeout{Use my own \string\@writefile\space for #1}%
+  \ifnum\scrwfile@wrtout>0
+    \begingroup
+      \@temptokena{#2}%
+      \immediate\write\scrwfile@wrtout{%
+        \string\@writefile{#1}{\the\@temptokena}%
+      }%
+%    \end{macrocode}
+% This was the entry for the real file. But we also may have clone files:
+%    \begin{macrocode}
+      \scrwfile@process@clones{#1}%
+    \endgroup
+  \fi
+}
+\chardef\scrwfile@wrtout\z@
+\newcommand*{\scrwfile@writefilelist}{}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@writefile}
+% We have to add the single handle feature and the clone file feature to this.
+% \begin{macro}{\scrwfile@saved@writefile}
+% This is the original definition, that will be used, if the file is not under
+% \texttt{scrwfile}'s control.
+%    \begin{macrocode}
+\newcommand*{\scrwfile@saved@writefile}{}
+\BeforeClosingMainAux{%
+  \ifx\scrwfile@writefilelist\@empty\else
+    \let\scrwfile@saved@writefile\@writefile
+    \let\scrwfile@wrtout\@partaux
+    \immediate\openout\scrwfile@wrtout \jobname.wrt
+    \let\@writefile\scrwfile@writefile
+  \fi
+}
+\AfterReadingMainAux{%
+  \ifx\scrwfile@writefilelist\@empty\else
+    \immediate\closeout\scrwfile@wrtout
+    \chardef\scrwfile@wrtout\z@
+    \begingroup
+      \let\@writefile\scrwfile@saved@writefile
+      \@for\@currext:=\scrwfile@writefilelist\do{%
+        \begingroup
+          \ifx\@currext\@empty\else
+            \scr@ifundefinedorrelax{tf@\@currext}{%
+%<trace>              \typeout{Process extension: `\@currext'}
+              \immediate\openout\@partaux \jobname.\@currext
+              \expandafter\let\csname tf@\@currext\endcsname\@partaux
+              \@input@{\jobname.wrt}%
+              \immediate\closeout\@partaux
+            }{}%
+          \fi
+        \endgroup
+      }%
+    \endgroup
+  \fi
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@starttoc}
+% We have to add the single handle feature to this.
+% \begin{macro}{\scrwfile@saved@starttoc}
+% This is the original definition, that will be used, if the file is not under
+% \texttt{scrwfile}'s control.
+%    \begin{macrocode}
+\newcommand*{\scrwfile@saved@starttoc}{}
+\let\scrwfile@saved@starttoc\@starttoc
+\let\@starttoc\scrwfile@starttoc
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Clone TOC Feature}
+%
+% \textsf{scrwfile} may clone a TOC, that means, every entry to one file will
+% be copied to other files, too.  You must not clone recursively!
+%
+% \begin{macro}{\scrwfile@process@clones}
+%    \begin{macrocode}
+\newcommand*{\scrwfile@process@clones}[1]{%
+  \scr@ifundefinedorrelax{scrwfile@clone@#1}{}{%
+    \begingroup
+      \let\@@protect\protect\let\protect\@empty\afterassignment\restore@protect
+      \edef\reserved@b{\csname scrwfile@clone@#1\endcsname}%
+      \edef\reserved@c{,#1}%
+      \@for \reserved@a:=\reserved@b\do {%
+        \@tempswatrue
+        \@for \reserved@d:=\reserved@c\do {%
+          \ifx\reserved@d\reserved@a\@tempswafalse\fi
+        }%
+        \if@tempswa
+%<trace>          \typeout{clone entry from `#1' to `\reserved@a'}%
+          \immediate\write\scrwfile@wrtout{%
+            \string\@writefile{\reserved@a}{\the\@temptokena}%
+          }%
+          \edef\reserved@c{\reserved@c,\reserved@a}%
+        \fi
+      }%
+    \endgroup
+  }%
+}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\TOCclone}
+% Clone the entries from the second (first mandatory) argument TOC to the
+% third (second mandatory) argument TOC.  If the first (optional) argument was
+% given, define |\listof#3name| to this and also define |\listof#3| and clone
+% the toc features \texttt{leveldown}, \texttt{numbered}, \texttt{onecolumn}
+% and \texttt{totoc} of |#2| to |#3|. The toc feature \texttt{nobabel} will
+% always be set, because the babel entries at TOC |#3| will be cloned from TOC
+% |#2|. \textbf{Note:} We use owner \texttt{TOCclone} for all cloned
+% extensions.
+%    \begin{macrocode}
+\newcommand*{\TOCclone}[3][]{%
+  \scr@ifundefinedorrelax{scrwfile@clone@#2}{%
+    \expandafter\protected@edef\csname scrwfile@clone@#2\endcsname{%
+      #3,\protect\csname scrwfile@clone@#3\endcsname
+    }%
+  }{%
+    \edef\reserved@b{\csname scrwfile@clone@#2\endcsname}%
+    \expandafter\protected@edef\csname scrwfile@clone@#2\endcsname{%
+      \csname scrwfile@clone@#2\endcsname,%
+      #3,%
+      \protect\csname scrwfile@clone@#3\endcsname
+    }%
+  }%
+  \scr@ifundefinedorrelax{scrwfile@clone@#3}{%
+    \expandafter\let\csname scrwfile@clone@#3\endcsname\@empty
+  }{}%
+  \ifattoclist{#3}{%
+    \PackageWarning{scrwfile}{`#3' already under control of
+      tocbasic.\MessageBreak
+      Nevertheless features will be set
+    }%
+  }{%
+    \addtotoclist[TOCclone]{#3}%
+  }%
+  \setuptoc{#3}{nobabel}%
+  \ifstr{#1}{}{%
+  }{%
+    \@namedef{listof#3name}{#1}%
+    \@namedef{listof#3}{\listoftoc{#3}}%
+    \iftocfeature{#2}{leveldown}{\setuptoc{#3}{leveldown}}{}%
+    \iftocfeature{#2}{numbered}{\setuptoc{#3}{numbered}}{}%
+    \iftocfeature{#2}{onecolumn}{\setuptoc{#3}{leveldownonecolumn}}{}%  
+    \iftocfeature{#2}{totoc}{\setuptoc{#3}{totoc}}{}%
+  }%
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</body>
+%</package>
+% \fi
+%
+% \Finale
+%
+\endinput
+%
+% end of file `scrwfile.dtx'
+%%% Local Variables:
+%%% mode: doctex
+%%% TeX-master: t
+%%% End:
-- 
cgit v1.2.3

