Como verificar com segurança se um comando/pacote está disponível no momento da compilação?

Como verificar com segurança se um comando/pacote está disponível no momento da compilação?

Eu quero produzir um documento latex que possa ser compilado com poucos pacotes, digamos que xcolorpode estar faltando como exemplo (suponha que seja um documento que meus chefes irão compilar e eu não controlo quais pacotes eles instalaram e devo evitar erros de compilação) , mas ainda assim gostaria de usar o comando com segurança \colorse o pacote estiver disponível. Se possível, gostaria de uma solução que não envolvesse a instalação de novos pacotes.

Para ser mais preciso, gostaria de escrever este tipo de documento

\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}

Where \useIFpackage{xcolor}não faz nada se xcolornão estiver disponível e \IFundefcommand{\color}[1]{}define o comando \colorsomente se ainda não estiver definido.

Suspeito que esse comportamento específico possa não ser possível. Nesse caso, agradeceria se você pudesse me indicar recursos adicionais quepoderser útil/interessante para algo semelhante.

Responder1

obrigado a @moewe por fornecer informações suficientes nos comentários para me ajudar a encontrar esta solução.

Para o exemplo da pergunta, acredito agora que este documento deve cobrir meu caso de uso:

\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}

Tive problemas estranhos ao usar \providecommand, mas o branch else é um lugar perfeito para a \newcommandno meu caso.

informação relacionada