我重新定义了^
根据它是上标、上上标等给出不同的颜色,方法如下:
\catcode`^\active
\def^#1{%
\mathchoice{%
\sp{\color{red}#1}%
}{%
\sp{\color{blue}#1}%
}{
\sp{\color{green}#1}%
}{
\sp{\color{orange}#1}%
}%
}
这正是我想要的。但是,当我有一个像 这样的大运算符时\sum
,代码
\sum_{n=1}^\infty \frac{1}{n}
产量
而不是\infty
正确地将 放在限制中。如果我不使用\mathchoice
,就不会发生这种情况。有办法解决这个问题吗?
附注:我不确定为什么颜色中省略了蓝色。 和 不应该k
是+1
蓝色,而不是绿色吗?
答案1
以下内容避免使用\mathchoice
,并使用@egreg、@David Carlisle 和@wipet 的意见进行了编辑。
首先请注意,更改 catcode 本身是有风险的。虽然有可能实现您想要的结果,但在某些情况下,其他代码(例如包)需要“标准”catcode。mathtools
加载时会发生其中一种情况:如果^
catcode 为 active,则会发生错误。@egreg 的答案通过在组内本地设置 catcode,然后在文档开头全局切换它来避免这种情况;我在这里借用了这一点。然而,可能还有其他令人讨厌的惊喜。
\documentclass{article}
\usepackage{mathtools}
\usepackage{xcolor}
\newcount\sup
\sup=0
\bgroup
\catcode`\^=13
\gdef^#1{\sp{\advance\sup by1 {\color{\ifcase\sup\or red\or blue\or green\else orange\fi}#1}}}
\egroup
\AtBeginDocument{\catcode`^=\active}
%
\begin{document}
\[ x^{1/4^{k^\alpha}+1} \quad \sum_{n=1}^\infty \frac{1}{n}\]
\end{document}
每次脚本级别上升时,计数器都会增加 1,而下降时计数器又会减少,因为增加发生在组内。这里我必须感谢 @wipet,他提出了这个非常简洁的实现。
答案2
我猜你误解了这些参数的用途\mathchoice
。
您没有得到蓝色的原因可能是您有公式\displaystyle
。
当你说
\mathchoice{a}{b}{c}{d}
TeX 将a
在显示样式、b
文本样式、c
脚本样式以及最终的d
脚本样式(第二级或更高级别的下标或上标)中使用。它们不是在基础、第一级、第二级或第三级中使用的,正如您可以从您的帖子中猜到的那样:TeX 将第三级上标/下标视为第二级。
普通 TeX 示例(与 LaTeX 相同):
$$
\mathchoice{a}{b}{c}{d}
+
{\mathchoice{a}{b}{c}{d}\over2}
+x^{\mathchoice{a}{b}{c}{d}}
+x^{y^{\mathchoice{a}{b}{c}{d}}}
$$
\bye
第一个\mathchoice
结果是A因为 TeX 是显示样式;第二个产生b因为在显示样式中找到的分数的分子在文本样式中被处理。其他两种情况应该很清楚。
现在让我们尝试一下
$$
A\mathchoice{\sp{a}}{\sp{b}}{\sp{c}}{\sp{d}}
+
{A\mathchoice{\sp{a}}{\sp{b}}{\sp{c}}{\sp{d}}\over2}
$$
第一个\mathchoice
是显示样式,第二个是文本样式,我们得到
这可能不是您所期望的,但了解确切规则时就可以预测。
现在让我们尝试一下
$$
\left( 1\over 2 \right)\mathchoice{\sp{a}}{\sp{b}}{\sp{c}}{\sp{d}}
$$
糟糕!\mathchoice
在其自己的数学列表中处理,下标为不是到前一个没有接收上标场的原子。
使用 LuaTeX 你可以做得更好,但使用 TeX 你能得到的最好的结果是
\documentclass{article}
\usepackage{xcolor}
\begingroup
\catcode`^=\active
\protected\gdef^#1{%
\sp{\mathchoice{}{}%
{\mathcolor{green!80!blue}{#1}}%
{\mathcolor{orange}{#1}}%
}%
}
\endgroup
\AtBeginDocument{\catcode`^=\active}
\begin{document}
\[
x^{a^{b^{c}}}+\sum_{k=1}^{\infty} a^{k}
\]
\end{document}
使用 LuaTeX 可以做得更好,您可以随时查询当前\mathstyle
(从 0 到 7 的整数):
\documentclass{article}
\usepackage{xcolor}
\begingroup
\catcode`^=\active
\protected\gdef^#1{%
\ifcase\mathstyle
\sp{\mathcolor{blue!80!green}{#1}}% 0 = D
\or
\sp{\mathcolor{blue!80!green}{#1}}% 1 = D'
\or
\sp{\mathcolor{blue!80!green}{#1}}% 2 = T
\or
\sp{\mathcolor{blue!80!green}{#1}}% 3 = T'
\or
\sp{\mathcolor{green!80!blue}{#1}}% 4 = S
\or
\sp{\mathcolor{green!80!blue}{#1}}% 5 = S'
\or
\sp{\mathcolor{orange}{#1}}% 6 = SS
\or
\sp{\mathcolor{orange}{#1}}% 7 = SS'
\fi
}
\endgroup
\AtBeginDocument{\catcode`^=\active}
\begin{document}
\[
x^{a^{b^{c}}}+\sum_{k=1}^{\infty} a^{k}
\]
\end{document}
答案3
即使x^2
你没有把上标放在 x 上,而是放在一个空原子上,就像x{^2}
这样更明显\sum
移到\sp
外面
\documentclass{article}
\usepackage{mathtools}
\usepackage{xcolor}
{\catcode`^\active
\gdef^#1{\sp{\mathchoice
{\mathcolor{red}{#1}}%
{\mathcolor{blue}{#1}}%
{\mathcolor{green}{#1}}%
{\mathcolor{orange}{#1}}%
}%
}
}
\AtBeginDocument{\catcode`^\active}
\begin{document}
\[
x^{{1/4}^{k^\alpha}+1}
+
\sum_{n=1}^\infty \frac{1}{n}
\]
\end{document}