如何仅导入某些命令?

如何仅导入某些命令?

soul包定义了大量短宏,其中一些我经常用于自己的写作。我只需要\hl\sethlcolor。有没有办法加载包并只获取这两个命令?

答案1

一些软件包允许使用选项选择定义的宏的数量,但我不认为该soul软件包提供这样的功能。


对于非常简单的包,可以将其装入一组中,并且只对需要的命令进行全局定义。但是,这变得很复杂,因为这些命令一旦使用内部宏,当然也必须保持定义。包soul非常复杂,这将成为一项繁琐的任务。

\begingroup
  \usepackage{<package>}
  \global\let\wantedmacro\wantedmacro
  \global\expandafter\let\csname special name\expandafter\endcsname\csname special name\endcsname
  % ...
\endgroup

还必须处理为每个加载的包定义的一些内部 LaTeX 宏等等。


更好的方法是,要么在加载包后(重新)定义宏,正如 Alan Munn 已经指出的那样,要么保存并恢复有问题的宏\usepackage。如果宏由另一个必须事先加载的包定义,则这是必要的。

\let\origsomemacro\somemacro % save the macro 
\let\somemacro\relax         % reset it, so it can be defined using `\newcommand` can be used without error
\usepackage{somepackage}     % load package
\let\altsomemacro\somemacro  % save that macro definition under a different name if required
\let\somemacro\origsomemacro % restore original definition

但是,如果包依赖于这些宏的自身定义,则可能会导致问题。

答案2

您可以加载该soul包,然后用来\renewcommand定义您自己的宏。

相关内容