summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/koma-script/scrguide/datladen.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/koma-script/scrguide/datladen.tex')
-rw-r--r--Master/texmf-dist/source/latex/koma-script/scrguide/datladen.tex319
1 files changed, 319 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/koma-script/scrguide/datladen.tex b/Master/texmf-dist/source/latex/koma-script/scrguide/datladen.tex
new file mode 100644
index 00000000000..16f6389d807
--- /dev/null
+++ b/Master/texmf-dist/source/latex/koma-script/scrguide/datladen.tex
@@ -0,0 +1,319 @@
+\ProvidesFile{datladen.tex}[2003/04/10 KOMA-Script Anleitung]
+% =========================================================================
+% datladen.tex
+% Copyright (c) 2001-2002 Markus Kohm and the authors.
+%
+% This file is part of the LaTeX2e KOMA-Script-Bundle
+%
+% This file can be redistributed and/or modified under the terms of
+% the LaTeX Project Public License Version 1.0 distributed together
+% with this file. See LEGAL.TXT or LEGALDE.TXT.
+%
+% This bundle is written specialy for use at german-language. So the main
+% documentation is german. There may also be an english documentation. See
+% readme.txt, if you search for it.
+% -------------------------------------------------------------------------
+% datladen.tex
+% Copyright (c) 2001-2002 Markus Kohm und bei den weiteren Autoren.
+%
+% Diese Datei ist Teil des LaTeX2e KOMA-Script-Pakets.
+%
+% Diese Datei kann nach den Regeln der LaTeX Project Public Licence
+% Version 1.0, wie sie zusammen mit dieser Datei verteilt wird,
+% weiterverbreitet und/oder modifiziert werden. Siehe dazu auch
+% LEGAL.TXT oder LEGALDE.TXT.
+%
+% Dieses Paket ist fuer den deutschen Sprachraum konzipiert. Daher ist
+% auch diese Anleitung komplett in Deutsch. Moeglicherweise existiert
+% auch eine englische Version der Anleitung. Falls Sie eine solche
+% benoetigen, schauen Sie bitte in liesmich.txt nach, ob eine solche
+% vorhanden ist.
+% =========================================================================
+%
+% Modul: datladen.tex
+% Autoren: Markus Kohm (MJK) <markus.kohm@gmx.de>
+% Inhalt: Anleitung zu scrlfile, dem Paket fuer hooks vor und nach
+% dem Laden anderer Pakete
+% Sprache: Deutsch
+% Zeichensatz der Kommentare:
+% US-ASCII
+%
+
+\chapter{Paketabhängigkeiten mit \Package{scrlfile} beherrschen}
+\label{cha:scrlfile}
+
+\BeginIndex{Package}{scrlfile}
+
+\section{Die Sache mit den Paketabhängigkeiten}
+\label{sec:scrlfile.dependency}
+\begin{Explain}
+ 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.
+ 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}
+
+\begin{Declaration}
+ \Macro{BeforeFile}\Parameter{Datei}\Parameter{Anweisungen}\\
+ \Macro{AfterFile}\Parameter{Datei}\Parameter{Anweisungen}
+\end{Declaration}%
+\BeginIndex{Cmd}{BeforeFile}%
+\BeginIndex{Cmd}{AfterFile}%
+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.
+
+\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{LoadClass},
+ \Macro{documentclass}, \Macro{usepackage}, \Macro{RequiresPackage},
+ \Macro{include} oder Ähnlichem geladen wird. Lediglich die Anweisung
+\begin{verbatim}
+ \input foo
+\end{verbatim}
+ lädt die Datei \texttt{foo} ohne Verwendung von
+ \Macro{InputIfFileExists}. Sie sollten daher stattdessen immer
+\begin{verbatim}
+ \input{foo}
+\end{verbatim}
+ verwenden. Beachten Sie die Klammern um den Dateinamen!
+\end{Explain}
+%
+\EndIndex{Cmd}{BeforeFile}%
+\EndIndex{Cmd}{AfterFile}%
+
+\begin{Declaration}
+ \Macro{BeforeClass}\Parameter{Klasse}\Parameter{Anweisungen}\\
+ \Macro{BeforePackage}\Parameter{Paket}\Parameter{Anweisungen}
+\end{Declaration}%
+\BeginIndex{Cmd}{BeforeClass}%
+\BeginIndex{Cmd}{BeforePackage}%
+Diese beiden Befehle arbeiten genau wie \Macro{BeforeFile} 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.
+%
+\EndIndex{Cmd}{BeforeClass}%
+\EndIndex{Cmd}{BeforePackage}%
+
+\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}%
+\BeginIndex{Cmd}{AfterClass}%
+\BeginIndex{Cmd}{AfterClass*}%
+\BeginIndex{Cmd}{AfterPackage}%
+\BeginIndex{Cmd}{AfterPackage*}%
+Die Anweisungen \Macro{AfterClass} und \Macro{AfterPackage} arbeiten
+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.
+%
+\EndIndex{Cmd}{AfterClass}%
+\EndIndex{Cmd}{AfterClass*}%
+\EndIndex{Cmd}{AfterPackage}%
+\EndIndex{Cmd}{AfterPackage*}%
+
+\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{small}
+\begin{verbatim}
+\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{verbatim}
+ \end{small}
+ 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{small}
+\begin{verbatim}
+ \AfterPackage{caption2}{%
+ \renewcommand*{\setcapindent}{%
+\end{verbatim}
+ \end{small}
+ 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{small}
+\begin{verbatim}
+ \ProvidesFile{hyperref.cfg}
+ \@ifundefined{pdfoutput}{\ExecuteOptions{dvips}}
+ {\ExecuteOptions{pdftex}}
+ \endinput
+\end{verbatim}
+ \end{small}
+
+ Alles weitere kann nun \Macro{AfterFile} überlassen werden:
+ \begin{small}
+\begin{verbatim}
+ \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{verbatim}
+ \end{small}
+ 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.
+\end{Example}
+
+\begin{Explain}
+ Übrigens können Sie das Laden von \Package{scrlfile} und die
+ \Macro{AfterFile}-Anweisungen auch in Ihre private
+ \File{hyperref.cfg} einfügen. Verwenden Sie dabei jedoch zum Laden
+ des Paketes besser \Macro{RequiresPackage} 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.
+\end{Explain}
+\EndIndex{Package}{scrlfile}
+
+
+\section{Autoren}
+\label{sec:scrlfile.authors}
+Die folgenden Autoren waren an diesem Kapitel beteiligt oder haben die Vorlage
+dafür geliefert.
+% In folgender Aufzaehlung den Namen des Autors, der fuer das Kapitel
+% verantwortlich ist bitte mit \textbf{} hervorheben.
+\begin{itemize}
+\item Markus Kohm \TextEMail{Markus.Kohm@gmx.de}
+\end{itemize}
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "scrguide2"
+%%% End: