如何安全地檢查命令/套件在編譯時是否可用?

如何安全地檢查命令/套件在編譯時是否可用?

我想產生一個可以用很少的包進行編譯的乳膠文檔,比如說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我來說是一個完美的地方。

相關內容