summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/koma-script/source/scrwfile.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/koma-script/source/scrwfile.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/koma-script/source/scrwfile.dtx')
-rw-r--r--macros/latex/contrib/koma-script/source/scrwfile.dtx515
1 files changed, 515 insertions, 0 deletions
diff --git a/macros/latex/contrib/koma-script/source/scrwfile.dtx b/macros/latex/contrib/koma-script/source/scrwfile.dtx
new file mode 100644
index 0000000000..453d708d8e
--- /dev/null
+++ b/macros/latex/contrib/koma-script/source/scrwfile.dtx
@@ -0,0 +1,515 @@
+% \CheckSum{306}
+% \iffalse meta-comment
+% ======================================================================
+% scrwfile.dtx
+% Copyright (c) Markus Kohm, 2010-2014
+%
+% 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-2014
+%
+% 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 1805 2014-10-13 08:55:20Z 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}
+% 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: