マクロが再定義されている場所や時期を追跡する可能性はありますか?

マクロが再定義されている場所や時期を追跡する可能性はありますか?

私は現在、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再定義が行われている場所を推測できる場合があります。

関連情報