У меня есть несколько сообщений об ошибках в этом минимальном примере (последний TeX Live 2012). Ошибки появились в последних обновлениях TeX Live.
\RequirePackage[l2tabu, orthodox]{nag}
\documentclass{scrbook}
\usepackage{morewrites}
\RequirePackage{listings}
\AtBeginDocument{%
\RequirePackage{mdframed}
}
\begin{document}
\end{document}
В xparse.sty
:
! Использование
\GetIdInfoAuxI
не соответствует его определению. л.66\GetIdInfo$ Id: xparse.dtx 4467 2013-03-12 08:29:05Z joseph $
В etoolbox.sty
:
(
c:/texlive/2012/texmf-dist/tex/latex/etoolbox/etoolbox.sty
! Отсутствует$
вставлено.
В mdframed.sty
:
! Превышена емкость TeX, извините
[input stack size=5000]
.\etoolbox.sty-h@@k ->\etoolbox.sty-h@@k \etb@catcodes \undef \etb@catcodes
l.72\RequirePackage{etoolbox}
[2011/01/03]
решение1
Ответ @DavidCarlisle подробно описывает причину этой проблемы, и хотя решение работает, может быть предпочтительнее использовать решение с меньшим количеством магии catcode. Используя макрос, \AtEndPreamble
предоставленный etoolbox
, можно переписать MWE так, чтобы не возникало ошибок:
\RequirePackage[l2tabu, orthodox]{nag}
\documentclass{scrbook}
\usepackage{morewrites}
\RequirePackage{listings}
\usepackage{etoolbox}
\AtEndPreamble{%
\RequirePackage{mdframed}
}
\begin{document}
\end{document}
Хотя я не вижу причин откладывать загрузку mdframed
изначально.
решение2
Пакет nag меняет $
свое обычное определение на «активный»
\AtBeginDocument{\catcode`$\active}%$
\AtEndDocument{\catcode`$=3\relax}
Он пытается свести к минимуму возможные конфликты, откладывая начало работы над документом.
mdframed (через xparse) используется $
для анализа заголовков исходного контроля в файлах пакета. Это не удается, так как RequirePackage
было отложено до BeginDocument.
Наиболее очевидным решением этой проблемы является использование
\usepackage{mdframed}
скорее, чем
\AtBeginDocument{%
\RequirePackage{mdframed}
}
Но это зависит от того, почему изначально задержалась загрузка посылки...
Как отмечено в комментариях, отсрочка загрузки пакета \AtBeginDocument
всегда рискованна, поскольку она загружает пакет позже, чем предполагалось, после того, как LaTeX настроит глобальные структуры шрифтов и размеров страниц, однако это работает:
\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}