
私は現在、LaTeX で特定のマクロを「スパイ」できるシステムがあれば便利だろうといういくつかのバグを解決しようとしています。マクロが再定義されている場所と時間に興味があります。理想的には次のように記述して\spy\mymacro
、出力します。
`file.cls -> \newcommand\macro`,
`package.sty -> \renewcommand\macro`
等々。
答え1
それはできません。例えば、パッケージはこう言うかもしれません
\newcommand{\redefinefoo}[1]{\renewcommand{\foo}{#1}}
\providecommand{\foo}{whatever}
そして、の再定義は\foo
どこでも起こるかもしれない
\redefinefoo{something else}
が発行されますが、それ自体は他のマクロに隠されている可能性があります。
\def
のベースでもあるを再定義すること\renewcommand
は、ほとんどすべてを壊してしまうため、問題外です。
しかし、\tracingassigns=1
文書やログファイルには次のように記載できます。
{changing \foo=\long macro:->whatever}
{into \foo=\long macro:->something else}
ファイル内の場所に基づいて、log
再定義が行われている場所を推測できる場合があります。