我想创建一个环境,搜索其中的所有数学知识,以便进行一些更改。因此,我想要一种可以应用于\regex_extract_all
搜索环境中处于数学模式的所有内容的方法。
我倾向于使用 latex3,但我也在考虑使用 luatex,如果那样会容易得多的话。在这种情况下,自动为所有出现的某些字符串着色(不同的词组使用不同的颜色) 与我想要的类似,但是我只想在数学模式下应用它,而不是整个文档。
我研究过将命令应用于数学模式,看起来我可能可以使用\regex_extract_all
和的组合,\everymath
但我担心它如何与其他数学环境(如align
equation
或甚至只是显示模式)一起工作。这些问题:
\everymath、AMS 方程、beamer 和 tikz 无法协同工作
似乎表明对所有数学模式文本进行操作并非易事,而且它们似乎都使用了可能不普遍适用的变通方法?我不确定。在这种情况下使用 \everymath、\everydisplay 是否有效?
举个简单的例子,如果我想让每个出现的 i 都变成红色,我会想要这段代码
\DeclarePairedDelimiter\norm{\lVert}{\rVert}
\begin{document}
$i+2=3$
\begin{myEnv}
This is a test about i
$\sin(\theta)+\sum_{i=0}^\infty ix^i$
\begin{equation*}
\norm{i} = \begin{cases}
i & \text{if } i \geq 0 \\
-i & \text{if } i < 0
\end{cases}
\end{equation*}
$$(x_i) = 1/i$$
\end{myEnv}
\end{document}
生成一个文档,其中顶部的“i+2=3”和“This is a test about i”中的“i”保持不变,“if”单词中的“i”保持不变,命令和\sin
仍然\infty
有效,但用作变量的其他“i”变为红色。
答案1
我不会尝试全面地解决这个问题。
这是使 i 变量变为红色的解决方案。
\documentclass{article}
\usepackage{amsmath,mathtools,xcolor}
\DeclarePairedDelimiter\norm{\lVert}{\rVert}
\newenvironment{myEnv}
{\edef\redi{{\noexpand\textcolor{red}{\mathchar\the\mathcode`i}}}%
\begingroup\lccode`~=`i \lowercase{\endgroup\let~}\redi
\renewcommand{\sin}{\mathop{\textnormal{\textup{sin}}}}%
\mathcode`i="8000 }
{}
\begin{document}
$i+2=3$
\begin{myEnv}
This is a test about $i$
$\sin(\theta)+\sum_{i=0}^\infty ix^i$
\begin{equation*}
\norm{i} =
\begin{cases}
i & \text{if } i \geq 0 \\
-i & \text{if } i < 0
\end{cases}
\end{equation*}
Some text containing some letters,
\[
(x_{i}) = 1/i
\]
\end{myEnv}
$i+2=3$
\end{document}