diff options
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.tex | 319 |
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: |