diff options
author | Karl Berry <karl@freefriends.org> | 2011-01-27 19:01:38 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2011-01-27 19:01:38 +0000 |
commit | 2b311b90f06b68e1cb123c58c3b380ea6533eea0 (patch) | |
tree | 06df1db9ecc0e0557987e581462d056ef498e1ef /Master/texmf-dist/source/latex/koma-script/scrlfile.dtx | |
parent | 7d072ac46075608b02b7af6ac92a174183cbcb32 (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.dtx | 182 |
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 |