この最小限の例 (最新の 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
定義と一致しません。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の容量を超えました。申し訳ありません 。l.72
[input stack size=5000]
[ 2011/01/03]\etoolbox.sty-h@@k ->\etoolbox.sty-h@@k \etb@catcodes \undef \etb@catcodes
\RequirePackage{etoolbox}
答え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}