在任何数学环境中对所有字符串进行操作

在任何数学环境中对所有字符串进行操作

我想创建一个环境,搜索其中的所有数学知识,以便进行一些更改。因此,我想要一种可以应用于\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}

在此处输入图片描述

相关内容