Hallo!
Die unterschiedliche Funktionsweise von \AfterPackage
und \AfterAtEndOfPackage
wird in der KOMA-Script–Anleitung gut erklärt. Im Zuge einiger Tests bin ich jedoch noch auf einen weiteren Unterschied gestoßen. Dieser tritt zutage, wenn \AfterPackage
und \AfterAtEndOfPackage
nach dem Laden eines bestimmten Pakets, aber noch vor einem zweiten Versuch, ebendieses Paket zu laden, verwendet werden:
\documentclass{scrartcl} \typeout{Try to load package ...} \usepackage{lmodern} \typeout{Loaded package.} \AfterPackage{lmodern}{% \typeout{This is \protect\AfterPackage.}% } \AfterAtEndOfPackage{lmodern}{% \typeout{This is \protect\AfterAtEndOfPackage.}% } \typeout{Try to load package ...} \usepackage{lmodern} \typeout{Package already loaded.} \begin{document} \end{document}
In der Terminalausgabe findet sich erwartungsgemäß keine „Botschaft“ von \AfterPackage
, sehr wohl jedoch eine von \AfterAtEndOfPackage
, und zwar nach dem zweiten Versuch, das lmodern
-Paket zu laden.
Meine Frage lautet nun: Ist dieses Verhalten von \AfterAtEndOfPackage
beabsichtigt, i.e. ein Feature, welches man bei Bedarf ausnützen könnte?
MfG, Michael
Logische Konsequenz
Das Verhalten ist tatsächlich kein Fehler, sondern logische Konsequenz des so spät wie irgend möglich Ausführens. Das passiert übrigens auch bei
\AfterPackage!
, wenn das Laden des angegebenen Pakets bereits begonnen hat (und eventuell auch bereits beendet wurde).Nachdem ich bereits unzählige Varianten von
\AfterPackage
implementiert habe, könne ich aber wohl auch noch eine Variante von\AfterAtEndOfPackage
implementieren, die das anders macht. Wobei ich dann wahrscheinlich auch noch eine weitere Variante von\AfterPackage
implementieren muss, weil bisher\AfterPackage!
eben dieses\AfterEndOfPackage
verwendet (und dann eben noch eine Variante benötigt würde, die beispielsweise\AfterAtEndOfPackage
) verwendet.Und frag mich bitte nicht nach dem Sinn dieser unzähligen Varianten. Die meisten davon habe ich auf Zuruf implementiert. Ich verwende nur extrem wenige davon selbst, um in KOMA-Script Workarounds für Kompatibilitätsprobleme anderer Pakete mit KOMA-Script zu implementieren.
Danke
Danke für die Erklärung!
Und?
Brauchst Du nun noch eine Variante von
\AfterEndOfPackage
, die nichts tut, wenn das Paket bereits geladen ist?Derzeit nicht,…
…obwohl ich mir ohne Weiteres vorstellen kann, dass eine solche Variante und vor allem eine Variante, die nach dem vollständigen Laden eines Pakets genau so wie
\AfterPackage*
arbeitet, ihre Anwender finden würden.In meiner aktuellen Anwendung ist die Funktionsweise von
\AfterAtEndOfPackage
eigentlich optimal.Nicht einfach so
Einfach so aus Lust und Laune implementiere ich das nicht. Wenn es nämlich noch funktionieren soll, wenn das Paket (oder für
\AfterAtEndOfClass
die Klasse) gerade geladen wird, dann bedeutet die Implementierung schon einen gewissen Aufwand. Solange es also niemand nachfragt …