如何获取有效命令列表?

如何获取有效命令列表?

我想根据所使用的包动态创建在特定文件中有效的 LaTeX 命令列表,以便我可以使用它们来完成代码。

LaTeX 是否提供了一种方法来检查命令是否是命令(除了尝试编译之外),或者更好的是,用于获取包中的命令列表?对于我的目的,我不在乎它们必须采用什么样的参数等(尽管如果它们必须在之后进行某些括号排列,那可能是相关的)。它他们是否在数学模式下工作以及是否在数学模式下工作非常重要。

除此之外,是否有一种简单的方法来解析 TeX 文件和包以获取所有使用的包和其中的所有命令?

答案1

不,这是不可能的。除了标准\def(和变体)或\newcommand和之外,软件包还可以通过多种方式定义命令\DeclareRobustCommand。例如,考虑\DeclareMathSymbol\DeclareTextCommand(但即使在 LaTeX 内核中也有其他方法)。

举几个例子,algpseudocode使用\algdef\algnewcommand;其他包有自己的方法。它们甚至可以根据用户输入动态定义命令。其他命令可能有“有限的生命”(想想 的单元名称siunitx)和不同的语法,具体取决于调用它们的位置。

该列表还应排除所有内部命令和其他用作临时宏名的命令(例如\temp \next或)。\do

至于语法,请考虑例如memoir重新定义\chapter和其他分段命令可选参数,而不是一个。其他包可能会定义*现有命令的变体,为了发现这一点,您需要分析定义本身:基本上,如果\foo已定义并且包想要添加*变体,我们会发现类似

\let\org@foo\foo
\renewcommand{\foo}{\@ifstar\foo@star\org@foo}
\newcommand{\foo@star}{...<whatever>...}

它们定义的包和命令的数量非常庞大。真的。仅对用户加载的包进行词法分析就意味着要遵循所有\RequirePackage被调用的包。也许其中一些只是有条件地加载。更不用说命令可能在包输入的其他文件中定义,所以您还应该遵循\input类似的命令。

祝你好运。;-)

相关内容