我以前有一个单独的文件来存储我的自定义宏。它只不过是一个巨大的\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
。