如何安全地检查命令/包在编译时是否可用?

如何安全地检查命令/包在编译时是否可用?

我想生成一个可以用很少的软件包进行编译的 latex 文档,假设xcolor可能缺少一些软件包(假设这是我的老板将要编译的文档,我无法控制他们安装了哪些软件包,并且我必须避免编译错误),但\color如果软件包可用,我仍然想安全地使用该命令。如果可能的话,我想要一个不涉及安装新软件包的解决方案。

更准确地说,我想写这种文件

\documentclass{article}

%%%%%% 
%%% Huge blobs of definitions 
%%% for \useIFpackage
%%% and \IFundefcommand
%%%%%%

\useIFpackage{xcolor}
\IFundefcommand{\color}[1]{}

\begin{document}
{
 \color{red} This package always
 compiles and if \emph{xcolor}
 is available this text should be red
}
\end{document}

\useIFpackage{xcolor}如果xcolor不可用则不执行任何操作,并且仅当尚未定义时才\IFundefcommand{\color}[1]{}定义命令。\color

我怀疑这种特定的行为可能无法实现,在这种情况下,如果您能向我指出其他资源,我将不胜感激。可能对于类似的东西来说有用/有趣。

答案1

感谢@moewe 在评论中提供足够的信息来帮助我找到这个解决方案。

对于问题中的例子,我现在认为该文档应该涵盖我的用例:

\documentclass{article}
\IfFileExists{xcolor.sty}
  {\usepackage{xcolor}}
  {\newcommand{\color}[1]{}}

\begin{document}
  {\color{red} This package always compiles and if \emph{xcolor} is available this text should be red }
\end{document}

我在使用时遇到了一些奇怪的问题\providecommand,但对我来说, else 分支是完美的位置\newcommand

相关内容