数学模式的 LaTeX 颜色设置

数学模式的 LaTeX 颜色设置

我想知道是否有可能在 LaTeX 中做这样的事情:

对于数学模式中的所有数字(0、1、...、9),将其涂成红色。对于数学模式中的字母(a、b、...、z、A、B、...、Z),将其涂成绿色。对于数学模式中的其他所有内容,将其涂成蓝色。

我想让我的文档更加丰富多彩,但是手动上色太耗时了!

答案1

不提供任何形式的担保!

\documentclass{article}
\usepackage{color}


\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}}
\@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}}
\@for\@tempa:=0,1,2,3,4,5,6,7,8,9\do{%
    \expandafter\colorizemath\@tempa{red}}
\makeatother

\everymath{\color{blue}}
\everydisplay{\color{blue}}

\begin{document}\thispagestyle{empty}

Hello $world$. Do you know that $E=mc^2$? 

\[ \widehat f(\omega) = \int_{-\infty}^\infty f(x) e^{-2\pi i \omega x}\,dx\]

\[ (I - M)^{-1} = \sum_{k=0}^\infty M^k\]
\end{document}

彩色数学

让我补充一下,关于\everymath并且\everydisplay最好这样做:

\everymath\expandafter{\the\everymath \color{blue}}
\everydisplay\expandafter{\the\everydisplay \color{blue}}

这会保留而不是删除这些标记列表中先前存储的数据。(我刚刚检查了一下,Lamport 的书没有提到token list,甚至token在整本书中都找不到这个词(似乎)……)。不可否认,将东西放入其中的包应该这样做,At Begin Document因此,即使我最初的代码中使用的粗暴方式,只要它在序言中,可能也不会那么具有破坏性。对标记列表感兴趣的人可以了解它,例如TeX by TopicVictor Eijkhout(texdoc topic)。

答案2

unicode-math可以通过指定不同的字体来自定义颜色范围,其中范围可以是字体命令,例如\mathit\mathbf,也可以是 Unicode 范围。颜色设置不会影响分数线和平方根中的水平线,如中所述xetex 中 unicode-math 的颜色,但添加\everymath{\color{blue}} \everydisplay{\color{blue}}如下内容user700902 的回答解决了这个问题。不知道为什么帽子是红色的。

unicode-math要求用xelatex或进行编译lualatex

\documentclass{article}
\usepackage{unicode-math,color}
\setmathfont[Color=0000FF]{xits-math.otf}
\setmathfont[range={\mathit,\mathup,\mathbfup},Color=00FF00]{xits-math.otf} % mathup is used for operators I think, \mathbf actually gives \mathbfup it seems 
\setmathfont[range=\mathit/{greek,Greek},Color=0000FF]{xits-math.otf} % sets greek letters to blue
\setmathfont[range="0030-"0039,Color=FF0000]{xits-math.otf} % unicode hex range of 0-9
\everymath{\color{blue}}
\everydisplay{\color{blue}}
\begin{document}
Hello $world$. Do you know that $E=mc^2$? 
\[
\widehat f(\omega) = \int_{-\infty}^\infty f(x) e^{-2\pi i \omega x}\,dx
\]
And \( \tan x = \sin x /\cos x \).
\[ (I - M)^{-1} = \sum_{k=0}^\infty M^k\]

Even fractions and square roots \(\frac{\sqrt{x+1}}{x+1}\)
\[
\frac{\sqrt{x+1}}{x+1}
\]

\end{document}

在此处输入图片描述

相关内容