O uso de \GetIdInfoAuxI não corresponde à sua definição e outros erros

O uso de \GetIdInfoAuxI não corresponde à sua definição e outros erros

Tenho vários erros relatados com este exemplo mínimo (último TeX Live 2012). Os erros foram introduzidos com atualizações recentes do TeX Live.

\RequirePackage[l2tabu, orthodox]{nag}

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

\begin{document}
\end{document}

Em xparse.sty:

! O uso de \GetIdInfoAuxInão corresponde à sua definição. 1.66\GetIdInfo$ Id: xparse.dtx 4467 2013-03-12 08:29:05Z joseph $

Em etoolbox.sty:

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

Em mdframed.sty:

! Capacidade TeX excedida, desculpe [input stack size=5000]. \etoolbox.sty-h@@k ->\etoolbox.sty-h@@k \etb@catcodes \undef \etb@catcodes 1.72 \RequirePackage{etoolbox}[2011/01/03]

Responder1

A resposta de @DavidCarlisle detalha a causa desse problema e, embora a solução funcione, pode ser preferível usar uma solução com menos magia de catcode. Usando a \AtEndPreamblemacro fornecida por etoolbox, pode-se reescrever o MWE para que não ocorram erros:

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

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

\begin{document}
\end{document}

Embora eu não veja razão para adiar o carregamento mdframedpara começar.

Responder2

O pacote nag muda $de sua definição usual para "ativo"

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

Ele tenta minimizar os conflitos que isso pode causar atrasando o início do documento.

o mdframed (via xparse) usa $para analisar os cabeçalhos de controle de origem nos arquivos do pacote. Isso falha porque RequirePackagefoi adiado até BeginDocument.

A solução mais óbvia para isso é apenas usar

\usepackage{mdframed}

em vez de

\AtBeginDocument{%
  \RequirePackage{mdframed}
}

Mas depende do motivo pelo qual o carregamento do pacote atrasou em primeiro lugar...


Como observado nos comentários, atrasar o carregamento do pacote \AtBeginDocumenté sempre arriscado, pois carrega o pacote mais tarde do que o pretendido, depois que o LaTeX configurou estruturas globais de fonte e tamanho de página, no entanto, isso 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}

informação relacionada