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
\GetIdInfoAuxI
nã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 \AtEndPreamble
macro 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 mdframed
para 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 RequirePackage
foi 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}