我正在尝试定义一个命令,将整个文档中每个字母的颜色更改为指定的颜色。我已经尝试了不同的方法此主题,但我无法上色每一个任何带有上述内容的字母。
我最好的方法是这样的:
\documentclass{article}
\usepackage{xparse,l3regex}
\usepackage{xcolor}
\definecolor{color1}{HTML}{FF0000} %for A and a
\definecolor{color2}{HTML}{00FF00} %for B and b
\ExplSyntaxOn
\NewDocumentCommand{\colorsyn}{ m }
{
\colorsyn:nn { #1 }
}
%defining a new tocken list
\tl_new:N \l_syn_tl
\cs_new_protected:Npn \colorsyn:nn #1
{
%setting l_syn_tl to the string-argument
\tl_set:Nn \l_syn_tl { #1 }
%Coloring A and a by replacing them in the string and overriding l_syn_tl with the new string
\regex_replace_all:nnN { ([A+a]) } { \c{textcolor}\cB\{color1\cE\}\cB\{\1\cE\} } \l_syn_tl
%Coloring B and b and overriding l_syn_tl again
\regex_replace_all:nnN { ([B+b]) } { \c{textcolor}\cB\{color2\cE\}\cB\{\1\cE\} } \l_syn_tl
%Using \l_syn_tl as output
\tl_use:N \l_syn_tl
}
\ExplSyntaxOff
\begin{document}
\colorsyn{A Baby}
\end{document}
除非我尝试通过简单添加来更改两个以上字母对的颜色,否则它就会起作用:
\regex_replace_all:nnN { ([C+c]) } { \c{textcolor}\cB\{color3\cE\}\cB\{\1\cE\} } \l_syn_tl
到代码。
我希望你们中的任何人都可以帮助我解决这个问题或者给我一个新的方法来解决这个问题。
顺便说一下,它应该是这样的:
答案1
a 和 A 的正则表达式不是,[Aa]
但当[A+a]
您添加包含字母的命令时,例如后来的正则表达式会改变已添加的命令。更简单的方法是使用一个正则表达式匹配所有字母,然后添加一个根据其参数添加颜色的命令:
\documentclass{article}
\usepackage{xparse,l3regex}
\usepackage{xcolor}
\definecolor{colorA}{HTML}{FF0000}
\definecolor{colorB}{HTML}{00FF00}
\definecolor{colora}{HTML}{00F350}
\definecolor{colorb}{HTML}{9000DD}
\definecolor{colory}{HTML}{0011AA}
% more one for each letter
\def\zz#1{\textcolor{color#1}{#1}}
\ExplSyntaxOn
\NewDocumentCommand{\colorsyn}{ m }
{
\colorsyn:nn { #1 }
}
%defining a new tocken list
\tl_new:N \l_syn_tl
\cs_new_protected:Npn \colorsyn:nn #1
{
%setting l_syn_tl to the string-argument
\tl_set:Nn \l_syn_tl { #1 }
%Coloring A and a by replacing them in the string and overriding l_syn_tl with the new string
\regex_replace_all:nnN { ([a-zA-Z]) } { \c{zz}\cB\{\1\cE\} } \l_syn_tl
%Using \l_syn_tl as output
\tl_use:N \l_syn_tl
}
\ExplSyntaxOff
\begin{document}
\colorsyn{A Baby}
\end{document}