我正在寻找一种更简单的方法来为数学模式添加颜色。具体来说,我希望方程式的不同部分具有不同的颜色,以便更好地与图中的颜色相关联。我发现唯一有效的方法是使用 \begingroup 和 \group。虽然下面的代码有效,但我想知道是否有人有更简单的方法来实现它。我找不到其他任何东西......
\usepackage[usenames, dvipsnames]{color}
\definecolor{myred1}{RGB}{255, 0, 0}
\definecolor{myyellow1}{RGB}{255, 255, 219}
\definecolor{mygreen1}{RGB}{0, 255, 0}
\definecolor{mygreen2}{RGB}{0, 126, 0}
\definecolor{myblue1}{RGB}{0, 0, 255}
\begin{equation}
\frac{
\begingroup
\textcolor{myblue1}
{a}
\endgroup
}
{
\begingroup
\textcolor{myred1}
{b}
\endgroup
}
=
\frac{
\begingroup
\textcolor{mygreen2}
{a + b}
\endgroup
}
{
\begingroup
\textcolor{myblue1}
{a}
\endgroup
}
\end{equation}
答案1
你不需要\begingroup
并且\endgroup
:
\documentclass{article}
\usepackage[usenames, dvipsnames]{color}
\definecolor{myred1}{RGB}{255, 0, 0}
\definecolor{myyellow1}{RGB}{255, 255, 219}
\definecolor{mygreen1}{RGB}{0, 255, 0}
\definecolor{mygreen2}{RGB}{0, 126, 0}
\definecolor{myblue1}{RGB}{0, 0, 255}
\begin{document}
\begin{equation}
\frac{\textcolor{myblue1}{a}}{\textcolor{myred1}{b}}
=
\frac{\textcolor{mygreen2}{a + b}}{\textcolor{myblue1}{a}}
\end{equation}
\end{document}
可能更好的界面是xparse
:
\documentclass{article}
\usepackage{xparse}
\usepackage[usenames, dvipsnames]{color}
\ExplSyntaxOn
\NewDocumentCommand{\colorfrac}{O{}mm}
{
\group_begin:
\keys_set:nn { khanna/colorfrac} { #1 }
\frac
{
\textcolor{\l_khanna_colorfrac_num_tl}{#2}
}
{
\textcolor{\l_khanna_colorfrac_den_tl}{#3}
}
\group_end:
}
\keys_define:nn { khanna/colorfrac }
{
num .tl_set:N = \l_khanna_colorfrac_num_tl,
den .tl_set:N = \l_khanna_colorfrac_den_tl,
num .initial:n = black,
den .initial:n = black,
}
\ExplSyntaxOff
\definecolor{myred1}{RGB}{255, 0, 0}
\definecolor{myyellow1}{RGB}{255, 255, 219}
\definecolor{mygreen1}{RGB}{0, 255, 0}
\definecolor{mygreen2}{RGB}{0, 126, 0}
\definecolor{myblue1}{RGB}{0, 0, 255}
\begin{document}
\begin{equation}
\colorfrac[num=myblue1,den=myred1]{a}{b}
=
\colorfrac[num=mygreen2,den=myblue1]{a + b}{a}
\end{equation}
\end{document}
答案2
尽管名称如此,\textcolor
也可以在数学模式下使用,而无需切换到文本模式。但实现时并没有考虑数学,因为它使用花括号作为颜色范围的组:
\def\textcolor#1#{\@textcolor{#1}}
\def\@textcolor#1#2#3{\protect\leavevmode{\color#1{#2}#3}}
花括号在数学中有副作用,即该群现在是一个具有普通数学原子间距的子公式,比较一下:
\documentclass{article}
\usepackage{color}
\begin{document}
\[
a + b = c
\]
\[
\textcolor{green}{a}\textcolor{red}{+}\textcolor{blue}{b}
\textcolor{magenta}{=}\textcolor{cyan}{c}
\]
\end{document}
解决方案是使用\begingroup
和\endgroup
进行分组:
\documentclass{article}
\usepackage{color}
\makeatletter
\def\mathcolor#1#{\@mathcolor{#1}}
\def\@mathcolor#1#2#3{%
\protect\leavevmode
\begingroup\color#1{#2}#3\endgroup
}
\makeatother
\begin{document}
\[
a + b = c
\]
\[
\mathcolor{green}{a}\mathcolor{red}{+}\mathcolor{blue}{b}
\mathcolor{magenta}{=}\mathcolor{cyan}{c}
\]
\end{document}