이 최소 예제(최신 TeX Live 2012)에서 몇 가지 오류가 보고되었습니다. 최근 TeX Live 업데이트에서 오류가 발생했습니다.
\RequirePackage[l2tabu, orthodox]{nag}
\documentclass{scrbook}
\usepackage{morewrites}
\RequirePackage{listings}
\AtBeginDocument{%
\RequirePackage{mdframed}
}
\begin{document}
\end{document}
안에 xparse.sty
:
! of의 사용이
\GetIdInfoAuxI
해당 정의와 일치하지 않습니다. l.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}