感謝 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
我有一個“hacky”解決方案:
mhchem
負載amsmath
,因此如果包含的話,省略amsmath
無論如何都會導致錯誤的顏色設定。mhchem
\gdef\df@tag{\tagform@\theequation}
在\endmathdisplay@
我看來,罪魁禍首是忽略了 所做的顏色變化\@eqnnum
。我使用了另一個補丁並引入了一個 General \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}