我想知道是否有可能在 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 Topic
Victor 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}