在数学模式中为方程式添加颜色的更简单的方法?

在数学模式中为方程式添加颜色的更简单的方法?

我正在寻找一种更简单的方法来为数学模式添加颜色。具体来说,我希望方程式的不同部分具有不同的颜色,以便更好地与图中的颜色相关联。我发现唯一有效的方法是使用 \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}

不使用和使用 \textcolor 的方程的比较

解决方案是使用\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}

使用 \mathcolor 的结果

相关内容