You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
521 lines
16 KiB
521 lines
16 KiB
% \CheckSum{306}
|
|
% \iffalse meta-comment
|
|
% ======================================================================
|
|
% scrwfile.dtx
|
|
% Copyright (c) Markus Kohm, 2010-2020
|
|
%
|
|
% 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-2020
|
|
%
|
|
% 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: $Id: scrwfile.dtx 3453 2020-02-25 07:33:30Z kohm $
|
|
%<*dtx>
|
|
\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
|
|
\ProvidesFile{scrwfile.dtx}
|
|
%</dtx>
|
|
%<(package&identify)|driver>\NeedsTeXFormat{LaTeX2e}[1995/06/01]
|
|
%<package&identify>\ProvidesPackage{scrwfile}
|
|
%<driver>\ProvidesFile{scrwfile.drv}
|
|
%<*dtx|(package&identify)|driver>
|
|
[2013/08/05 v0.1f-alpha KOMA-Script package (write and clone files)]
|
|
%</dtx|(package&identify)|driver>
|
|
%<*dtx>
|
|
\ifx\documentclass\undefined
|
|
\input scrdocstrip.tex
|
|
\@@input scrstrip.inc
|
|
\KOMAdefVariable{COPYRIGHTFROM}{2010}
|
|
|
|
\generate{\usepreamble\defaultpreamble
|
|
\file{scrwfile.sty}{%
|
|
\from{scrwfile.dtx}{package,trace,scrwfile,identify,option,body}%
|
|
\from{scrlogo.dtx}{logo}%
|
|
}%
|
|
}
|
|
|
|
\@@input scrstrop.inc
|
|
\else
|
|
\let\endbatchfile\relax
|
|
\fi
|
|
\endbatchfile
|
|
%</dtx>
|
|
%<*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
|
|
\providecommand\PParameter[1]{\mbox{\texttt{\{#1\}}}}
|
|
\let\PName\meta
|
|
\let\PValue\texttt
|
|
\providecommand*{\important}[1]{}
|
|
\providecommand*{\autoref}[1]{\expandafter\AUTOREF#1:}
|
|
\providecommand*{\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}%
|
|
}
|
|
\providecommand*{\IndexCmd}[2][]{}
|
|
\providecommand*{\textnote}[2][]{}
|
|
\makeatother
|
|
|
|
\begin{document}
|
|
\maketitle
|
|
\DocInput{\filename}
|
|
\end{document}
|
|
%</driver>
|
|
% \fi
|
|
%
|
|
% \selectlanguage{english}
|
|
%
|
|
% \changes{v0.1}{2010/10/01}{start of new package}
|
|
% \changes{v0.1g}{2014/10/13}{manual moved to \KOMAScript{} manual}
|
|
%
|
|
% \StopEventually{%
|
|
% \clearpage
|
|
% \PrintIndex\PrintChanges}
|
|
%
|
|
%
|
|
% \section{Implementation of \Package{scrwfile}}
|
|
%
|
|
% \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}
|
|
% \changes{v0.1e}{2013/07/24}{take care for unfriendly \textsl{hyperref}}
|
|
% This is the original definition, that will be used, if the file is not under
|
|
% \texttt{scrwfile}'s control. Because of package \textsl{hyperref}, that does
|
|
% a hard redefinition without any care for changed definitions, we have to
|
|
% take care for that unfriendly package and cannot do a simple
|
|
% \begin{verbatim}
|
|
% \let\scrwfile@saved@starttoc\@starttoc
|
|
% \let\@starttoc\scrwfile@starttoc
|
|
% \end{verbatim}
|
|
% \begin{macrocode}
|
|
\newcommand*{\scrwfile@saved@starttoc}{}
|
|
\AtBeginDocument{%
|
|
\begingroup
|
|
\@ifpackageloaded{hyperref}{%
|
|
\scr@ifundefinedorrelax{Hy@AtBeginDocument}{%
|
|
\PackageWarning{scrwfile}{%
|
|
Incompatible `hyperref` package detected!\MessageBreak
|
|
You are using a `hyperref` version, that\MessageBreak
|
|
doesn't provide `\string\Hy@AtBeginDocument`.\MessageBreak
|
|
This may or may not work.\MessageBreak
|
|
Using immediate redefinition%
|
|
}%
|
|
\aftergroup\@firstofone
|
|
}{%
|
|
\def\reserved@a{\AtBeginDocument}%
|
|
\ifx\Hy@AtBeginDocumentHook\@undefined
|
|
\PackageInfo{scrwfile}{%
|
|
Using immediate redefinition%
|
|
}%
|
|
\aftergroup\@firstofone
|
|
\else
|
|
\PackageInfo{scrwfile}{%
|
|
Using `\string\Hy@AtBeginDocument`%
|
|
}%
|
|
\aftergroup\Hy@AtBeginDocument
|
|
\fi
|
|
}%
|
|
}{%
|
|
\aftergroup\@firstofone
|
|
}%
|
|
\endgroup
|
|
{%
|
|
\PackageInfo{scrwfile}{%
|
|
Extending `\string\@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}
|
|
% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
|
|
% \changes{v3.28}{2019/11/19}{\cs{ifattoclist} replaced by
|
|
% \cs{Ifattoclist}}%^^A
|
|
% \changes{v3.28}{2019/11/19}{\cs{iftocfeature} replaced by
|
|
% \cs{Iftocfeature}}%^^A
|
|
% \changes{v3.30}{2020/02/25}{spurious space in warning message removed}%^^A
|
|
% 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
|
|
%%% mode: flyspell
|
|
%%% ispell-local-dictionary: "english"
|
|
%%% TeX-master: t
|
|
%%% End:
|
|
|