\GetIdInfoAuxI の使用が定義と一致しないなどのエラー

\GetIdInfoAuxI の使用が定義と一致しないなどのエラー

この最小限の例 (最新の 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}
}

しかし、そもそもパッケージの読み込みが遅れた理由によって異なります...


コメントで述べたように、パッケージの読み込みを遅らせることは、\AtBeginDocumentLaTeX がグローバル フォントとページ サイズ構造を設定した後に、意図したよりも遅くパッケージを読み込むことになるため、常にリスクを伴いますが、これは機能します。

\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}

関連情報