命令顏色不適用於透過巨集建構的顏色名稱

命令顏色不適用於透過巨集建構的顏色名稱

\nicecolorname考慮以下程式碼,尤其是按照模式 ["nice"][shade][hue] 建立顏色名稱的命令。在目前名稱中,該指令\color無法取得 的輸出\nicecolorname

問題: 如何修改指令\nicecolorname使其輸出相容\color?如果不可能,如何以可行的方式修改程式碼?


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

答案1

論證需要擴張到一種顏色:

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

相關內容