检查作为参数传递给包的颜色是否已定义

检查作为参数传递给包的颜色是否已定义

我正在尝试编写一个小程序包,根据模板中使用的教师选择定义强调色。如果教师不存在,我想生成一条错误消息。我目前有以下内容:

thecolors.sty:

\NeedsTeXFormat{LaTeX2e}
\providesPackage{thecolors}{2021/07-05 v1.0 LaTeX2e document class}
\RequirePackage{kvoptions}
\RequirePackage{xcolor}

\SetupKeyvalOptions{
  family = ugcol,
  prefix = ugcol@
}
% ug is the default if no faculty is given
\DeclareStringOption[ug]{faculty}[ug]
\ProcessKeyvalOptions*

\definecolor{ug}{RGB}{255, 210, 0}
\definecolor{lw}{RGB}{241,164,43}
\definecolor{re}{RGB}{220,78,40}

% Now I need something like (THIS DOESN'T WORK)
\ifdefined \csname\string\color@\ugcol@faculty\endcsname
  \xglobal\colorlet{ugaccent}{\ugcol@faculty}
\else
  \PackageError{theclors}{The faculty \ugcol@faculty \space doesn't exist}
\fi

有人告诉我颜色被存储为xcolorcolor@xxx所以我试图检查 是否color@xxx被定义,其中xxx是 中找到的字符串\ugcol@faculty。但我显然以一种非常错误的方式这样做。

然后应在文档中使用此包:

\documentclass[a4paper,11pt]{article}
\usepackage[faculty = lw]{thecolors}
\begin{document}

blabla some text.

\color{ugaccent} WHAT IS THIS COLOR?

\end{document}

非常感谢您的帮助。

答案1

\ifcsname根据 Ulrike Fischer 的评论:这个问题已经通过如下示例解决:

\ifcsname \string\color@\ugcol@faculty\endcsname
  \xglobal\colorlet{ugaccent}{\ugcol@faculty}
\else
  \PackageError{theclors}{The faculty \ugcol@faculty \space doesn't exist}
\fi

相关内容