From 3c83ff430f9038fe824468a3a6df3cd66cff0016 Mon Sep 17 00:00:00 2001 From: Karl Berry 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} +% +%<(package&identify)|driver>\NeedsTeXFormat{LaTeX2e}[1995/06/01] +%\ProvidesPackage{scrwfile} +%\ProvidesFile{scrwfile.drv} +%\ProvidesFile{scrwfile.tex} +%<*dtx|(package&identify)|driver|doc> + [2011/09/11 v0.1c-alpha LaTeX2e KOMA-Script package (write and clone files)] +% +%<*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} +% +%<*dtx> +\fi +% Now the installation driver: +% +%<*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 + +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{**********************************************************************} +} + +% +%<*dtx|doc> +%<*dtx> +\csname endinput\endcsname +% +% \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 +% +%\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 +% +%\fi +% +% \subsection{Options} +% \iffalse +%<*option> +% \fi +% +% Currently we don't need options. +% +% \iffalse +% +% \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]{% +% \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]{% +% \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}{% +% \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 +% \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 +% +% +% \fi +% +% \Finale +% +\endinput +% +% end of file `scrwfile.dtx' +%%% Local Variables: +%%% mode: doctex +%%% TeX-master: t +%%% End: -- cgit v1.2.3