Ich habe mehrere Fehler zu diesem Minimalbeispiel (aktuellstes TeX Live 2012) gemeldet. Die Fehler sind mit den letzten TeX Live-Updates aufgetreten.
\RequirePackage[l2tabu, orthodox]{nag}
\documentclass{scrbook}
\usepackage{morewrites}
\RequirePackage{listings}
\AtBeginDocument{%
\RequirePackage{mdframed}
}
\begin{document}
\end{document}
In xparse.sty
:
! Die Verwendung von „von“
\GetIdInfoAuxI
entspricht nicht der Definition. l.66\GetIdInfo$ Id: xparse.dtx 4467 2013-03-12 08:29:05Z joseph $
In etoolbox.sty
:
(
c:/texlive/2012/texmf-dist/tex/latex/etoolbox/etoolbox.sty
! Fehlt$
eingefügt.
In mdframed.sty
:
! TeX-Kapazität überschritten, tut mir leid
[input stack size=5000]
.\etoolbox.sty-h@@k ->\etoolbox.sty-h@@k \etb@catcodes \undef \etb@catcodes
l.72\RequirePackage{etoolbox}
[2011/01/03]
Antwort1
Die Antwort von @DavidCarlisle beschreibt die Ursache dieses Problems im Detail. Auch wenn die Lösung funktioniert, ist es möglicherweise besser, eine Lösung mit weniger Catcode-Magie zu verwenden. Mithilfe des \AtEndPreamble
von bereitgestellten Makros etoolbox
kann man das MWE so umschreiben, dass keine Fehler auftreten:
\RequirePackage[l2tabu, orthodox]{nag}
\documentclass{scrbook}
\usepackage{morewrites}
\RequirePackage{listings}
\usepackage{etoolbox}
\AtEndPreamble{%
\RequirePackage{mdframed}
}
\begin{document}
\end{document}
Allerdings sehe ich keinen Grund, das Laden mdframed
zunächst hinauszuzögern.
Antwort2
Das Nag-Paket ändert $
seine übliche Definition zu „aktiv“
\AtBeginDocument{\catcode`$\active}%$
\AtEndDocument{\catcode`$=3\relax}
Durch eine Verzögerung beim Dokumentbeginn versucht das Programm, die dadurch entstehenden Konflikte zu minimieren.
das MDFramed (über Xparse) wird $
zum Parsen der Quellcodeverwaltungsheader in den Paketdateien verwendet. Dies schlägt fehl, da es RequirePackage
bis BeginDocument verzögert wurde.
Die naheliegendste Lösung hierfür ist die Verwendung von
\usepackage{mdframed}
statt
\AtBeginDocument{%
\RequirePackage{mdframed}
}
Aber es hängt davon ab, warum das Laden des Pakets überhaupt verzögert wurde …
Wie in den Kommentaren angemerkt ist das Verzögern des Paketladens \AtBeginDocument
immer riskant, da das Paket dadurch später als beabsichtigt geladen wird, nachdem LaTeX globale Schriftart- und Seitengrößenstrukturen eingerichtet hat. Dies funktioniert jedoch:
\RequirePackage[l2tabu, orthodox]{nag}
\documentclass{scrbook}
\usepackage{morewrites}
\RequirePackage{listings}
\AtBeginDocument{%
\edef\saveddcatcode{\the\catcode\expandafter`\string$}%
\catcode`\$3 %
\RequirePackage{mdframed}%
\catcode`\$ \saveddcatcode\relax
}
\begin{document}
\end{document}