Die Verwendung von \GetIdInfoAuxI entspricht nicht seiner Definition und anderen Fehlern

Die Verwendung von \GetIdInfoAuxI entspricht nicht seiner Definition und anderen Fehlern

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“ \GetIdInfoAuxIentspricht 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 \AtEndPreamblevon bereitgestellten Makros etoolboxkann 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 mdframedzunä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 RequirePackagebis 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 \AtBeginDocumentimmer 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}

verwandte Informationen