El uso de \GetIdInfoAuxI no coincide con su definición y otros errores

El uso de \GetIdInfoAuxI no coincide con su definición y otros errores

Se me han informado varios errores con este ejemplo mínimo (último TeX Live 2012). Los errores se introdujeron con actualizaciones recientes de TeX Live.

\RequirePackage[l2tabu, orthodox]{nag}

\documentclass{scrbook}
\usepackage{morewrites}
\RequirePackage{listings}
\AtBeginDocument{%
  \RequirePackage{mdframed}
}

\begin{document}
\end{document}

En xparse.sty:

! El uso de \GetIdInfoAuxIno coincide con su definición. l.66\GetIdInfo$ Id: xparse.dtx 4467 2013-03-12 08:29:05Z joseph $

En etoolbox.sty:

( c:/texlive/2012/texmf-dist/tex/latex/etoolbox/etoolbox.sty ! Falta $insertado.

En mdframed.sty:

! Se superó la capacidad de TeX, lo siento [input stack size=5000]. \etoolbox.sty-h@@k ->\etoolbox.sty-h@@k \etb@catcodes \undef \etb@catcodes 1.72 \RequirePackage{etoolbox}[03/01/2011]

Respuesta1

La respuesta de @DavidCarlisle detalla la causa de este problema y, aunque la solución funciona, puede ser preferible utilizar una solución con menos magia de código cat. Utilizando la \AtEndPreamblemacro proporcionada por etoolbox, se puede reescribir el MWE para que no se produzcan errores:

\RequirePackage[l2tabu, orthodox]{nag}
\documentclass{scrbook}

\usepackage{morewrites}
\RequirePackage{listings}
\usepackage{etoolbox}
\AtEndPreamble{%
  \RequirePackage{mdframed}
}

\begin{document}
\end{document}

Aunque no veo ninguna razón para posponer la carga mdframedpara empezar.

Respuesta2

El paquete nag cambia $de su definición habitual a "activo"

\AtBeginDocument{\catcode`$\active}%$
\AtEndDocument{\catcode`$=3\relax}

Intenta minimizar los conflictos que esto puede provocar retrasando el inicio del documento.

el uso mdframed (a través de xparse) $para analizar los encabezados de control de fuente en los archivos del paquete. Esto falla porque RequirePackagese retrasó hasta BeginDocument.

La solución más obvia para esto es simplemente usar

\usepackage{mdframed}

en vez de

\AtBeginDocument{%
  \RequirePackage{mdframed}
}

Pero depende de por qué se retrasó la carga del paquete en primer lugar...


Como se señaló en los comentarios, retrasar la carga del paquete \AtBeginDocumentsiempre es riesgoso ya que carga el paquete más tarde de lo previsto, después de que LaTeX haya configurado las estructuras globales de fuente y tamaño de página; sin embargo, esto funciona:

\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}

información relacionada