是否有可能追蹤重新定義巨集的位置/時間

是否有可能追蹤重新定義巨集的位置/時間

我目前正在嘗試解決幾個錯誤,如果 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文件中的位置,您也許能夠猜測重新定義發生的位置。

相關內容