在数学模式中重新着色字母

在数学模式中重新着色字母

在 user700902 的回答中此主题,建议使用以下代码将字母 AZ 染成绿色:

\makeatletter
\def\colorizemath #1#2{%
    \expandafter\mathchardef\csname orig:math:#1\endcsname\mathcode`#1
    \mathcode`#1="8000
    \toks@\expandafter{\csname orig:math:#1\endcsname}%
    \begingroup
       \lccode`~=`#1
       \lowercase{%
    \endgroup
       \edef~{{\noexpand\color{#2}\the\toks@}}}%
   }
\@for\@tempa:=A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z\do{%
    \expandafter\colorizemath\@tempa{green}}
\makeatother

如果文档中某个字母应该是红色的,有没有办法覆盖绿色命令?常规方法$\textcolor{red}{Q}$不起作用。

我的意思是,假设我有一段文本$PQRST$,我只想让字母$Q$变成红色。在这种情况下我该怎么办?

答案1

我的建议是为数学模式定义命名颜色(这样您只需更改它们而不必更改其中的颜色\colorizemath)并在宏中手动覆盖它们\mathcolor

以前,我曾使用过,\colorlet但它不适用于[<model>]{<color>}语法,所以我只是使用了\definecolor

\begingroup使用“和”\endgroup而不是“不是”的原因{ }来自 Heiko Oberdiek 对彩色符号

代码

\documentclass{article}
\usepackage{xcolor}

% Defining various math colors
\colorlet{math@latin@upper} {green}
\colorlet{math@latin@lower} {green}
\colorlet{math@digit}       {red}
\colorlet{math@everymath}   {blue}
\colorlet{math@everydisplay}{blue}

% Setting math colors for whole content
\everymath{\color{math@everymath}}
\everydisplay{\color{math@everydisplay}}

% Setting colors for letters and digits
% Author: user700902
% Source: https://tex.stackexchange.com/a/100625/16595
\makeatletter
\def\colorizemath #1#2{%
    \expandafter\mathchardef\csname orig:math:#1\endcsname\mathcode`#1
    \mathcode`#1="8000
    \toks@\expandafter{\csname orig:math:#1\endcsname}%
    \begingroup
       \lccode`~=`#1
       \lowercase{%
    \endgroup
       \edef~{{\noexpand\color{#2}\the\toks@}}}%
   }
\@for\@tempa:=a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z\do{%
    \expandafter\colorizemath\@tempa{math@latin@lower}}
\@for\@tempa:=A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z\do{%
    \expandafter\colorizemath\@tempa{math@latin@upper}}
\@for\@tempa:=0,1,2,3,4,5,6,7,8,9\do{%
    \expandafter\colorizemath\@tempa{math@digit}}
\makeatother

% Using color in math-mode,
%   extended to overwrite the color invoked by active letters and digits
% Author: Heiko Oberdiek
% Source: https://tex.stackexchange.com/a/85035/16595
\newcommand*{\mathcolor}[3][named]{%
  \protect\leavevmode
  \begingroup
    \definecolor{math@latin@upper}{#1}{#2}%
    \definecolor{math@latin@lower}{#1}{#2}%
    \definecolor{math@digit}{#1}{#2}%
    \color[#1]{#2}%
    #3%
  \endgroup
}

\begin{document}\thispagestyle{empty}
\[
  P\begingroup\colorlet{math@latin@upper}{red}Q\endgroup RST
  \mathcolor{yellow}{=}
  P\mathcolor{red}{Q}RST
  \mathcolor[gray]{.5}{\sim} PQRST
\]
\end{document}

输出

在此处输入图片描述

相关内容