diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /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.dtx | 515 |
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: |