From aab00778035c28a028f94e501e3c13f6b4081f87 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 30 Dec 2019 22:17:03 +0000 Subject: koma-script (30dec19) git-svn-id: svn://tug.org/texlive/trunk@53270 c570f23f-e606-0410-a88d-b1316a301751 --- .../latex/koma-script/doc/ngerman/scrlfile.tex | 215 ++++++++++----------- 1 file changed, 104 insertions(+), 111 deletions(-) (limited to 'Master/texmf-dist/source/latex/koma-script/doc/ngerman/scrlfile.tex') 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 index 3f1b293a7d5..13aab4afc1f 100644 --- a/Master/texmf-dist/source/latex/koma-script/doc/ngerman/scrlfile.tex +++ b/Master/texmf-dist/source/latex/koma-script/doc/ngerman/scrlfile.tex @@ -46,7 +46,7 @@ % ============================================================================ \KOMAProvidesFile{scrlfile.tex}% - [$Date: 2019-10-10 10:04:30 +0200 (Thu, 10 Oct 2019) $ + [$Date: 2019-12-03 09:41:21 +0100 (Tue, 03 Dec 2019) $ KOMA-Script guide (chapter: scrlfile)] \chapter{Paketabhängigkeiten mit \Package{scrlfile} @@ -66,60 +66,62 @@ 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} -\seclabel{dependency} +%\section{Die Sache mit den Paketabhängigkeiten} +%\seclabel{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. Teilweise ist es auch - notwendig, in irgendeiner Form auf das Laden eines - anderen Pakets zu reagieren. - - Nehmen wir als einfaches Beispiel das Laden des - \Package{longtable}-Pakets bei Verwendung von \KOMAScript{}. Das - \Package{longtable}-Paket definiert seine eigene Form von - Tabellenüberschriften. Diese passen perfekt zu den - 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 - Pakets gerne die Bedeutung eines Makros in einem Hilfsmakro retten - und nach dem Laden des Pakets 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. +Immer\textnote{Problem} 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. Teilweise ist es auch notwendig, in irgendeiner Form auf das +Laden eines anderen Pakets zu reagieren. + +Nehmen\textnote{Beispiel} wir als einfaches Beispiel das Laden des +\Package{longtable}-Pakets bei Verwendung von \KOMAScript{}. Das +\Package{longtable}-Paket definiert seine eigene Form von +Tabellenüberschriften. Diese passen perfekt zu den 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. + +Ursprünglich\textnote{ursprünglicher Ansatz} bestand die einzige % +\iffalse% Umbruchkorrektur +Möglichkeit, dieses Problem zu lösen % +\else% +Lösungsmöglichkeit % +\fi% +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\textnote{Potential} 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\textnote{weitere Anwendungen} wäre es denkbar, dass man vor dem Laden +eines bestimmten Pakets gerne die Bedeutung eines Makros in einem Hilfsmakro +retten und nach dem Laden des Pakets 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, die mit +\Macro{input} oder \Macro{InputIfFileExists} geladen werden, können +berücksichtigt werden.% +\iffalse% Stimmt so nur noch bedingt +So kann beispielsweise dafür gesorgt werden, dass das nicht unkritische Laden +einer Datei wie \File{french.ldf} automatisch zu einer Warnung führt.% +\fi + +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} @@ -175,10 +177,11 @@ verwenden. Beachten Sie die Klammern um den Dateinamen!% \Macro{BeforeClass}\Parameter{Klasse}\Parameter{Anweisungen} \Macro{BeforePackage}\Parameter{Paket}\Parameter{Anweisungen} \end{Declaration}% -Diese beiden Befehle arbeiten vergleichbar zu \DescRef{\LabelBase.cmd.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.% +Diese beiden Befehle arbeiten vergleichbar zu +\DescRef{\LabelBase.cmd.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.% % \EndIndexGroup @@ -242,12 +245,12 @@ und für Pakete \Macro{AfterAtEndOfPackage}.% \AfterPackage{hyperref}{% \@ifpackagelater{hyperref}{2001/02/19}{}{% \ClassWarningNoLine{scrbook}{% - You are using an old version of hyperref + You are using an old version of the hyperref package!\MessageBreak% - This version has a buggy hack at many - drivers\MessageBreak% + This version has a buggy hack in many + drivers,\MessageBreak% causing \string\addchap\space to behave - strange.\MessageBreak% + strangely.\MessageBreak% Please update hyperref to at least version 6.71b}% }% @@ -275,8 +278,8 @@ und für Pakete \Macro{AfterAtEndOfPackage}.% \Package{caption2} die Kontrolle über die \DescRef{maincls.cmd.caption}-Anweisung übernimmt und daher die normale Definition von \DescRef{maincls.cmd.setcapindent} keinerlei Wirkung mehr - hätte. Die Umdefinierung verbessert dann die Zusammenarbeit mit - \Package{caption2}. + hätte. Die Umdefinierung verbessert dann die Zusammenarbeit mit dem + veralteten \Package{caption2}. Es gibt aber auch Beispiele für den sinnvollen Einsatz der neuen Anweisungen durch normale Anwender. Angenommen, Sie erstellen ein @@ -314,7 +317,7 @@ und für Pakete \Macro{AfterAtEndOfPackage}.% \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{dvips} zur Anwendung kommt, wird die dann nützliche Einstellung \Option{linktocpage} verwendet. Wenn Sie jedoch mit \mbox{pdf\LaTeX} eine PDF-Datei erstellen, wird darauf verzichtet, da dann der \Package{hyperref}-Treiber \File{hpdftex.def} verwendet wird. Das bedeutet, @@ -343,19 +346,19 @@ anstelle von \DescRef{maincls.cmd.usepackage} zu verwenden (siehe \Macro{BeforeClosingMainAux}\Parameter{Anweisungen} \Macro{AfterReadingMainAux}\Parameter{Anweisungen} \end{Declaration} +\iffalse% Umbruchkorrektur Diese Anweisungen unterscheiden sich in einem Detail von den zuvor erklärten -Anweisungen. Jene ermöglichen Aktionen vor und nach dem Laden von -Dateien. Das 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. Dazu wird -- in -Unkenntnis der dadurch verursachten Probleme -- häufig Code -wie der folgende eingesetzt: +Anweisungen. Jene ermöglichen Aktionen vor und nach dem Laden von Dateien. Das +ist hier nicht der Fall. % +\fi% +Paketautoren haben des Öfteren das Problem, dass sie Anweisungen in die +\File{aux}-Datei schreiben wollen, nachdem die letzte Seite des Dokuments +ausgegeben wurde. Dazu wird -- in Unkenntnis der dadurch verursachten Probleme +-- häufig Code wie der folgende eingesetzt: \begin{lstcode}[escapechar=\$] \AtEndDocument{%$\textnote{Nicht nachmachen!}$ \if@filesw - \write\@auxout{% - \protect\writethistoaux% - }% + \write\@auxout{\protect\writethistoaux}% \fi } \end{lstcode} @@ -371,9 +374,7 @@ daher häufig auch Lösungsversuche wie: \AtEndDocument{%$\textnote{Nicht nachmachen!}$ \if@filesw \clearpage - \immediate\write\@auxout{% - \protect\writethistoaux% - }% + \immediate\write\@auxout{\protect\writethistoaux}% \fi } \end{lstcode} @@ -400,9 +401,7 @@ Ziel von \Macro{BeforeClosingMainAux}: \begin{lstcode} \BeforeClosingMainAux{% \if@filesw - \immediate\write\@auxout{% - \protect\writethistoaux% - }% + \immediate\write\@auxout{\protect\writethistoaux}% \fi } \end{lstcode} @@ -416,7 +415,7 @@ Es gibt jedoch für \Macro{BeforeClosingMainAux} eine Einschränkung: Im Argument \PName{Anweisungen} sollte keine Satzanweisung verwendet werden. Es darf also mit \Macro{BeforeClosingMainAux} kein zusätzliches Material gesetzt werden! Wird diese Einschränkung nicht beachtet, so ist das -Ergebnis ebenso unvorhersehbarer wie bei den gezeigten Problemen mit +Ergebnis ebenso unvorhersehbar wie bei den gezeigten Problemen mit \Macro{AtEndDocument}. Die Anweisung \Macro{AfterReadingMainAux}\ChangedAt{v3.03}{\Package{scrlfile}} @@ -425,9 +424,9 @@ führt sogar \PName{Anweisungen} nach dem Schließen und Einlesen der nur in einigen wenigen, sehr seltenen Fällen sinnvoll, beispielsweise, wenn man statistische Informationen in die \File{log}-Datei schreiben will, die erst nach dem Einlesen der \File{aux}-Datei gültig sind, oder zur -Implementierung zusätzlicher \emph{Rerun}-Aufforderungen. Satzanweisungen sind -an dieser Stelle noch kritischer zu betrachten als bei -\Macro{BeforeClosingMainAux}.% +Implementierung zusätzlicher +\mbox{\emph{Rerun}}-\mbox{Auf"|forderungen}. Satzanweisungen sind an dieser +Stelle noch kritischer zu betrachten als bei \Macro{BeforeClosingMainAux}.% % \EndIndexGroup @@ -440,7 +439,7 @@ 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. -\begin{Declaration} +\begin{Declaration}[0] \Macro{ReplaceInput}\Parameter{Dateiname}\Parameter{Ersatzdatei} \end{Declaration} Mit\ChangedAt{v2.96}{\Package{scrlfile}} dieser Anweisung wird eine Ersetzung @@ -543,9 +542,7 @@ ersetzt, die eine geforderte Option nicht unterstützt, würde das zu den \BeforePackage{newfoo}{% \DeclareOption{oldopt}{% \PackageInfo{newfoo}% - {option `oldopt' not supported}% - }% - }% + {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 @@ -556,18 +553,13 @@ ersetzt, die eine geforderte Option nicht unterstützt, würde das zu den werden: \begin{lstcode} \BeforePackage{newfoo}{% - \DeclareOption{oldopt}{% - \ExecuteOptions{newopt}% - }% - }% + \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}% - }% + \DeclareOption{oldopt}{\ExecuteOptions{newopt}}% \PassOptionsToPackage{newdefoptA,newdefoptB}% {newfoo}% } @@ -575,27 +567,27 @@ ersetzt, die eine geforderte Option nicht unterstützt, würde das zu den oder auch direkt: \begin{lstcode} \BeforePackage{newfoo}{% - \DeclareOption{oldopt}{% - \ExecuteOptions{newopt}% - }% + \DeclareOption{oldopt}{\ExecuteOptions{newopt}}% }% \PassOptionsToPackage{newdefoptA,newdefoptB}% {newfoo}% \end{lstcode} + \iffalse% Umbruchkorrektur Man beachte, dass im letzten Beispiel der Aufruf von - \Macro{PassOptionsToPackage} nicht innerhalb, sondern erst nach - \Macro{BeforePackage} erfolgt. + \Macro{PassOptionsToPackage} nicht innerhalb, sondern nach + \Macro{BeforePackage} erfolgt.% + \fi% \end{Example} -Damit Klassen ersetzt werden können, ist es natürlich erforderlich -\Package{scrlfile} vor der Klasse zu laden. Dazu ist +Damit Klassen mit \Macro{ReplaceClass} ersetzt werden können, ist es natürlich +erforderlich \Package{scrlfile} vor der Klasse zu laden. Dazu ist \Macro{RequirePackage}\IndexCmd{RequirePackage} anstelle von \DescRef{maincls.cmd.usepackage} zu verwenden (siehe \cite{latex:clsguide}).% \EndIndexGroup \begin{Declaration} - \Macro{UnReplaceInput}\Parameter{Dateinamen} + \Macro{UnReplaceInput}\Parameter{Datei} \Macro{UnReplacePackage}\Parameter{Paket} \Macro{UnReplaceClass}\Parameter{Klasse} \end{Declaration} @@ -603,11 +595,11 @@ Eine\ChangedAt{v3.12}{\Package{scrlfile}} Ersetzung kann auch wieder aufgehoben werden. Dabei sollten Ersetzungen von Dateien immer mit \Macro{UnReplaceInput}, Ersetzungen von Paketen mit \Macro{UnReplacePackage} und Ersetzungen von Klassen mit \Macro{UnReplaceClass} aufgehoben werden. Nach -der Aufhebung der Ersetzung führen Ladebefehle für den entsprechenden -\PName{Dateiname}, das entsprechende \PName{Paket} oder die entsprechende -\PName{Klasse} dann wieder dazu, dass die Datei, das Paket oder die Klasse -selbst anstelle der Ersatzdatei, des Ersatzpakets oder der Ersatzklasse -geladen wird.% +der Aufhebung der Ersetzung führen Ladebefehle für die entsprechende +\PName{Datei}, das entsprechende \PName{Paket} oder die entsprechende +\PName{Klasse} dann wieder dazu, dass die \PName{Datei}, das \PName{Paket} +oder die \PName{Klasse} selbst anstelle der Ersatzdatei, des Ersatzpakets oder +der Ersatzklasse geladen wird.% \EndIndexGroup @@ -617,7 +609,7 @@ geladen wird.% Gerade\ChangedAt{v3.08}{\Package{scrlfile}} in Klassen und Paketen, die innerhalb von Firmen oder Instituten verwendet werden, findet man häufig, dass sehr viele Pakete nur deshalb geladen werden, weil die Anwender diese Pakete -oft verwenden. Wenn es dann mit einem dieser automatisch geladenen Paketen zu +oft verwenden. Wenn es dann mit einem dieser automatisch geladenen Pakete zu einem Problem kommt, muss man irgendwie das Laden des problematischen Pakets verhindern. Auch hier bietet \Package{scrlfile} eine einfache Lösung. @@ -628,7 +620,7 @@ verhindern. Auch hier bietet \Package{scrlfile} eine einfache Lösung. \Parameter{Paketliste} \end{Declaration} Wird diese Anweisung\ChangedAt{v3.08}{\Package{scrlfile}} vor dem -Laden eines Paket mit \Macro{usepackage}\IndexCmd{usepackage}, +Laden eines Pakets mit \Macro{usepackage}\IndexCmd{usepackage}, \Macro{RequirePackage}\IndexCmd{RequirePackage} oder \Macro{RequirePackageWithOptions}\IndexCmd{RequirePackageWithOptions} aufgerufen, so wird das Laden des Pakets effektiv verhindert, falls es in @@ -736,7 +728,7 @@ erfolgt.% \Macro{UnPreventPackageFromLoading*}\Parameter{Paketliste} \end{Declaration} Statt\ChangedAt{v3.12}{\Package{scrlfile}} die Liste der Pakete, für die das -Laden verhindert werden soll, komplett zurück zu setzen, kann man auch +Laden verhindert werden soll, komplett zurückzusetzen, kann man auch einzelne oder mehrere Pakete gezielt von dieser Liste entfernen. Die Sternvariante des Befehls löscht außerdem den \PName{Stattdessencode}, der für das Paket gespeichert ist. Falls die Verhinderungsliste beispielsweise aus @@ -769,6 +761,7 @@ einer gespeicherten Liste wiederhergestellt wird, wird dann der ausgeführt.% \end{Example}% \EndIndexGroup +%\ExampleEndFix % Am Ende des Kapitels nicht ausführen % \EndIndexGroup -- cgit v1.2.3