Sie sind hier

Geplante Änderungen in zukünftigen KOMA-Script-Versionen

Bild von Markus Kohm

Dies wird die zukünftige Release, die bisher allenfalls im Source-Repository auf SourceForge und eventuell teilweise auch bereits als aktuelle Prerelease zur Installation für TeX Live und MiKTeX bereit steht.

Da KOMA-Script seit v3.28 als fertig in dem Sinn zu betrachten ist, dass in der Regel keine komplett neuen Features mehr in zukünftige Versionen eingebaut werden sollen, werden sich Änderungen hauptsächlich auf die Behebung von Fehlern, Entfernung von veralteten Teilen, notwendige Anpassungen an LaTeX-Kernel-Änderungen und kosmetische Veränderungen beschränken.

Wichtige Änderungen:

LaTeX bekommt einen neuen, generellen Hook-Mechanismus und die bisherigen Hook-Anweisungen des LaTeX-Kerns werden darauf umgestellt und entsprechend erweitert und in ihrer Funktion verändert. Es ist zu prüfen, inwiefern KOMA-Script bei Verwendung dieser Hooks anzupassen ist. Obwohl dies mit einigem Aufwand verbunden ist, brennt die entsprechende Änderung natürlich wieder einmal.
scrlfile-hook:
Neues rein internes Paket, das LaTeX 2020-10-01 voraussetzt und einige der Anweisungen von scrlfile mit der neuen Hook-Schnittstelle aus lthooks und lffilehook implementiert. Derzeit werden die folgenden Befehle unterstützt: \BeforeFile, \BeforeClass, \BeforePackage, \AfterFile, \AfterClass, \AfterClass*, \AfterPackage, \AfterPackage*, \AfterAtEndOfClass, \AfterAtEndOfClass*, \AfterAtEndOfPackage, \AfterAtEndOfPackage*, \PreventPackageFromLoading, \PreventPackageFromLoading*, \UnPreventPackageFromLoading, \UnPreventPackageFromLoading*, \StorePreventPackageFromLoading, \ResetPreventPackageFromLoading, \ReplaceInput, \ReplaceClass, \ReplacePackage, \UnReplaceInput, \UnReplaceClass, \UnReplacePackage, \BeforeClosingMainAux, \AfterReadingMainAux, \protected@immediate@write.
Alle Hook-Befehle unterstützen darüber hinaus ein zusätzliches optionales Argument entsprechend dem optionalen Argument von \AddToHook.
Ab Revision 3521 steht im Quellcode-Repository eine erste Fassung für Tests bereit. Welche der genannten Befehle unterstützt werden, hängt von der verwendeten Revision ab.
scrlfile-patcholdlatex:
Neues rein internes Paket, das die Funktionalität von scrlfile-hook für LaTeX Kernel bis einschließlich 2020-04-01 durch patchen von teils internen Kernel-Macros bereitstellt. Das Beispiel für scrlfile-hook funktioniert auch mit diesem Paket, wenn man in jenem Beispiel überall -hook durch -patcholdlatex ersetzt. Es wird darauf hingewiesen, dass die Ausführungsreihenfolge der Hooks nicht zu 100% identisch ist, sondern lediglich der Dokumentation entspricht. Darüber hinaus wird das zusätzliche optionale Argument, das scrlfile-hook für alle Hook-Befehle bietet, derzeit nicht unterstützt.
Ab Revision 3523 steht im Quellcode-Repository eine erste Fassung für Tests bereit.
scrlfile:
  • Intern verwendet das Paket je nach LaTeX-Kern entweder scrlfile-hook (LaTeX ab 2020-10-01) oder scrlfile-patcholdlatex (LaTeX bis 2020-04-01).
  • Die Anweisungen \AfterClass+ und \AfterClass! erhalten den Status veraltet (deprecated). Sie sind nur bei explizitem Laden von scrlfile mit Option withdeprecated verfügbar und geben eine entsprechende Warnung aus. Es wird empfohlen stattdessen die neue Anweisung \AfterAtEndOfClass* zu verwenden. Beide(!) Anweisungen werden intern auf diese eine Anweisung abgebildet. Meines Wissens gibt es niemanden, der die Anweisungen verwendet.
  • Die Anweisungen \AfterPackage+ und \AfterPackage! erhalten den Status veraltet (deprecated). Sie sind nur bei explizitem Laden von scrlfile mit Option withdeprecated verfügbar und geben eine entsprechende Warnung aus. Es wird empfohlen stattdessen die neue Anweisung \AfterAtEndOfPackage* zu verwenden. Beide(!) Anweisungen werden intern auf diese eine Anweisung abgebildet. Meines Wissens gibt es niemanden, der mit dieser Umstellung ernsthafte Probleme hat. Ich habe sogar einige Pakete gefunden, in denen ohnehin besser \AfterPackage* verwendet worden wäre.
  • Um scrlfile mit den meisten veralteten Pakten oder Klassen verwenden zu können, die sich noch auf veraltete Befehle von scrlfile verlassen, kann das Paket noch vor \documentclass per \RequirePackage[withdeprecated]{scrlfile} geladen werden. Allerdings erhöht das lediglich die Chance, dass es funktioniert. Es ist keine Garantie. Wer absolute Kompatibilität benötigt muss ein KOMA-Script < 3.32 und LaTeX < 2020-10-01 verwenden. Aufgrund der massiven Änderungen an LaTeX und der dringenden Bitte des LaTeX-Teams für die Funktionalität von scrlfile keine LaTeX-Kern-Anweisungen mehr zu patchen, sind die Möglichkeiten des Erhalts absoluter Kompatibilität mit vertretbarem Aufwand leider limitiert. Hier die Testdatei, mit der ich während der Entwicklung u. a. gearbeitet habe:
    \begin{filecontents}[force]{test-scrfile.cls}
    \ProvidesClass{test-scrfile}[2020/08/25]
    \BeforeClass{test-scrfile}{\typeout{inside class \string\BeforeClass}}
    \AfterClass{test-scrfile}{\typeout{inside class \string\AfterClass}}
    \AfterClass*{test-scrfile}{\typeout{inside class \string\AfterClass*}}
    \AfterAtEndOfClass{test-scrfile}{\typeout{inside class \string\AfterAtEndOfClass}}
    \AfterAtEndOfClass*{test-scrfile}{\typeout{inside class \string\AfterAtEndOfClass*}}
    \AtEndOfClass{%
      \BeforeClass{test-scrfile}{\typeout{inside \string\AtEndOfClass\space \string\BeforeClass}}
      \AfterClass{test-scrfile}{\typeout{inside \string\AtEndOfClass\space \string\AfterClass}}
      \AfterClass*{test-scrfile}{\typeout{inside \string\AtEndOfClass\space \string\AfterClass*}}
      \AfterAtEndOfClass{test-scrfile}{\typeout{inside \string\AtEndOfClass\space \string\AfterAtEndOfClass}}
      \AfterAtEndOfClass*{test-scrfile}{\typeout{inside \string\AtEndOfClass\space \string\AfterAtEndOfClass*}}
    }
     
    \LoadClassWithOptions{article}
    \end{filecontents}
     
    \RequirePackage%[withdeprecated]
      {scrlfile}
     
    \BeforeClass{test-scrfile}{\typeout{before class \string\BeforeClass}}
    \AfterClass{test-scrfile}{\typeout{before class \string\AfterClass}}
    \AfterClass*{test-scrfile}{\typeout{before class \string\AfterClass*}}
    \AfterAtEndOfClass{test-scrfile}{\typeout{before class \string\AfterAtEndOfClass}}
    \AfterAtEndOfClass*{test-scrfile}{\typeout{before class \string\AfterAtEndOfClass*}}
     
    \documentclass{test-scrfile}
    \BeforeClass{test-scrfile}{\typeout{after class \string\BeforeClass}}
    \AfterClass{test-scrfile}{\typeout{after class \string\AfterClass}}
    \AfterClass*{test-scrfile}{\typeout{after class \string\AfterClass*}}
    \AfterAtEndOfClass{test-scrfile}{\typeout{after class \string\AfterAtEndOfClass}}
    \AfterAtEndOfClass*{test-scrfile}{\typeout{after class \string\AfterAtEndOfClass*}}
     
    \PreventPackageFromLoading[\typeout{hyperref is not used}]{hyperref}
    \PreventPackageFromLoading[\typeout{geometry is not used}]{geometry}
    \PreventPackageFromLoading[\typeout{inputenc is not used}]{inputenc}
     
    \StorePreventPackageFromLoading\PreventList
    \ResetPreventPackageFromLoading
    \usepackage{geometry}
    \PreventPackageFromLoading*\PreventList
    \usepackage{hyperref}
     
    \UnPreventPackageFromLoading*{inputenc}
    \usepackage{inputenc}
    \PreventPackageFromLoading{inputenc}
     
    \ReplacePackage{german}{babel}
    \PassOptionsToPackage{main=ngerman}{babel}
    \usepackage{german}
     
    \ReplacePackage{scrpage2}{scrlayer-scrpage}
    \PassOptionsToPackage{hmode}{scrlayer-scrpage}
    \usepackage{scrpage2}
     
    \makeatletter
    \BeforeClosingMainAux{%
      \typeout{\string\BeforeClosingMainAux}%
      \protected@write\@mainaux{}{\protect\typeout{\protect\BeforeClosingMainAux\string\space\space code}}%
    }
    \AfterReadingMainAux{%
      \typeout{\string\AfterReadingMainAux}%
    }
    \makeatother
     
    \begin{document}
    Test \languagename
    \end{document}
    Der gezeigt Code sollte sowohl mit der auskommentierten Option als auch ohne ab KOMA-Script 3.32.3536 funktionieren. Mit gesetzter Option kann man natürlich auch noch \AfterClass+ und \AfterClass! ausprobieren wird dann aber zu keinem anderen Ergebnis gelangen als mit \AfterAtEndOfClass*.
Comments for "Geplante Änderungen in zukünftigen KOMA-Script-Versionen" abonnieren