El color del comando no funciona con el nombre de un color creado mediante macros

El color del comando no funciona con el nombre de un color creado mediante macros

Considere el siguiente código y especialmente el comando \nicecolornameque construye el nombre de un color siguiendo el patrón ["nice"][shade][hue]. Con su nombre actual, el comando \colorno puede tomar la salida de \nicecolorname.

PREGUNTA: ¿Cómo modificar el comando \nicecolornamepara que su salida sea compatible \color? Si no es posible, ¿cómo modificar el código de una manera que funcione?


\documentclass{standalone}
\RequirePackage{xparse}
\RequirePackage{xcolor}
\RequirePackage{xcolor-material}

\definecolor{nicelightblue}{named}{MaterialIndigo50}
\definecolor{nicemidblue}{named}{MaterialIndigo500}
\definecolor{nicedarkblue}{named}{MaterialIndigo900}
\definecolor{nicelightred}{named}{MaterialRed50}
\definecolor{nicemidred}{named}{MaterialRed500}
\definecolor{nicedarkred}{named}{MaterialRed900}
\definecolor{nicelightgreen}{named}{MaterialRed50}
\definecolor{nicemidgreen}{named}{MaterialRed500}
\definecolor{nicedarkgreen}{named}{MaterialRed900}

\newcommand{\nicecolorhue}{green}
\newcommand{\nicecolorshade}{dark}
\newcommand{\nicecolorhueref}{\nicecolorhue}
\newcommand{\nicecolorshaderef}{\nicecolorshade}

\NewDocumentCommand\nicecolorname{O{mid} m}{nice#1#2}

\begin{document}
{\color{blue}$\bullet$}                                                  % OK
{\color{nicemidred}$\bullet$}                                            % OK
{\color{\nicecolorname[mid]{red}}$\bullet$}                              % ERROR
{\color{\nicecolorname[\nicecolorshade]{\nicecolorhue}}$\bullet$}        % ERROR
{\color{\nicecolorname[\nicecolorshaderef]{\nicecolorhueref}}$\bullet$}  % ERROR
\end{document}

Respuesta1

El argumento necesitaexpandira un color:

\documentclass{standalone}
% only needed in old latex \RequirePackage{xparse}
\RequirePackage{xcolor}
\RequirePackage{xcolor-material}

\definecolor{nicelightblue}{named}{MaterialIndigo50}
\definecolor{nicemidblue}{named}{MaterialIndigo500}
\definecolor{nicedarkblue}{named}{MaterialIndigo900}
\definecolor{nicelightred}{named}{MaterialRed50}
\definecolor{nicemidred}{named}{MaterialRed500}
\definecolor{nicedarkred}{named}{MaterialRed900}
\definecolor{nicelightgreen}{named}{MaterialRed50}
\definecolor{nicemidgreen}{named}{MaterialRed500}
\definecolor{nicedarkgreen}{named}{MaterialRed900}

\newcommand{\nicecolorhue}{green}
\newcommand{\nicecolorshade}{dark}
\newcommand{\nicecolorhueref}{\nicecolorhue}
\newcommand{\nicecolorshaderef}{\nicecolorshade}

\NewExpandableDocumentCommand\nicecolorname{O{mid} m}{nice#1#2}

\begin{document}
{\color{blue}$\bullet$}                                                  % OK
{\color{nicemidred}$\bullet$}                                            % OK
{\color{\nicecolorname[mid]{red}}$\bullet$}                              % no ERROR
{\color{\nicecolorname[\nicecolorshade]{\nicecolorhue}}$\bullet$}        % no ERROR
{\color{\nicecolorname[\nicecolorshaderef]{\nicecolorhueref}}$\bullet$}  % no ERROR
\end{document}

información relacionada