如何制作已使用的自定义宏列表

如何制作已使用的自定义宏列表

我以前有一个单独的文件来存储我的自定义宏。它只不过是一个巨大的\newcommands和列表\NewDocumentCommands

现在,我有一条小笔记想与我的一个朋友分享。我想给他发送一个独立的 LaTeX 文件,其中我在此特定笔记中使用的所有自定义宏都包含在标题中。我不喜欢复制粘贴全部标题中的宏,因为我只使用其中的一小部分。除了手动浏览我的笔记并逐一添加宏之外,还有更好的方法吗?

为了更好地理解,这里是MWE:

\documentclass{article}

\usepackage{filecontents}

\begin{filecontents*}{macros.tex}
    \newcommand{\macroA}{A}
    \newcommand{\macroB}{B}
    \newcommand{\macroC}{C}
    \newcommand{\macroD}{D}
\end{filecontents*}

\begin{document}
    \input{macros.tex}
    \macroA and \macroD
\end{document}

我想生成以下列表:

  • \macroA
  • \macroD

答案1

我在以下帮助下找到了部分解决方案

我使用这个包cmdtrack然后awk扫描我的log文件。(grep或者类似的程序也是可行的。)

稍微改变的 MWE 看起来像

\documentclass{article}

\usepackage{filecontents}

\begin{filecontents*}{macros.tex}
    \newcommand{\macroA}{A}
    \newcommand{\macroB}{B}
    \newcommand{\macroC}{C}
    \newcommand{\macroD}{D}
\end{filecontents*}

\usepackage{cmdtrack}
\input{macros.tex}

\begin{document}
    \macroA{} and \macroD{}
\end{document}

编译后我运行以下awk命令:

awk ' /was used on line/ { print $1 }' <file>.log

其结果如下列表:

"macroA"
"macroD"

对于带有 的宏来说,\newcommands这个有效,但对于带有 的宏则无效\NewDocumentsCommands

相关内容