summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/koma-script/scrlfile.dtx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2011-01-27 19:01:38 +0000
committerKarl Berry <karl@freefriends.org>2011-01-27 19:01:38 +0000
commit2b311b90f06b68e1cb123c58c3b380ea6533eea0 (patch)
tree06df1db9ecc0e0557987e581462d056ef498e1ef /Master/texmf-dist/source/latex/koma-script/scrlfile.dtx
parent7d072ac46075608b02b7af6ac92a174183cbcb32 (diff)
koma-script (26jan11)
git-svn-id: svn://tug.org/texlive/trunk@21195 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/koma-script/scrlfile.dtx')
-rw-r--r--Master/texmf-dist/source/latex/koma-script/scrlfile.dtx182
1 files changed, 178 insertions, 4 deletions
diff --git a/Master/texmf-dist/source/latex/koma-script/scrlfile.dtx b/Master/texmf-dist/source/latex/koma-script/scrlfile.dtx
index 8a827a0ee86..91a7eed35fe 100644
--- a/Master/texmf-dist/source/latex/koma-script/scrlfile.dtx
+++ b/Master/texmf-dist/source/latex/koma-script/scrlfile.dtx
@@ -1,8 +1,8 @@
-% \CheckSum{322}
+% \CheckSum{514}
% \iffalse meta-comment
% ======================================================================
% scrlfile.dtx
-% Copyright (c) Markus Kohm, 2002-2010
+% Copyright (c) Markus Kohm, 2002-2011
%
% This file is part of the work `scrlfile' which is part of the LaTeX2e
% KOMA-Script bundle.
@@ -22,7 +22,7 @@
% `scrlogo.dtx' at least.
% ----------------------------------------------------------------------
% scrlfile.dtx
-% Copyright (c) Markus Kohm, 2002-2010
+% Copyright (c) Markus Kohm, 2002-2011
%
% Diese Datei ist Teil des Werks `scrlfile', das wiederum Teil des
% LaTeX2e KOMA-Script Pakets ist.
@@ -64,7 +64,7 @@
%%% From File: scrlfile.dtx
%<*driver|scrlfile|load>
% \fi
-\def\scrlfileversion{2009/03/25 v3.03}
+\def\scrlfileversion{2010/11/05 v3.08}
% \iffalse
%</driver|scrlfile|load>
%<*driver>
@@ -347,6 +347,20 @@
% Note: To replace classes you have to load \textsf{scrlfile} using
% \cs{RequirePackage} before loading the class.
%
+% \DescribeMacro{\PreventPackageFromLoading}
+% \DescribeMacro{\ResetPreventPackageFromLoading}
+% \DescribeMacro{\StorePreventPackageFromLoading}
+% The command \cs{PreventPackageFromLoading}\marg{package list}
+% does not replace a package by another but prevents packages from beeing
+% loaded even if they should be loaded using \cs{RequirePackage} or
+% \cs{usepackage}. The \meta{package list} is a comma seperated list of
+% packages, that should never be loaded. If you use the command several times,
+% the later \meta{package lists} will be added to the already existing. You
+% may use \cs{ResetPreventPackageFromLoading} to clean the \meta{package
+% list}. If you need to know the packages at the \meta{package list}, you may
+% use \cs{StorePackageFromLoading}\marg{command} to store the current list at
+% macro \meta{command}.
+%
% \DescribeMacro{\BeforeClosingMainAux}
% The command \cs{BeforeClosingMainAux}\marg{instructions}
% works different from all the commands above. Is isn't a
@@ -679,6 +693,148 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\PreventPackageFromLoading}
+% \changes{v3.08}{2010/11/04}{New}
+% \begin{macro}{\scrlfile@excludedpackages}
+% \changes{v3.08}{2010/11/04}{New (internal)}
+% \begin{macro}{\scrlfile@saved@RequirePackage}
+% \changes{v3.08}{2010/11/04}{New (internal)}
+% \begin{macrocode}
+\newcommand*{\scrlfile@excludedpackages}{}
+\let\scrlfile@excludedpackages\@empty
+\newcommand*{\scrlfile@saved@RequirePackage}{}
+\newcommand*{\PreventPackageFromLoading}[1]{%
+% \end{macrocode}
+% We do nothing, if the argument was empty:
+% \begin{macrocode}
+ \edef\reserved@b{#1}%
+ \ifx \reserved@b\@empty
+ \PackageWarning{scrlfile}{%
+ \string\PreventPackageFromLoading\space with empty argument\MesageBreak
+ ignored%
+ }%
+ \else
+% \end{macrocode}
+% If the argument was not empty we first need to patch \cs{RequirePackage} and
+% maybe \cs{usepackage} too.
+% \begin{macrocode}
+ \ifx\scrlfile@excludedpackages\@empty
+ \let\scrlfile@saved@RequirePackage\RequirePackage
+ \let\RequirePackage\scrlfile@RequirePackage
+ \def\reserved@a#1{%
+ \@latex@error
+ {\noexpand \usepackage before \string\documentclass}%
+ {\noexpand \usepackage may only appear in the document
+ preamble, i.e.,\MessageBreak
+ between \noexpand\documentclass and
+ \string\begin{document}.}%
+ \@gobble}%
+ \ifx\reserved@a\usepackage\else
+ \ifx\usepackage\scrlfile@saved@RequirePackage\else
+ \PackageWarning{scrlfile}{%
+ Maybe serious problem: unexpected definition of\MessageBreak
+ \string\usepackage
+ }%
+ \fi
+ \let\usepackage\RequirePackage
+ \fi
+ \fi
+% \end{macrocode}
+% We have to test, if a package was already loaded. Only not yet loaded
+% packages will be added to the exclusion list. Empty arguments will be
+% ignored.
+% \begin{macrocode}
+ \expandafter\@for \expandafter\reserved@a\expandafter:\expandafter=%
+ \reserved@b\do {%
+ \ifx\reserved@a\@empty\else
+ \expandafter\@ifpackageloaded\expandafter{\reserved@a}{%
+ \PackageWarning{scrlfile}{%
+ package `\reserved@a' already loaded.\MessageBreak
+ Cannot prevent it from beeing loaded%
+ }%
+ }{%
+ \edef\scrlfile@excludedpackages{,\reserved@a}%
+ }%
+ \fi
+ }%
+% \end{macrocode}
+% If the exclusion list is still empty (because all packages has been loaded
+% already), remove the patch:
+% \begin{macrocode}
+ \ifx\scrlfile@excludedpackages\@empty
+ \ResetPreventPackageFromLoading
+ \fi
+ \fi
+}
+\@onlypreamble\PreventPackageFromLoading
+% \end{macrocode}
+% \begin{macro}{\ResetPreventPackageFromLoading}
+% \changes{v3.08}{2010/11/04}{New}
+% \begin{macro}{\StorePreventPackageFromLoading}
+% \changes{v3.08}{2010/11/04}{New}
+% These two are very simple
+% \begin{macrocode}
+\newcommand*{\ResetPreventPackageFromLoading}{%
+ \let\scrlfile@excludedpackages\@empty
+ \ifx\RequirePackage\scrlfile@RequirePackage
+ \ifx\usepackage\RequirePackage
+ \let\usepackage\scrlfile@saved@RequirePackage
+ \fi
+ \let\RequirePackage\scrlfile@saved@RequirePackage
+ \fi
+}
+\@onlypreamble\ResetPreventPackageFromLoading
+\newcommand*{\StorePreventPackageFromLoading}[1]{%
+ \let#1\scrlfile@excludedpackages
+}
+\@onlypreamble\StorePreventPackageFromLoading
+% \end{macrocode}
+% \begin{macro}{\scrlfile@RequirePackage}
+% \changes{v3.08}{2010/11/04}{New (internal)}
+% This macro will replace \cs{RequirePackage} whenever the exlude list is not
+% empty
+% \begin{macrocode}
+\newcommand*{\scrlfile@RequirePackage}[2][]{%
+ \let\reserved@c\@empty
+ \@for\reserved@b:=#2\do {%
+ \begingroup
+ \@tempswatrue
+ \@for\reserved@a:=\scrlfile@excludedpackages\do {%
+ \ifx\reserved@a\reserved@b
+ \PackageInfo{scrlfile}{Excluding package `\reserved@b'\MessageBreak
+ from loading}%
+ \@tempswafalse
+ \fi
+ }%
+ \if@tempswa
+ \xdef\reserved@c{\reserved@c,\reserved@b}%
+ \fi
+ \endgroup
+ }%
+ \ifx\reserved@c\@empty
+ \let\reserved@a\@gobbleopt
+ \else
+ \edef\reserved@a{\noexpand\scrlfile@saved@RequirePackage[#1]{%
+ \expandafter\@gobble\reserved@c\@empty}}%
+ \fi
+ \reserved@a
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@gobbleopt}
+% \changes{v3.08}{2010/11/04}{New (internal)}
+% Several packages may define this. We hope it is same every time.
+% \begin{macrocode}
+\providecommand{\@gobbleopt}[1][]{}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\BeforeClosingMainAux}
% \changes{v2.95}{2002/09/03}{new}
% \begin{macro}{\AfterReadingMainAux}
@@ -785,6 +941,7 @@
\ifx\scr@hook@bcma\@empty
\gdef\scr@hook@bcma{%
\renewcommand*{\BeforeClosingMainAux}[1]{####1}%
+ \let\protected@write\protected@immediate@write
\scr@redefine@newpage
}%
\fi
@@ -794,6 +951,7 @@
\ifx\scr@hook@acma\@empty
\gdef\scr@hook@acma{%
\renewcommand*{\AfterReadingMainAux}[1]{####1}%
+ \let\protected@write\protected@immediate@write
}%
\fi
\g@addto@macro\scr@hook@acma%
@@ -802,6 +960,22 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\protected@immediate@write}
+% Like \LaTeX{} kernel's |\protected@write| but using |\immediate\write|. In
+% this case it is even not a good idea to protect |\thepage|!
+% \begin{macrocode}
+\long\def\protected@immediate@write#1#2#3{%
+ \begingroup
+ #2%
+ \let\protect\@unexpandable@protect
+ \edef\reserved@a{\immediate\write#1{#3}}%
+ \reserved@a
+ \endgroup
+ \if@nobreak\ifvmode\nobreak\fi\fi
+}
+% \end{macrocode}
+% \end{macro}
+%
% \Finale
%
% \iffalse