Wie kann ich zur Kompilierungszeit sicher überprüfen, ob ein Befehl/Paket verfügbar ist?

Wie kann ich zur Kompilierungszeit sicher überprüfen, ob ein Befehl/Paket verfügbar ist?

Ich möchte ein Latex-Dokument erstellen, das mit sehr wenigen Paketen kompiliert werden kann. Nehmen wir xcolorals Beispiel an, dass einige fehlen könnten (nehmen wir an, es ist ein Dokument, das meine Chefs kompilieren werden, und ich habe keine Kontrolle darüber, welche Pakete sie installiert haben, und ich muss Kompilierungsfehler vermeiden), aber ich möchte den Befehl trotzdem sicher verwenden können, \colorwenn das Paket verfügbar ist. Wenn möglich hätte ich gerne eine Lösung, bei der keine neuen Pakete installiert werden müssen.

Genauer gesagt möchte ich ein solches Dokument schreiben

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

Wobei \useIFpackage{xcolor}nichts passiert, wenn xcolores nicht verfügbar ist, und \IFundefcommand{\color}[1]{}der Befehl \colornur definiert wird, wenn er nicht bereits definiert ist.

Ich vermute, dass dieses spezielle Verhalten nicht möglich ist. In diesem Fall wäre ich Ihnen dankbar, wenn Sie mir weitere Ressourcen nennen könnten, diekönntefür etwas Ähnliches nützlich/interessant sein.

Antwort1

Danke an @moewe für die ausreichenden Informationen in den Kommentaren, die mir bei der Suche nach dieser Lösung geholfen haben.

Ich bin nun der Meinung, dass dieses Dokument für das Beispiel in der Frage meinen Anwendungsfall abdecken sollte:

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

Ich hatte seltsame Probleme bei der Verwendung , aber in meinem Fall \providecommandist der Else-Zweig der perfekte Ort für ein .\newcommand

verwandte Informationen