感谢 cfr我如何才能尽可能简单地获得自定义颜色的方程式数字?提供有关如何在未安装 mhchem/amsmath 包的情况下执行此操作的提示。要了解我的意思,这里有一个 MWE。如果我注释掉该行\usepackage[version=4]{mhchem}
,我就会得到所需的结果。似乎mhchem
必须以某种方式重新定义\@eqnnum
宏。
\documentclass{article}
\usepackage{xcolor,etoolbox}
\usepackage[version=4]{mhchem}
\definecolor{SAEblue}{rgb}{0, .62, .91}
\makeatletter
\patchcmd{\@eqnnum}{\normalcolor}{\color{SAEblue}}{\typeout{eqnnum patch: OK!}}{\typeout{eqnnum patch: Oh, dear!}}
\begin{document}
\begin{equation}
1 + 2 = 3\label{eq:siml}
\end{equation}
\end{document}
我搜索了mhchem.sty
、mhchem.tex
、hpstatement.sty
和rsphrase.sty
。 这些都有点超出我的理解范围,但我没有发现任何明显会导致此问题的东西。 我的下一步是查看 需要哪些软件包mhchem
,我得出了以下列表:
expl3, l3keys2e, l3regex, calc[1998/07/07], amsmath, chemgreek[2015/04/09], graphics, ifthen, textcomp, babel, twoopt
除了 之外,这些都不会导致问题amsmath
。以下 MWE 工作正常,直到您取消注释该amsmath
行:
\documentclass{article}
\usepackage{xcolor,etoolbox}
\usepackage{expl3}
\usepackage{l3keys2e}
\usepackage{l3regex}
\usepackage{calc}[1998/07/07]
%\usepackage{amsmath}
\usepackage{chemgreek}[2015/04/09]
\usepackage{graphics}
\usepackage{ifthen}
\usepackage{textcomp}
\usepackage[american]{babel}
\usepackage{twoopt}
%\usepackage[version=4]{mhchem}
\definecolor{SAEblue}{rgb}{0, .62, .91}
\makeatletter
\patchcmd{\@eqnnum}{\normalcolor}{\color{SAEblue}}{\typeout{eqnnum patch: OK!}}{\typeout{eqnnum patch: Oh, dear!}}
\begin{document}
\begin{equation}
1 + 2 = 3\label{eq:siml}
\end{equation}
\end{document}
取消注释amsmath
将使颜色恢复为黑色(但没有错误)。
在 中amsmath.ins
,我看到以下内容:
\iftagsleft@
\def\@eqnnum{\hbox to1sp{}\rlap{\normalfont\normalcolor
\hskip -\displaywidth\tagform@\theequation}}
\else
\def\@eqnnum{{\normalfont\normalcolor \tagform@\theequation}}
\fi
我认为通过\@eqnnum
补丁重新定义不会有什么区别,但老实说,我对所有这些东西的实际工作原理只有一小点了解。
此时,我正在寻求更多经验丰富的社区成员的指导,以使其与正在使用的amsmath
/包一起工作。mhchem
答案1
你使用了错误的补丁,因为在amsmath
加载时,方程编号的打印并没有委托给\@eqnnum
任何人,或者至少以不同的方式委托。例如,使用 leqno 调整方程编号的对齐方式
\documentclass{article}
\usepackage{xcolor,etoolbox}
\usepackage[version=4]{mhchem}
\definecolor{SAEblue}{rgb}{0, .62, .91}
\makeatletter
% detach \eqref and \tag making
\renewcommand{\eqref}[1]{\textup{\eqreftagform@{\ref{#1}}}}
\let\eqreftagform@\tagform@
\def\tagform@#1{%
\maketag@@@{\color{SAEblue}(\ignorespaces#1\unskip\@@italiccorr)}%
}
\makeatother
\begin{document}
In equation~\eqref{eq:siml} we state a truth.
\begin{equation}
1 + 2 = 3\label{eq:siml}
\end{equation}
\end{document}
如果您希望也\eqref
用蓝色打印方程式编号,请注释掉之前的两行\def\@tagform@
。
答案2
我有一个“黑客”解决方案:
mhchem
加载amsmath
,因此如果包含则省略amsmath
将导致错误的颜色设置。mhchem
在我看来,罪魁祸首是\gdef\df@tag{\tagform@\theequation}
,忽略了 所做的颜色更改。我使用了另一个补丁并引入了一个通用,它被定义为这里的颜色。\endmathdisplay@
\@eqnnum
\mathtagcolor
SAEblue
\documentclass{article}
\usepackage{xcolor}
\usepackage{xpatch}
\usepackage{expl3}
\usepackage{l3keys2e}
\usepackage{l3regex}
\usepackage{calc}[1998/07/07]
\usepackage{amsmath}
\usepackage{chemgreek}[2015/04/09]
\usepackage{graphicx}
\usepackage{ifthen}
\usepackage{textcomp}
\usepackage[american]{babel}
\usepackage{twoopt}
\newcommand{\mathtagcolor}{\normalcolor}
\definecolor{SAEblue}{rgb}{0, .62, .91}
\renewcommand{\mathtagcolor}{SAEblue}
\usepackage[version=4]{mhchem}
\makeatletter
\xpatchcmd{\@eqnnum}{\normalcolor}{\color{\mathtagcolor}}{\typeout{eqnnumpatch: OK!}}{\typeout{eqnnum patch: Oh, dear!}}
\@ifpackageloaded{amsmath}{%
\xpatchcmd{\endmathdisplay@a}{%
\tagform@\theequation
}{%
\color{\mathtagcolor}\tagform@\theequation
}{\typeout{patching \protect\endmathdisplay@a\ succeeded}}{\typeout{patching \protect\endmathdisplay@a\ failed}}
}{}
\makeatother
\begin{document}
\begin{equation}
1 + 2 = 3\label{eq:siml}
\end{equation}
\end{document}