如何从不同的包调用两个同样定义的命令

如何从不同的包调用两个同样定义的命令

假设我们在不同的包中有两个同名的命令,例如

inenglish.sty

\newcommand\house{This is a house.}

inspanish.sty

\newcommand\house{Esto es una casa.}

这个宏能以不同于调用文档的方式调用,包括包名吗?

如果这不可能,那么如何将这两个命令分开分组?我想到的唯一方法是

\newcommand\houseinenglish{This is a house.}
\newcommand\houseinspanish{Esto es una casa.}

答案1

没有命名空间在 (La)TeX 中,就像在大多数编程语言中一样。以下宏定义将覆盖先前的宏定义(使用 TeX 定义宏时\def)或导致错误(使用 LaTeX 定义宏时\newcommand)。

不过你可以复制定义使用 将一个宏转换为另一个宏\let\somenewmacro\someexistingmacro。生成的宏独立于另一个宏,并且不会在之后使用它,就像使用 时的情况一样\newcommand{\somenewcommand}{\someexistingmacro}

为了在再次使用现有宏定义时不会引起错误,\newcommand您可以简单地将其含义更改为,\relax以便\newcommand认为它不存在(因为“已存在”检查在\relax未定义的宏之间没有区别)。

基本上尝试:

\usepackage{inenglish}
\let\houseinenglish\house
\let\house\relax % to 'undefine' it so that \newcommand\house works again 
\usepackage{inspanish}
\let\houseinspanish\house % or just use \house

请注意,如果您有大量宏,这会很麻烦。此外,如果宏使用其他内部宏(在两个包中也具有相同的名称),您就会遇到麻烦。

相关内容