Есть ли возможность отслеживать, где/когда переопределяется макрос?

Есть ли возможность отслеживать, где/когда переопределяется макрос?

В настоящее время я пытаюсь решить несколько ошибок, для которых было бы удобно, если бы существовала система в 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файле вы можете догадаться, где происходит переопределение.

Связанный контент