summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/koma-script/doc/ngerman/scrlfile.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/koma-script/doc/ngerman/scrlfile.tex')
-rw-r--r--Master/texmf-dist/source/latex/koma-script/doc/ngerman/scrlfile.tex551
1 files changed, 551 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/koma-script/doc/ngerman/scrlfile.tex b/Master/texmf-dist/source/latex/koma-script/doc/ngerman/scrlfile.tex
new file mode 100644
index 00000000000..cdd81bef9b3
--- /dev/null
+++ b/Master/texmf-dist/source/latex/koma-script/doc/ngerman/scrlfile.tex
@@ -0,0 +1,551 @@
+% ======================================================================
+% scrlfile.tex
+% Copyright (c) Markus Kohm, 2001-2008
+%
+% 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.3b of the license.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3b or later is part of all distributions of LaTeX
+% version 2005/12/01 or later and of this work.
+%
+% This work has the LPPL maintenance status "author-maintained".
+%
+% The Current Maintainer and author of this work is Markus Kohm.
+%
+% This work consists of all files listed in manifest.txt.
+% ----------------------------------------------------------------------
+% scrlfile.tex
+% Copyright (c) Markus Kohm, 2001-2008
+%
+% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
+% Version 1.3b, verteilt und/oder veraendert werden.
+% Die neuste Version dieser Lizenz ist
+% http://www.latex-project.org/lppl.txt
+% und Version 1.3b ist Teil aller Verteilungen von LaTeX
+% Version 2005/12/01 oder spaeter 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.
+%
+% Dieses Werk besteht aus den in manifest.txt aufgefuehrten Dateien.
+% ======================================================================
+%
+% Chapter about scrlfile of the KOMA-Script guide
+% Maintained by Markus Kohm
+%
+% ----------------------------------------------------------------------------
+%
+% Kapitel über scrlfile in der KOMA-Script-Anleitung
+% Verwaltet von Markus Kohm
+%
+% ============================================================================
+
+\ProvidesFile{scrlfile.tex}[2008/07/31 KOMA-Script guide (chapter: scrlfile)]
+
+\chapter{Paketabhängigkeiten mit \Package{scrlfile}
+ beherrschen}
+\labelbase{scrlfile}
+
+\BeginIndex{Package}{scrlfile}
+
+Die Einführung von \LaTeXe{} brachte 1994 eine Menge Neuerungen im Umgang mit
+\LaTeX-Erweiterungen. So stehen dem Paketautor heute eine ganze Reihe von
+Befehlen zur Verfügung, um festzustellen, ob ein anderes Paket oder eine
+bestimmte Klasse verwendet wird und ob dabei bestimmte Optionen zur Anwendung
+kommen. Der Paketautor kann selbst andere Pakete laden oder diesen Optionen
+mit auf den Weg geben für den Fall, dass sie später noch geladen werden. Es
+bestand daher die Hoffnung, dass es künftig unerheblich wäre, in welcher
+Reihenfolge Pakete geladen werden. Diese Hoffnung hat sich leider nicht
+erfüllt.
+
+\section{Die Sache mit den Paketabhängigkeiten}
+\label{sec:scrlfile.dependency}
+%\begin{Explain}
+ Immer häufiger definieren unterschiedliche Pakete den gleichen
+ Befehl neu oder um. Dabei ist es dann sehr entscheidend, in welcher
+ Reihenfolge die Pakete geladen werden. Manchmal ist das für den
+ Anwender kaum zu überschauen. In manchen Fällen ist es auch
+ notwendig, einfach nur in irgendeiner Form auf das Laden eines
+ anderen Paketes zu reagieren. Auch das ist nicht immer ganz einfach.
+
+ Nehmen wir als einfaches Beispiel das Laden des
+ \Package{longtable}-Paketes bei Verwendung von \KOMAScript{}. Das
+ \Package{longtable}-Paket definiert seine eigene Form von
+ Tabellenüberschriften. Diese passen perfekt zu den
+ Tabellenüberschriften der Standardklassen. Sie passen aber überhaupt
+ nicht zu den Voreinstellungen für die Tabellenüberschriften von
+ \KOMAScript{} und reagieren auch nicht auf die entsprechenden
+ Möglichkeiten der Konfiguration. Um dieses Problem zu lösen, müssen
+ die Befehle von \Package{longtable}, die für die
+ Tabellenüberschriften zuständig sind, von \KOMAScript{} umdefiniert
+ werden. Allerdings sind die \KOMAScript{}-Klassen bereits
+ abgearbeitet, wenn das Paket geladen wird.
+
+ Bisher bestand die einzige Möglichkeit, dieses Problem zu lösen
+ darin, die Umdefinierung mit Hilfe von \Macro{AtBeginDocument} auf
+ einen späteren Zeitpunkt zu verschieben. Will der Anwender die
+ entsprechende Anweisung jedoch selbst umdefinieren, so sollte er
+ dies eigentlich ebenfalls in der Präambel tun. Das kann er jedoch
+ nicht, weil \KOMAScript{} ihm dabei in die Quere kommt. Er müsste
+ die Umdefinierung also ebenfalls mit Hilfe von
+ \Macro{AtBeginDocument} durchführen.
+
+ Aber eigentlich müsste \KOMAScript{} die Abarbeitung gar nicht auf
+ den Zeitpunkt von \Macro{begin}\PParameter{document} verschieben. Es
+ würde genügen, wenn sie bis unmittelbar nach dem Laden von
+ \Package{longtable} verzögert werden könnte. Leider fehlen
+ entsprechende Anweisungen im \LaTeX-Kern. Das Paket
+ \Package{scrlfile} bringt hier Abhilfe.
+
+ Ebenso wäre es denkbar, dass man vor dem Laden eines bestimmten
+ Paketes gerne die Bedeutung eines Makros in einem Hilfsmakro retten
+ und nach dem Laden des Paketes wieder restaurieren will. Auch das
+ geht mit \Package{scrlfile}.
+
+ Die Anwendung von \Package{scrlfile} ist nicht auf die Abhängigkeit
+ von Paketen beschränkt. Auch Abhängigkeiten von anderen Dateien
+ können berücksichtigt werden. So kann beispielsweise dafür gesorgt
+ werden, dass das nicht unkritische Laden einer Datei wie
+ \File{french.ldf} automatisch zu einer Warnung führt.
+
+ Obwohl das Paket in erster Linie für andere Paketautoren interessant
+ sein dürfte, gibt es durchaus auch Anwendungen für normale
+ \LaTeX-Benutzer. Deshalb sind in diesem Kapitel auch für beide
+ Gruppen Beispiele aufgeführt.
+%\end{Explain}
+
+
+\section{Aktionen vor und nach dem Laden}
+\label{sec:scrlfile.macros}
+
+Mit \Package{scrlfile} können vor und nach dem Laden von Dateien Aktionen
+ausgelöst werden. Bei den dazu verwendeten Befehlen wird zwischen allgemeinen
+Dateien, Klassen und Paketen unterschieden.
+
+
+\BeginIndex{Cmd}{BeforeFile}%
+\BeginIndex{Cmd}{AfterFile}%
+\begin{Declaration}
+ \Macro{BeforeFile}\Parameter{Datei}\Parameter{Anweisungen}\\
+ \Macro{AfterFile}\Parameter{Datei}\Parameter{Anweisungen}
+\end{Declaration}%
+Mit Hilfe von \Macro{BeforeFile} kann dafür gesorgt werden, dass
+\PName{Anweisungen} erst vor dem nächsten Laden einer bestimmten
+\PName{Datei} ausgeführt werden. Vergleichbar arbeitet
+\Macro{AfterFile}. Nur werden die \PName{Anweisungen} hier erst nach
+dem Laden der \PName{Datei} ausgeführt. Wird die Datei nie geladen, so
+werden die \PName{Anweisungen} auch nie ausgeführt. Beim Dateinamen sind
+etwaige Endungen wie bei \Macro{input} anzugeben.
+
+%\begin{Explain}
+ Um die Funktionalität bereitstellen zu können, bedient sich
+ \Package{scrlfile} der bekannten \LaTeX-Anweisung
+ \Macro{InputIfFileExists}. Diese wird hierzu umdefiniert. Falls die
+ Anweisung nicht die erwartete Definition hat, gibt
+ \Package{scrlfile} eine Warnung aus. Dies geschieht für den Fall,
+ dass die Anweisung in späteren \LaTeX-Versionen geändert wird oder
+ bereits von einem anderen Paket umdefiniert wurde.
+
+ Die Anweisung \Macro{InputIfFileExists} wird von \LaTeX{} immer
+ verwendet, wenn eine Datei geladen werden soll. Dies geschieht
+ unabhängig davon, ob die Datei mit \Macro{include}, \Macro{LoadClass},
+ \Macro{documentclass}, \Macro{usepackage}, \Macro{RequirePackage},
+ oder vergleichbaren Anweisungen geladen wird. Lediglich
+% Umbruchkorrektur: listings korrigieren
+\begin{lstcode}[belowskip=\dp\strutbox]
+ \input foo
+\end{lstcode}
+ lädt die Datei \texttt{foo} ohne Verwendung von
+ \Macro{InputIfFileExists}. Sie sollten daher stattdessen immer
+% Umbruchkorrektur: listings korrigieren
+\begin{lstcode}[belowskip=\dp\strutbox]
+ \input{foo}
+\end{lstcode}
+ verwenden. Beachten Sie die Klammern um den Dateinamen!%
+%\end{Explain}
+%
+\EndIndex{Cmd}{BeforeFile}%
+\EndIndex{Cmd}{AfterFile}%
+
+
+\BeginIndex{Cmd}{BeforeClass}%
+\BeginIndex{Cmd}{BeforePackage}%
+\begin{Declaration}
+ \Macro{BeforeClass}\Parameter{Klasse}\Parameter{Anweisungen}\\
+ \Macro{BeforePackage}\Parameter{Paket}\Parameter{Anweisungen}
+\end{Declaration}%
+Diese beiden Befehle arbeiten vergleichbar zu \Macro{BeforeFile} mit dem einen
+Unterschied, dass die \PName{Klasse} beziehungsweise das \PName{Paket} mit
+seinem Namen und nicht mit seinem Dateinamen angegeben wird. Die Endungen
+»\File{.cls}« und »\File{.sty}« entfallen hier also.%
+%
+\EndIndex{Cmd}{BeforeClass}%
+\EndIndex{Cmd}{BeforePackage}%
+
+
+\BeginIndex{Cmd}{AfterClass}%
+\BeginIndex{Cmd}{AfterClass*}%
+\BeginIndex{Cmd}{AfterPackage}%
+\BeginIndex{Cmd}{AfterPackage*}%
+\begin{Declaration}
+ \Macro{AfterClass}\Parameter{Klasse}\Parameter{Anweisungen}\\
+ \Macro{AfterClass*}\Parameter{Klasse}\Parameter{Anweisungen}\\
+ \Macro{AfterPackage}\Parameter{Paket}\Parameter{Anweisungen}\\
+ \Macro{AfterPackage*}\Parameter{Paket}\Parameter{Anweisungen}
+\end{Declaration}%
+Die Anweisungen \Macro{AfterClass} und \Macro{AfterPackage} arbeiten
+weitgehend wie \Macro{AfterFile} mit dem winzigen Unterschied, dass die
+\PName{Klasse} beziehungsweise das \PName{Paket} mit seinem Namen und
+nicht mit seinem Dateinamen angegeben wird. Die Endungen »\File{.cls}«
+und »\File{.sty}« entfallen hier also. Bei den Sternvarianten gibt es
+eine zusätzliche Funktionalität. Ist die entsprechende Klasse oder das
+entsprechende Paket bereits geladen, so werden die \PName{Anweisungen}
+nicht nach dem nächsten Laden, sondern unmittelbar ausgeführt.%
+
+\begin{Example}
+ Als Beispiel für Paket- oder Klassenautoren will ich zunächst
+ erklären, wie \KOMAScript{} selbst Gebrauch von den neuen
+ Anweisungen macht. Dazu findet sich in \Class{scrbook}
+ beispielsweise Folgendes:
+\begin{lstcode}
+ \AfterPackage{hyperref}{%
+ \@ifpackagelater{hyperref}{2001/02/19}{}{%
+ \ClassWarningNoLine{scrbook}{%
+ You are using an old version of hyperref
+ package!\MessageBreak%
+ This version has a buggy hack at many drivers%
+ \MessageBreak%
+ causing \string\addchap\space to behave
+ strange.\MessageBreak%
+ Please update hyperref to at least version
+ 6.71b}}}
+\end{lstcode}
+ Alte Versionen von \Package{hyperref} definierten ein Makro von
+ \Class{scrbook} in einer Weise um, so dass es mit neueren Versionen
+ von \KOMAScript{} nicht mehr funktioniert. Neuere Versionen von
+ \Package{hyperref} unterlassen dies, wenn sie eine neuere Version
+ von \KOMAScript{} erkennen. Für den Fall, dass \Package{hyperref}
+ zu einem späteren Zeitpunkt geladen wird, sorgt also \Class{scrbook}
+ dafür, dass unmittelbar nach dem Laden des Paketes überprüft wird, ob
+ es sich um eine verträgliche Version handelt. Falls dies nicht der
+ Fall ist, wird eine Warnung ausgegeben.
+
+ An anderer Stelle findet sich in drei \KOMAScript-Klassen Folgendes:
+\begin{lstcode}
+ \AfterPackage{caption2}{%
+ \renewcommand*{\setcapindent}{%
+\end{lstcode}
+ Nach dem Laden von \Package{caption2} und nur falls das Paket
+ geladen wird, wird hier die \KOMAScript-Anweisung
+ \Macro{setcapindent} umdefiniert. Der Inhalt der Umdefinierung ist
+ für dieses Beispiel unerheblich. Es sei nur erwähnt, dass
+ \Package{caption2} die Kontrolle über die \Macro{caption}-Anweisung
+ übernimmt und daher die normale Definition von \Macro{setcapindent}
+ keinerlei Wirkung mehr hätte. Die Umdefinierung verbessert dann die
+ Zusammenarbeit mit \Package{caption2}.
+
+ Es gibt aber auch Beispiele für den sinnvollen Einsatz der neuen
+ Anweisungen durch normale Anwender. Angenommen, Sie erstellen ein
+ Dokument, aus dem sowohl eine PS-Datei mit \LaTeX{} und dvips als auch
+ eine PDF-Datei mit pdf\LaTeX{} erstellt werden soll. Das Dokument soll
+ außerdem Hyperlinks aufweisen. Im Tabellenverzeichnis haben Sie
+ Einträge, die über mehrere Zeilen gehen. Nun gibt es zwar mit
+ pdf\LaTeX{} bei der PDF-Ausgabe keine Probleme, da dort Links
+ umbrochen werden können. Bei Verwendung des
+ \Package{hyperref}-Treibers für dvips oder
+ hyper\TeX{} ist dies jedoch nicht
+ möglich. In diesem Fall hätten Sie gerne, dass bei
+ \Package{hyperref} die Einstellung \Option{linktocpage} verwendet
+ wird. Die Entscheidung, welcher Treiber geladen wird, wird bei Ihnen
+ automatisch von \File{hyperref.cfg} erledigt. Dazu sieht die Datei
+ beispielsweise wie folgt aus:
+\begin{lstcode}
+ \ProvidesFile{hyperref.cfg}
+ \@ifundefined{pdfoutput}{\ExecuteOptions{dvips}}
+ {\ExecuteOptions{pdftex}}
+ \endinput
+\end{lstcode}
+
+ Alles weitere kann nun \Macro{AfterFile} überlassen werden:
+ \begin{lstcode}[moretexcs={hypersetup}]
+ \documentclass{article}
+ \usepackage{scrlfile,ngerman}
+ \AfterFile{hdvips.def}{\hypersetup{linktocpage}}
+ \AfterFile{hypertex.def}{\hypersetup{linktocpage}}
+ \usepackage{hyperref}
+ \begin{document}
+ \listoffigures
+ \clearpage
+ \begin{figure}
+ \caption{Dies ist ein Beispiel mit einer
+ Abbildungsunterschrift, die etwas länglich ist
+ und bei der trotzdem auf die Verwendung des
+ optionalen Arguments verzichtet wurde}
+ \end{figure}
+ \end{document}
+ \end{lstcode}
+ Egal, ob nun der \Package{hyperref}-Treiber \Option{hypertex} oder
+ \Option{dvips} zu Anwendung kommt, wird die dann nützliche Einstellung
+ \Option{linktocpage} verwendet. Wenn Sie jedoch mit pdf\LaTeX{} eine
+ PDF-Datei erstellen, wird darauf verzichtet, da in diesem Fall der
+ \Package{hyperref}-Treiber \File{hpdftex.def} verwendet wird. Das bedeutet,
+ dass weder die Treiberdatei \File{hdvips.def} noch \File{hypertex.def}
+ geladen wird.
+\end{Example}
+
+Übrigens können Sie das Laden von \Package{scrlfile} und die obigen
+\Macro{AfterFile}-Anweisungen auch in Ihre private \File{hyperref.cfg}
+einfügen. Verwenden Sie dabei jedoch zum Laden des Paketes besser
+\Macro{RequirePackage} an Stelle von \Macro{usepackage} (siehe
+\cite{latex:clsguide}). Die neuen Zeilen müssen in obigem Beispiel unmittelbar
+nach der \Macro{ProvidesFile}-Zeile, also unbedingt vor der Ausführung der
+Optionen \Option{dvips} oder \Option{pdftex}, eingefügt werden.%
+%
+\EndIndex{Cmd}{AfterClass}%
+\EndIndex{Cmd}{AfterClass*}%
+\EndIndex{Cmd}{AfterPackage}%
+\EndIndex{Cmd}{AfterPackage*}%
+
+
+\BeginIndex{Cmd}{BeforeClosingMainAux}%
+\begin{Declaration}
+ \Macro{BeforeClosingMainAux}\Parameter{Anweisungen}
+\end{Declaration}
+Diese Anweisung unterscheidet sich in einem Detail von den zuvor erklärten
+Anweisungen. Jene ermöglichen Aktionen vor und nach dem Laden von
+Dateien. Dies ist hier nicht der Fall. Paketautoren haben des Öfteren das
+Problem, dass Sie Anweisungen in die \File{aux}-Datei schreiben wollen,
+nachdem die letzte Seite des Dokuments ausgegeben wurde. Dies wird häufig mit
+\begin{lstcode}
+ \AtEndDocument{%
+ \if@filesw
+ \write\@auxout{%
+ \protect\writethistoaux%
+ }%
+ \fi
+ }
+\end{lstcode}
+versucht. Dies ist jedoch keine echte Lösung des Problems. Wurde die letzte
+Seite vor \Macro{end}\PParameter{document} bereits ausgegeben, so führt obiges
+zu keiner Ausgabe in die \File{aux}-Datei mehr. Würde man zur Lösung dieses
+Problems nun ein \Macro{immediate} vor \Macro{write} setzen, so hätte man das
+umgekehrte Problem: wurde die letzte Seite bei
+\Macro{end}\PParameter{document} noch nicht ausgegeben, so wird
+\Macro{writethistoaux} zu früh in die \File{aux}-Datei geschrieben. Man sieht
+daher häufig Lösungsversuche wie:
+\begin{lstcode}
+ \AtEndDocument{%
+ \if@filesw
+ \clearpage
+ \immediate\write\@auxout{%
+ \protect\writethistoaux%
+ }%
+ \fi
+ }
+\end{lstcode}
+Diese Lösung hat jedoch den Nachteil, dass damit die Ausgabe der letzten Seite
+erzwungen wird. Eine Anweisung wie:
+\begin{lstcode}
+ \AtEndDocument{%
+ \par\vspace*{\fill}%
+ Hinweis am Ende des Dokuments.\par
+ }
+\end{lstcode}
+führt dann nicht mehr dazu, dass der Hinweis am Ende der letzten Seite des
+Dokuments ausgegeben wird, sie würde stattdessen am Ende der nächsten Seite
+ausgegeben. Gleichzeitig würde \Macro{writethistoaux} wieder eine Seite zu
+früh in der \File{aux}-Datei landen.
+
+Die beste Lösung des Problems wäre nun, wenn man unmittelbar in die
+\File{aux}-Datei schreiben könnte, nachdem das finale \Macro{clearpage}
+innerhalb von \Macro{end}\PParameter{document} ausgeführt und bevor die
+\File{aux}-Datei geschlossen wird. Genau dies ist das Ziel von
+\Macro{BeforeClosingMainAux}:
+\begin{lstcode}
+ \BeforeClosingMainAux{%
+ \if@filesw
+ \immediate\write\@auxout{%
+ \protect\writethistoaux%
+ }%
+ \fi
+ }
+\end{lstcode}
+Dies ist auch dann erfolgreich, wenn das finale \Macro{clearpage} innerhalb
+von \Macro{end}\PParameter{document} tatsächlich zu keiner Ausgabe einer Seite
+mehr führt oder wenn \Macro{clearpage} innerhalb einer
+\Macro{AtEndDocument}-Anweisung verwendet wurde.
+
+Es gibt jedoch für \Macro{BeforeClosingMainAux} eine Einschränkung: Im
+Argument \Macro{Anweisungen} sollte niemals eine Satzanweisung verwendet
+werden. Es darf also keinesfalls mit \Macro{BeforeClosingMainAux} etwas
+gesetzt werden! Wird diese Einschränkung nicht beachtet, so ist das Ergebnis
+noch unvorhersehbarer als bei den gezeigten Problemen mit
+\Macro{AtEndDocument}.%
+%
+\EndIndex{Cmd}{BeforeClosingMainAux}%
+
+
+\section{Dateien beim Einlesen ersetzen}
+\label{sec:scrlfile.replace}
+
+In den bisherigen Abschnitten wurden Anweisungen erklärt, mit denen es möglich
+ist, vor oder nach dem Einlesen einer bestimmten Datei, eines bestimmten
+Pakets oder einer Klasse, Aktionen auszuführen. Es ist mit \Package{scrlfile}
+aber auch möglich, eine ganz andere Datei als die angeforderte einzulesen.
+
+\BeginIndex{Cmd}{ReplaceInput}%
+\begin{Declaration}
+ \Macro{ReplaceInput}\Parameter{Dateiname}\Parameter{Ersatzdatei}
+\end{Declaration}
+Mit dieser Anweisung wird eine Ersetzung der Datei mit dem als erstes
+angegebenen \PName{Dateiname} definiert. Wenn \LaTeX{} anschließend angewiesen
+wird, diese Datei zu laden, wird stattdessen die \PName{Ersatzdatei}
+geladen. Die Definition der Ersatzdatei wirkt sich auf alle Dateien aus, die
+vom Anwender oder intern von \LaTeX{} mit Hilfe von \Macro{InputIfFileExists}
+geladen werden. Dazu ist es allerdings erforderlich, dass \Package{scrlfile}
+diese Anweisung umdefiniert.
+
+\begin{Example}
+ Sie wollen, dass an Stelle der Datei \File{\Macro{jobname}.aux}, die Datei
+ \File{\Macro{jobname}.xua} geladen wird. Dazu verwenden Sie:
+ \begin{lstcode}
+ \ReplaceInput{\jobname.aux}{\jobname.xua}
+ \end{lstcode}
+ Wenn Sie nun außerdem \File{\Macro{jobname}.xua} durch
+ \File{\Macro{jobname}.uxa} ersetzen:
+ \begin{lstcode}
+ \ReplaceInput{\jobname.xua}{\jobname.uxa}
+ \end{lstcode}
+ dann wird \File{\Macro{jobname}.aux} in Wirklichkeit durch
+ \File{\Macro{jobname}.uxa} ersetzt. Es wird also die komplette
+ Ersetzungskette abgearbeitet.
+
+ Einer Ersetzung im Kreis:
+ \begin{lstcode}
+ \ReplaceInput{\jobname.aux}{\jobname.xua}
+ \ReplaceInput{\jobname.xua}{\jobname.aux}
+ \end{lstcode}
+ würde jedoch zu einem \emph{stack size error} führen. Es ist also nicht
+ möglich, eine einmal ersetzte Datei wieder durch ihren Ursprung zu ersetzen.
+\end{Example}
+
+Theoretisch wäre es auch möglich, auf diesem Wege ein Paket durch ein anderes
+oder eine Klasse durch eine andere zu ersetzen. Dabei würde \LaTeX{} aber
+erkennen, dass die angeforderten Dateinamen nicht zum Namen des Pakets oder
+der Klasse passen. Eine Lösung dieses Problems finden Sie nachfolgend.
+%
+\EndIndex{Cmd}{ReplaceInput}%
+
+
+\BeginIndex{Cmd}{ReplaceClass}%
+\BeginIndex{Cmd}{ReplacePackage}%
+\begin{Declaration}
+ \Macro{ReplaceClass}\Parameter{Klasse}\Parameter{Ersatzklasse}\\
+ \Macro{ReplacePackage}\Parameter{Paket}\Parameter{Ersatzpaket}
+\end{Declaration}
+Eine Klasse oder ein Paket sollte niemals mit Hilfe von \Macro{ReplaceInput}
+ersetzt werden. In diesem Fall würde \LaTeX{} eine Warnung über nicht
+übereinstimmende Klassen- oder Paketnamen melden.
+\begin{Example}
+ Sie ersetzen das Paket \Package{fancyhdr} leichtfertig durch das nicht
+ kompatible Paket \Package{scrpage2}, indem Sie
+ \begin{lstcode}
+ \ReplaceInput{fancyhdr.sty}{scrpage2.sty}
+ \end{lstcode}
+ verwenden. Dies führt zu der Warnung
+ \begin{lstcode}
+ LaTeX warning: You have requested `scrpage2',
+ but the package provides `fancyhdr'.}
+ \end{lstcode}
+ führen. Für den Anwender wäre diese Warnung mehr als verwirrend, hat er doch
+ gar nicht \Package{scrpage2}, sondern tatsächlich \Package{fancyhdr}
+ angefordert, das jedoch durch \Package{scrpage2} ersetzt wurde.
+\end{Example}
+Eine Lösung dieses Problems besteht nun darin, statt \Macro{ReplaceInput} eine
+der Anweisungen \Macro{ReplaceClass} oder \Macro{ReplacePackage} zu
+verwenden. Es ist zu beachten, dass dabei wie bei \Macro{documentclass} und
+\Macro{usepackage} der Name der Klasse oder des Pakets und nicht deren
+kompletter Dateiname anzugeben ist.
+
+Die Ersetzung funktioniert mit diesen Anweisungen für Klassen, die mit
+\Macro{LoadClass}, \Macro{LoadClassWithOptions} oder \Macro{documentclass}
+geladen werden. Für Pakete funktioniert die Ersetzung beim Laden mit
+\Macro{RequirePackage}, \Macro{RequirePackageWithOptions} und
+\Macro{usepackage}.
+
+Es ist zu beachten, dass die \PName{Ersatzklasse} oder das \PName{Ersatzpaket}
+mit denselben Optionen geladen wird, mit denen die ursprünglich geforderte
+Klasse oder das ursprünglich geforderte Paket geladen würden. Wird ein Paket
+oder eine Klasse durch ein Paket oder eine Klasse ersetzt, das eine geforderte
+Option nicht unterstützt, würde dies zu den üblichen Warnungen und Fehlern
+führen. Es ist jedoch möglich, solche in der \PName{Ersatzklasse} oder dem
+\PName{Ersatzpaket} fehlenden Optionen per \Macro{BeforeClass} oder
+\Macro{BeforePackage} neu zu definieren.
+
+\begin{Example}
+ Angenommen, das Paket \Package{oldfoo} soll beim Laden durch das
+ Paket{newfoo} ersetzt werden. Dies wird mit:
+ \begin{lstcode}
+ \ReplacePackage{oldfoo}{newfoo}
+ \end{lstcode}
+ erreicht. Das alte Paket hat eine Option \Option{oldopt}, die das neue Paket
+ jedoch nicht hat. Mit
+ \begin{lstcode}
+ \BeforePackage{newfoo}{%
+ \DeclareOption{oldopt}{%
+ \PackageInfo{newfoo}{option `oldopt' not supported}%
+ }%
+ }
+ \end{lstcode}
+ wird diese Option nun für das Paket \Package{newfoo} nachdefiniert. Dadurch
+ wird vermieden, dass beim Laden des Pakets \Package{oldfoo} ein Fehler über
+ die im Paket \Package{newfoo} nicht unterstützte Option gemeldet wird.
+
+ Existiert hingegen eine Option \Option{newopt}, die an Stelle der Option
+ \Option{oldopt} verwendet werden soll, so kann dies ebenfalls erreicht
+ werden:
+ \begin{lstcode}
+ \BeforePackage{newfoo}{%
+ \DeclareOption{oldopt}{%
+ \ExecuteOptions{newopt}%
+ }%
+ }
+ \end{lstcode}
+ Es ist sogar möglich, festzulegen, dass beim Laden des neuen Pakets
+ andere Voreinstellung gelten sollen:
+ \begin{lstcode}
+ \BeforePackage{newfoo}{%
+ \DeclareOption{oldopt}{%
+ \ExecuteOptions{newopt}%
+ }%
+ \PassOptionsToPackage{newdefoptA,newdefoptB}{newfoo}%
+ }
+ \end{lstcode}
+ oder auch direkt:
+ \begin{lstcode}
+ \BeforePackage{newfoo}{%
+ \DeclareOption{oldopt}{%
+ \ExecuteOptions{newopt}%
+ }%
+ }
+ \PassOptionsToPackage{newdefoptA,newdefoptB}{newfoo}%
+ \end{lstcode}
+\end{Example}
+
+Damit Klassen ersetzt werden können, ist es erforderlich \Package{scrlfile}
+mit Hilfe von \Macro{RequirePackage} vor der Klasse zu laden.
+%
+\EndIndex{Cmd}{ReplacePackage}%
+\EndIndex{Cmd}{ReplaceClass}%
+%
+\EndIndex{Package}{scrlfile}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "../guide"
+%%% End: