Incluyendo colores categóricos con \newcommand en PdfLatex

Incluyendo colores categóricos con \newcommand en PdfLatex

Deseo tener una lista de códigos de color HTML predefinidos y convertirlos en una variable reutilizable numerada a la que se pueda hacer referencia más adelante. Esto es útil cuando tiene una cantidad determinada de variables o categorías que desea colorear en línea sin tener que recordar el nombre de la definición, o crear grandes cantidades de definiciones y escribirlas \textcolour{colname}{text}cada vez.

Definición:

cols = ['#222','#ffc','#123']

Uso:

\c1 {text in firstcolour} and then \c2{text in secondcolour}

Respuesta1

Podemos usar un contador junto con una macro de nuevo comando para generar en el futuro nuevos comandos que puedan colorear el texto. A continuación se ofrece un ejemplo sencillo:

%define colours pre document 

\newcounter{cnt}
\newcommand{\cdef}[1]{%
 \stepcounter{cnt}%
\xglobal \definecolor{#1}{HTML}{#1}
\expandafter\newcommand\csname c\Roman{cnt}\endcsname{\textcolor{#1}}%
}


%start the main body
\begin{document}



% Define list of colours to run here, reference with \cI \cII \cIII etc... 
\cdef{00CCFF}
\cdef{99CC99}


%write away within the document
\cI {test c1} and then \cII{test c2}

Esto produce lo siguiente:

ingrese la descripción de la imagen aquí

Respuesta2

Puede crear una lista referenciada por números:

\documentclass{article}
\usepackage{xparse}
\usepackage{xcolor}

\ExplSyntaxOn
\NewDocumentCommand{\colorlist}{m}
 {
  \clist_map_inline:nn {#1}
   {
    \seq_gput_right:Nn \g_colorlist_list_seq { ##1 }
   }
 }

\NewDocumentCommand{\usecolor}{mm}
 {
  \textcolor[HTML]{ \seq_item:Nn \g_colorlist_list_seq { #1 } } { #2 }
 }

\seq_new:N \g_colorlist_list_seq

\ExplSyntaxOff

\colorlist{828282,FF0000,00FF00}

\begin{document}

\usecolor{1}{text in first color}

\usecolor{2}{text in second color}

\usecolor{3}{text in third color}

\end{document}

Tenga en cuenta que xcolorrequiere que los colores HTML se proporcionen como una cadena deseisdígitos hexadecimales, mayúsculas o minúsculas.

ingrese la descripción de la imagen aquí

Respuesta3

Pides un comando \c.
\cya está definido por el kernel LaTeX 2e para entregar una carta con cedilla.
Por lo tanto, en los ejemplos siguientes \ColorNumberse define un comando.


Aquí viene una variación de lo que proporcionó como su propia respuesta:

\documentclass{article}
\usepackage{xcolor}

\makeatletter

% define colours pre document 

\newcommand\MYNAMESPACEDefinedColorTotal{0}%
\newcommand\cdef[1]{%
 \@bsphack
 \begingroup
 \@tempcnta=\MYNAMESPACEDefinedColorTotal\relax
 \advance\@tempcnta by 1\relax
 \xdef\MYNAMESPACEDefinedColorTotal{\number\@tempcnta}%
 \endgroup
 \xglobal\definecolor{%
   MYNAMESPACEDefinedColor\MYNAMESPACEDefinedColorTotal%
 }{HTML}{#1}%
 \@esphack
}

\newcommand\ColorNumber[1]{\textcolor{MYNAMESPACEDefinedColor#1}}%

\makeatother

%start the main body
\begin{document}

\cdef{00CCFF}
\cdef{99CC99}

%write away within the document
\ColorNumber{1}{test c1} and then \ColorNumber{2}{test c2}


\end{document}

ingrese la descripción de la imagen aquí


Aquí viene otra variación de lo que proporcionó como su propia respuesta, el \ColorNumberprimer argumento de aquí está delimitado por una llave mediante #1#la notación -en el texto del parámetro; esto se acerca más a la notación que solicitó en su pregunta:

\documentclass{article}
\usepackage{xcolor}

\makeatletter

% define colours pre document 

\newcommand\MYNAMESPACEDefinedColorTotal{0}%
\newcommand\cdef[1]{%
 \@bsphack
 \begingroup
 \@tempcnta=\MYNAMESPACEDefinedColorTotal\relax
 \advance\@tempcnta by 1\relax
 \xdef\MYNAMESPACEDefinedColorTotal{\number\@tempcnta}%
 \endgroup
 \xglobal\definecolor{%
   MYNAMESPACEDefinedColor\MYNAMESPACEDefinedColorTotal%
 }{HTML}{#1}%
 \@esphack
}

\newcommand\ColorNumber{}%
\def\ColorNumber#1#{\textcolor{MYNAMESPACEDefinedColor#1}}%

\makeatother

%start the main body
\begin{document}

\cdef{00CCFF}
\cdef{99CC99}

%write away within the document
\ColorNumber1{test c1} and then \ColorNumber2{test c2}


\end{document}

ingrese la descripción de la imagen aquí


Aquí viene otra variación en la que se eliminan los espacios que siguen al número:

\documentclass{article}
\usepackage{xcolor}

\makeatletter
%%=============================================================================
%% Paraphernalia:
%%    \UD@firstoftwo, \UD@secondoftwo,\UD@CheckWhetherNull,
%%=============================================================================
\newcommand\UD@firstoftwo[2]{#1}%
\newcommand\UD@secondoftwo[2]{#2}%
%%-----------------------------------------------------------------------------
%% Check whether argument is empty:
%%.............................................................................
%% \UD@CheckWhetherNull{<Argument which is to be checked>}%
%%                     {<Tokens to be delivered in case that argument
%%                       which is to be checked is empty>}%
%%                     {<Tokens to be delivered in case that argument
%%                       which is to be checked is not empty>}%
%%
%% The gist of this macro comes from Robert R. Schneck's \ifempty-macro:
%% <https://groups.google.com/forum/#!original/comp.text.tex/kuOEIQIrElc/lUg37FmhA74J>
\newcommand\UD@CheckWhetherNull[1]{%
  \romannumeral0\expandafter\UD@secondoftwo\string{\expandafter
  \UD@secondoftwo\expandafter{\expandafter{\string#1}\expandafter
  \UD@secondoftwo\string}\expandafter\UD@firstoftwo\expandafter{\expandafter
  \UD@secondoftwo\string}\expandafter\expandafter\UD@firstoftwo{ }{}%
  \UD@secondoftwo}{\expandafter\expandafter\UD@firstoftwo{ }{}\UD@firstoftwo}%
}%
%%-----------------------------------------------------------------------------
%% \UD@RemoveTrailingSpaces{<argument>} removes trailing spaces from <argument>.
%% !!!! <argument> must not contain the token \UD@seldom !!!!
%%.............................................................................
\begingroup
\newcommand\UD@RemoveTrailingSpaces[1]{%
  \endgroup
  \newcommand\UD@RemoveTrailingSpaces[1]{%
    \romannumeral0%
    \UD@trimtrailspaceloop.##1\UD@seldom#1\UD@seldom\UD@seldom#1{.##1}%
  }%
  \newcommand\UD@trimtrailspaceloop{}%
  \long\def\UD@trimtrailspaceloop##1#1\UD@seldom##2\UD@seldom#1##3{%
    \UD@CheckWhetherNull{##2}{%
      \UD@firstoftwo{ }##3%
    }{%
      \UD@trimtrailspaceloop##1\UD@seldom#1\UD@seldom\UD@seldom#1{##1}%
    }%
  }%
}%
\UD@RemoveTrailingSpaces{ }%

% define colours pre document 

\newcommand\MYNAMESPACEDefinedColorTotal{0}%
\newcommand\cdef[1]{%
 \@bsphack
 \begingroup
 \@tempcnta=\MYNAMESPACEDefinedColorTotal\relax
 \advance\@tempcnta by 1\relax
 \xdef\MYNAMESPACEDefinedColorTotal{\number\@tempcnta}%
 \endgroup
 \xglobal\definecolor{%
   MYNAMESPACEDefinedColor\MYNAMESPACEDefinedColorTotal%
 }{HTML}{#1}%
 \@esphack
}

\newcommand\ColorNumber{}%
\def\ColorNumber#1#{%
  \expandafter\expandafter\expandafter\@ColorNumber
  \expandafter\expandafter\expandafter{\UD@RemoveTrailingSpaces{#1}}%
}%
\newcommand*\@ColorNumber[1]{%
  \textcolor{MYNAMESPACEDefinedColor#1}%
}%

\makeatother

%start the main body
\begin{document}

\cdef{00CCFF}
\cdef{99CC99}

%write away within the document
\ColorNumber1{test c1} and then \ColorNumber2{test c2}

\ColorNumber 1 {test c1} and then \ColorNumber 2 {test c2}

\end{document}

ingrese la descripción de la imagen aquí


Si la lista de colores es pequeña, podrías usar algo como \UD@PassKthArgextraer el elemento K-ésimo de esa lista y pasarlo a \textcolor; de esta manera puedes llamar \textcolorincluso sin la necesidad de definir el color a través de \definecolor:

\documentclass{article}
\usepackage{xcolor}%

\makeatletter
%% Code for \UD@PassKthArg
%%=============================================================================
%% Paraphernalia:
%%    \UD@firstoftwo, \UD@secondoftwo, UD@Exchange, \UD@PassFirstToSecond, 
%%    \UD@CheckWhetherNull, UD@CheckWhetherBlank
%%=============================================================================
\newcommand\UD@firstoftwo[2]{#1}%
\newcommand\UD@secondoftwo[2]{#2}%
\newcommand\UD@Exchange[2]{#2#1}%
\newcommand\UD@PassFirstToSecond[2]{#2{#1}}%
%%-----------------------------------------------------------------------------
%% Check whether argument is empty:
%%.............................................................................
%% \UD@CheckWhetherNull{<Argument which is to be checked>}%
%%                     {<Tokens to be delivered in case that argument
%%                       which is to be checked is empty>}%
%%                     {<Tokens to be delivered in case that argument
%%                       which is to be checked is not empty>}%
%%
%% The gist of this macro comes from Robert R. Schneck's \ifempty-macro:
%% <https://groups.google.com/forum/#!original/comp.text.tex/kuOEIQIrElc/lUg37FmhA74J>
\newcommand\UD@CheckWhetherNull[1]{%
  \romannumeral0\expandafter\UD@secondoftwo\string{\expandafter
  \UD@secondoftwo\expandafter{\expandafter{\string#1}\expandafter
  \UD@secondoftwo\string}\expandafter\UD@firstoftwo\expandafter{\expandafter
  \UD@secondoftwo\string}\expandafter\expandafter\UD@firstoftwo{ }{}%
  \UD@secondoftwo}{\expandafter\expandafter\UD@firstoftwo{ }{}\UD@firstoftwo}%
}%
%%------------------------------------------------------------------------------
%% Check whether argument is blank (empty or only spaces):
%%..............................................................................
%% -- Take advantage of the fact that TeX discards space tokens when
%%    "fetching" _un_delimited arguments: --
%% \UD@CheckWhetherBlank{<Argument which is to be checked>}%
%%                      {<Tokens to be delivered in case that
%%                        argument which is to be checked is blank>}%
%%                      {<Tokens to be delivered in case that argument
%%                        which is to be checked is not blank}%
\newcommand\UD@CheckWhetherBlank[1]{%
  \romannumeral\expandafter\expandafter\expandafter\UD@secondoftwo
  \expandafter\UD@CheckWhetherNull\expandafter{\UD@firstoftwo#1{}.}%
}%
%%=============================================================================
%% Put K-th inner undelimited argument behind sequence of tokens:
%%
%% \UD@PassKthArg{<tokens>}{<ErrorTokens>}{<integer K>}{<list of undelimited args>} 
%% 
%% In case there is no K-th argument in <list of indelimited args> : 
%%   Does deliver <ErrorTokens>.
%% In case there is a K-th argument in <list of indelimited args> : 
%%   Does place that K-th argument with one level of braces removed behind <tokens>.
%%
%% Examples:
%%
%%   \UD@PassKthArg{ELEMENT-}{ERROR}{0}{ABCDE} yields: ERROR
%%
%%   \UD@PassKthArg{ELEMENT-}{ERROR}{3}{ABCDE} yields:  ELEMENT-C
%%
%%   \UD@PassKthArg{ELEMENT-}{ERROR}{3}{AB{CD}E} yields:  ELEMENT-CD
%%
%%   \UD@PassKthArg{ELEMENT-}{ERROR}{4}{{001}{002}{003}{004}{005}} yields: ELEMENT-004
%%
%%   \UD@PassKthArg{ELEMENT-}{ERROR}{6}{{001}{002}{003}} yields: ERROR
%% 
%%=============================================================================
\newcommand\UD@PassKthArg[3]{%
  \romannumeral0%
  % #1: <Tokens>
  % #2: <ErrorTokens>
  % #3: <integer number K>
  \expandafter\UD@PassKthArgCheck
  \expandafter{\romannumeral\number\number#3 000}{#1}{#2}%
}%
\newcommand\UD@PassKthArgCheck[4]{%
  % #1 - <K letters m>
  % #2 - <Tokens>
  % #3 - <ErrorTokens>
  % #4 - <list>
  \UD@CheckWhetherNull{#1}{ #3}{%
    \expandafter\UD@PassKthArgLoop\expandafter{\UD@firstoftwo{}#1}{#4}{#2}{#3}%
  }%
}%
\newcommand\UD@PassKthArgLoop[4]{%
  % #1 - <letters m in an amount that corresponds to the number
  %       of arguments trailing the to-be-kept argument>
  % #2 - <list>
  % #3 - <Tokens>
  % #4 - <ErrorTokens>
  \UD@CheckWhetherBlank{#2}{ #4}{%
    \UD@CheckWhetherNull{#1}{%
      \UD@ExtractFirstArgLoop{#2\UD@SelDOm}{#3}%
    }{%
      \expandafter\UD@PassFirstToSecond\expandafter{\UD@firstoftwo{}#2}%
      {\expandafter\UD@PassKthArgLoop\expandafter{\UD@firstoftwo{}#1}}%
      {#3}{#4}%
    }%
  }%
}%
\newcommand\UD@RemoveTillUD@SelDOm{}%
\long\def\UD@RemoveTillUD@SelDOm#1#2\UD@SelDOm{{#1}}%
\newcommand\UD@ExtractFirstArgLoop[2]{%
  \expandafter\UD@CheckWhetherNull\expandafter{\UD@firstoftwo{}#1}%
  {\UD@Exchange#1{ #2}}%
  {\expandafter\UD@ExtractFirstArgLoop\expandafter{\UD@RemoveTillUD@SelDOm#1}{#2}}%
}%
%% End of code for \UD@PassKthArg

\newcommand\ColorNumber[1]{%
  \expandafter\UD@PassFirstToSecond\expandafter{\Mycolorlist}{\UD@PassKthArg{\textcolor}{%
    \GenericError{%
      \@spaces\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces\space\space\space
    }{%
       Error with command \string\ColorNumber: \string\Mycolorlist\space does not have a%
       \MessageBreak color-specification-element #1%
    }{Color will not be changed.}{Specify the number of an element which is in the list.}%
  }{#1}}%
}%
\makeatother

\definecolor{myweirdcolor}{HTML}{800080}% PURPLE

% List of color-specifications.
% Each specification must be nested in braces.
% You are not bound to the HTML-Hex-Code-model.

\newcommand\Mycolorlist{%
  {[HTML]{00CCFF}}% CYAN
  {[HTML]{C0C0C0}}% SILVER
  {[HTML]{808080}}% GRAY
  {[HTML]{000000}}% BLACK
  {[rgb]{1,0,0}}  % RED
  {[HTML]{800000}}% MAROON
  {[HTML]{FFFF00}}% YELLOW
  {[HTML]{808000}}% OLIVE
  {[HTML]{00FF00}}% LIME
  {[HTML]{008000}}% GREEN
  {[HTML]{00FFFF}}% AQUA
  {[HTML]{008080}}% TEAL
  {[HTML]{0000FF}}% BLUE
  {[HTML]{000080}}% NAVY
  {[HTML]{FF00FF}}% FUCHSIA
  {{myweirdcolor}}% PURPLE
}

\begin{document}
\noindent
\ColorNumber{1}{test C1 - CYAN}\\
\ColorNumber{2}{test C2 - SILVER}\\
\ColorNumber{3}{test C3 - GRAY}\\
\ColorNumber{4}{test C4 - BLACK}\\
\ColorNumber{5}{test C5 - RED}\\
\ColorNumber{6}{test C6 - MAROON}\\
\ColorNumber{7}{test C7 - YELLOW}\\
\ColorNumber{8}{test C8 - OLIVE}\\
\ColorNumber{9}{test C9 - LIME}\\
\ColorNumber{10}{test C10 - GREEN}\\
\ColorNumber{11}{test C11 - AQUA}\\
\ColorNumber{12}{test C12 - TEAL}\\
\ColorNumber{13}{test C13 - BLUE}\\
\ColorNumber{14}{test C14 - NAVY}\\
\ColorNumber{15}{test C15 - FUCHSIA}\\
\ColorNumber{16}{test C16 - PURPLE}\\
%\ColorNumber{17}{test C17 - ERROR}\\
%\ColorNumber{0}{test C0 - ERROR}
\end{document}

ingrese la descripción de la imagen aquí


Combinando el enfoque anterior, donde se eliminan los espacios detrás del número, con el enfoque donde \UD@PassKthArgse utiliza para extraer el elemento K-ésimo, se obtiene:

\documentclass{article}
\usepackage{xcolor}%

\makeatletter
%% Code for \UD@PassKthArg
%%=============================================================================
%% Paraphernalia:
%%    \UD@firstoftwo, \UD@secondoftwo, UD@Exchange, \UD@PassFirstToSecond, 
%%    \UD@CheckWhetherNull, UD@CheckWhetherBlank
%%=============================================================================
\newcommand\UD@firstoftwo[2]{#1}%
\newcommand\UD@secondoftwo[2]{#2}%
\newcommand\UD@Exchange[2]{#2#1}%
\newcommand\UD@PassFirstToSecond[2]{#2{#1}}%
%%-----------------------------------------------------------------------------
%% Check whether argument is empty:
%%.............................................................................
%% \UD@CheckWhetherNull{<Argument which is to be checked>}%
%%                     {<Tokens to be delivered in case that argument
%%                       which is to be checked is empty>}%
%%                     {<Tokens to be delivered in case that argument
%%                       which is to be checked is not empty>}%
%%
%% The gist of this macro comes from Robert R. Schneck's \ifempty-macro:
%% <https://groups.google.com/forum/#!original/comp.text.tex/kuOEIQIrElc/lUg37FmhA74J>
\newcommand\UD@CheckWhetherNull[1]{%
  \romannumeral0\expandafter\UD@secondoftwo\string{\expandafter
  \UD@secondoftwo\expandafter{\expandafter{\string#1}\expandafter
  \UD@secondoftwo\string}\expandafter\UD@firstoftwo\expandafter{\expandafter
  \UD@secondoftwo\string}\expandafter\expandafter\UD@firstoftwo{ }{}%
  \UD@secondoftwo}{\expandafter\expandafter\UD@firstoftwo{ }{}\UD@firstoftwo}%
}%
%%------------------------------------------------------------------------------
%% Check whether argument is blank (empty or only spaces):
%%..............................................................................
%% -- Take advantage of the fact that TeX discards space tokens when
%%    "fetching" _un_delimited arguments: --
%% \UD@CheckWhetherBlank{<Argument which is to be checked>}%
%%                      {<Tokens to be delivered in case that
%%                        argument which is to be checked is blank>}%
%%                      {<Tokens to be delivered in case that argument
%%                        which is to be checked is not blank}%
\newcommand\UD@CheckWhetherBlank[1]{%
  \romannumeral\expandafter\expandafter\expandafter\UD@secondoftwo
  \expandafter\UD@CheckWhetherNull\expandafter{\UD@firstoftwo#1{}.}%
}%
%%==============================================================================
%% Put K-th inner undelimited argument behind sequence of tokens:
%%
%% \UD@PassKthArg{<tokens>}{<ErrorTokens>}{<integer K>}{<list of undelimited args>} 
%% 
%% In case there is no K-th argument in <list of indelimited args> : 
%%   Does deliver <ErrorTokens>.
%% In case there is a K-th argument in <list of indelimited args> : 
%%   Does place that K-th argument with one level of braces removed behind <tokens>.
%%
%% Examples:
%%
%%   \UD@PassKthArg{ELEMENT-}{ERROR}{0}{ABCDE} yields: ERROR
%%
%%   \UD@PassKthArg{ELEMENT-}{ERROR}{3}{ABCDE} yields:  ELEMENT-C
%%
%%   \UD@PassKthArg{ELEMENT-}{ERROR}{3}{AB{CD}E} yields:  ELEMENT-CD
%%
%%   \UD@PassKthArg{ELEMENT-}{ERROR}{4}{{001}{002}{003}{004}{005}} yields: ELEMENT-004
%%
%%   \UD@PassKthArg{ELEMENT-}{ERROR}{6}{{001}{002}{003}} yields: ERROR
%% 
%%=============================================================================
\newcommand\UD@PassKthArg[3]{%
  \romannumeral0%
  % #1: <Tokens>
  % #2: <ErrorTokens>
  % #3: <integer number K>
  \expandafter\UD@PassKthArgCheck
  \expandafter{\romannumeral\number\number#3 000}{#1}{#2}%
}%
\newcommand\UD@PassKthArgCheck[4]{%
  % #1 - <K letters m>
  % #2 - <Tokens>
  % #3 - <ErrorTokens>
  % #4 - <list>
  \UD@CheckWhetherNull{#1}{ #3}{%
    \expandafter\UD@PassKthArgLoop\expandafter{\UD@firstoftwo{}#1}{#4}{#2}{#3}%
  }%
}%
\newcommand\UD@PassKthArgLoop[4]{%
  % #1 - <letters m in an amount that corresponds to the number
  %       of arguments trailing the to-be-kept argument>
  % #2 - <list>
  % #3 - <Tokens>
  % #4 - <ErrorTokens>
  \UD@CheckWhetherBlank{#2}{ #4}{%
    \UD@CheckWhetherNull{#1}{%
      \UD@ExtractFirstArgLoop{#2\UD@SelDOm}{#3}%
    }{%
      \expandafter\UD@PassFirstToSecond\expandafter{\UD@firstoftwo{}#2}%
      {\expandafter\UD@PassKthArgLoop\expandafter{\UD@firstoftwo{}#1}}%
      {#3}{#4}%
    }%
  }%
}%
\newcommand\UD@RemoveTillUD@SelDOm{}%
\long\def\UD@RemoveTillUD@SelDOm#1#2\UD@SelDOm{{#1}}%
\newcommand\UD@ExtractFirstArgLoop[2]{%
  \expandafter\UD@CheckWhetherNull\expandafter{\UD@firstoftwo{}#1}%
  {\UD@Exchange#1{ #2}}%
  {\expandafter\UD@ExtractFirstArgLoop\expandafter{\UD@RemoveTillUD@SelDOm#1}{#2}}%
}%
%% End of code for \UD@PassKthArg
%%==============================================================================
%% \UD@RemoveTrailingSpaces{<argument>} removes trailing spaces from <argument>.
%% !!!! <argument> must not contain the token \UD@seldom !!!!
%%==============================================================================
\begingroup
\newcommand\UD@RemoveTrailingSpaces[1]{%
  \endgroup
  \newcommand\UD@RemoveTrailingSpaces[1]{%
    \romannumeral0%
    \UD@trimtrailspaceloop.##1\UD@seldom#1\UD@seldom\UD@seldom#1{.##1}%
  }%
  \newcommand\UD@trimtrailspaceloop{}%
  \long\def\UD@trimtrailspaceloop##1#1\UD@seldom##2\UD@seldom#1##3{%
    \UD@CheckWhetherNull{##2}{%
      \UD@firstoftwo{ }##3%
    }{%
      \UD@trimtrailspaceloop##1\UD@seldom#1\UD@seldom\UD@seldom#1{##1}%
    }%
  }%
}%
\UD@RemoveTrailingSpaces{ }%
%% End of code for \UD@RemoveTrailingSpaces

\newcommand\ColorNumber{}%
\def\ColorNumber#1#{%
  \expandafter\expandafter\expandafter\@ColorNumber
  \expandafter\expandafter\expandafter{\UD@RemoveTrailingSpaces{#1}}%
}%
\newcommand\@ColorNumber[1]{%
  \expandafter\UD@PassFirstToSecond\expandafter{\Mycolorlist}{\UD@PassKthArg{\textcolor}{%
    \GenericError{%
      \@spaces\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces\@spaces\space\space\space
    }{%
       Error with command \string\ColorNumber: \string\Mycolorlist\space does not have a%
       \MessageBreak color-specification-element #1%
    }{Color will not be changed.}{Specify the number of an element which is in the list.}%
  }{#1}}%
}%
\makeatother

\definecolor{myweirdcolor}{HTML}{800080}% PURPLE

% List of color-specifications.
% Each specification must be nested in braces.
% You are not bound to the HTML-Hex-Code-model.

\newcommand\Mycolorlist{%
  {[HTML]{00CCFF}}% CYAN
  {[HTML]{C0C0C0}}% SILVER
  {[HTML]{808080}}% GRAY
  {[HTML]{000000}}% BLACK
  {[rgb]{1,0,0}}  % RED
  {[HTML]{800000}}% MAROON
  {[HTML]{FFFF00}}% YELLOW
  {[HTML]{808000}}% OLIVE
  {[HTML]{00FF00}}% LIME
  {[HTML]{008000}}% GREEN
  {[HTML]{00FFFF}}% AQUA
  {[HTML]{008080}}% TEAL
  {[HTML]{0000FF}}% BLUE
  {[HTML]{000080}}% NAVY
  {[HTML]{FF00FF}}% FUCHSIA
  {{myweirdcolor}}% PURPLE
}

\begin{document}
\noindent
\ColorNumber1{test C1 - CYAN}\\
\ColorNumber2{test C2 - SILVER}\\
\ColorNumber3{test C3 - GRAY}\\
\ColorNumber4{test C4 - BLACK}\\
\ColorNumber5{test C5 - RED}\\
\ColorNumber6{test C6 - MAROON}\\
\ColorNumber7{test C7 - YELLOW}\\
\ColorNumber8{test C8 - OLIVE}\\
\ColorNumber9{test C9 - LIME}\\
\ColorNumber10{test C10 - GREEN}\\
\ColorNumber11{test C11 - AQUA}\\
\ColorNumber12{test C12 - TEAL}\\
\ColorNumber13{test C13 - BLUE}\\
\ColorNumber14{test C14 - NAVY}\\
\ColorNumber15{test C15 - FUCHSIA}\\
\ColorNumber16{test C16 - PURPLE}\\
%\ColorNumber17{test C17 - ERROR}\\
%\ColorNumber0{test C0 - ERROR}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta4

Usaría el paquete xColors para eso:

\usepackage{xcolor}

%Color palette that looks great
\definecolor{xRed}{HTML}{B51E0E}    %[0.71 0.12 0.06]
\definecolor{xGreen}{HTML}{6DB565}  %[0.23 0.51 0.20]
\definecolor{xBlue}{HTML}{074E82}   %[0.03 0.31 0.51]
\definecolor{xBrown}{HTML}{9C5C19}  %[0.61 0.36 0.10]
\definecolor{xYellow}{HTML}{F7B538} %[0.97 0.71 0.22]
\definecolor{xOrange}{HTML}{EC6D00} %[0.93 0.43 0.00]
\definecolor{xCyan}{HTML}{0094AC}   %[0.00 0.58 0.68]
\definecolor{xPurple}{HTML}{8711A1} %[0.53 0.07 0.64]
\definecolor{xPink}{HTML}{D30580}   %[0.83 0.02 0.51]

Y luego usa así:

\textcolor{xCyan}{cyan}

Ah, y por cierto, al colorear el texto normalmente se ve mejor en negrita:

\textcolor{xCyan}{\textbf{cyan}}

información relacionada