经过进一步的实验,我发现可以通过在子索引周围添加更多 {} 来解决该问题,但是为什么如果没有额外的 {} 代码就不会产生正确的输出?
\documentclass[11pt]{article}
\usepackage{xcolor}
\newcommand{\dint}{\displaystyle \int}
\begin{document}
\[
\dint_1^e \frac{\ln x}{x} dx =
\dint^{\color{red} \ln e}_{\color{red} \ln 1} u ~du %buggy
=\dint_{\color{cyan}{\ln 1}}^{\color{cyan}{\ln e}} u ~du %buggy
= \dint^{\ln e}_{\ln 1} u ~du %without using color, it works fine
\]
\end{document}
答案1
\color
它的工作原理是设置一个节点,该节点使用后端特定的代码插入颜色。然后它通过\aftergroup
一个恢复颜色的节点插入。如果你有
X^{\color{red} abc} _x
那么最终结果就是
X^{\special{red} abc}\special{restore color} _x
并且下标最终以颜色还原节点为下标,而不是预期的基数。
相反,如果有额外的组
X^{{\color{red} abc}} _x
颜色还原停留在上标
X^{{\special{red} abc}\special{restore color}} _x
因此下标作用于预期的基数。