
Betrachten Sie den folgenden Code und insbesondere den Befehl \nicecolorname
, der den Namen einer Farbe nach dem Muster ["schön"][Farbton][Farbton] erstellt. In seinem aktuellen Namen \color
kann der Befehl die Ausgabe von nicht annehmen \nicecolorname
.
FRAGE: Wie kann der Befehl geändert werden, \nicecolorname
damit seine Ausgabe mit kompatibel ist \color
? Wenn dies nicht möglich ist, wie kann der Code so geändert werden, dass es funktioniert?
\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}
Antwort1
Das Argument mussexpandierenzu einer Farbe:
\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}